fix(tmux): locate the REPL input box by shape, not by a Claude-only glyph #1363

Merged
gate-merge-01 merged 2 commits from fix/1362-harness-aware-delivery-confirm into next 2026-08-21 23:45:09 +00:00
Showing only changes of commit 0ca192baaa - Show all commits
@@ -122,9 +122,16 @@ locate_input_box() {
glyph_line=$(printf '%s\n' "$pane" | grep -E '|^>|│ >' | tail -1)
if [ -n "$glyph_line" ]; then printf '%s\n' "$glyph_line"; return 0; fi
rule_lines=$(printf '%s\n' "$pane" | grep -nE '^[[:space:]]*─{4,}[[:space:]]*$' | cut -d: -f1 | tail -2)
[ "$(printf '%s\n' "$rule_lines" | grep -c .)" -eq 2 ] || return 1
top=$(printf '%s\n' "$rule_lines" | head -1)
bottom=$(printf '%s\n' "$rule_lines" | tail -1)
[ -n "$rule_lines" ] || return 1
# Split the (at most two) captured line numbers with parameter expansion. Not
# `head -1`: piping into an early-exiting consumer SIGPIPEs the producer, which
# under `set -euo pipefail` aborts the caller with rc=141 and no output. The
# scripts/pipefail-early-exit.test.mjs guard reds on that shape, correctly.
# With one rule captured both halves resolve to the same value and the
# ordering test below rejects it, which is the answer we want anyway.
top=${rule_lines%%$'\n'*}
bottom=${rule_lines##*$'\n'}
[ "$top" != "$bottom" ] || return 1
[ "$bottom" -gt "$top" ] || return 1
# An empty range (adjacent rules) prints nothing and still returns 0: found,
# empty, which is the delivered shape.