a73x

cf341e7c

test: the CLI wall leg stops betting on a pump race

a73x   2026-08-24 11:32

Commit message
test: the CLI wall leg stops betting on a pump race

Two tiles paint their first stripes in whichever order their
snapshots land, and ptyclient's expect cursor cannot bet on a race:
when b painted before a, cwb-pin sat behind the cursor and the leg
timed out. The old comment claimed the t+5s injection repaints b's
whole stripe — true of the painter this leg was written against,
false since every tile claims its rect and deltas repaint only dirty
rows. The one expect left anchors on the injected delta, the only
bytes guaranteed late; the snapshot markers were always asserted
order-free by the greps on the capture.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

test/e2e.sh
Old New
@@ -4922,12 +4922,12 @@ ok "the wall is runtime state: add, remove, reorder, restore, argv adds"
4922 # are shell-EXPANDED (`%s`+pin), the M18 trick: a hit is the shell's work, 4922 # are shell-EXPANDED (`%s`+pin), the M18 trick: a hit is the shell's work,
4923 # never an echo of anything typed here. 4923 # never an echo of anything typed here.
4924 # 4924 #
4925 # The expect ORDER leans on the injection, deliberately: tile threads 4925 # The one expect anchors on the injected delta, deliberately: tile pumps
4926 # race, so b's snapshot bytes may land before a's and behind the expect 4926 # paint their first stripes in whichever order their snapshots land — a
4927 # cursor. The injection at t+5s repaints b's whole stripe late in the 4927 # thread race, and ptyclient's expect cursor cannot bet on it. The
4928 # stream — snapshot marker and live marker in one ordered repaint — so 4928 # injected delta is the one byte sequence guaranteed late (t+5s into a
4929 # every needle below is downstream of the cwa-pin match by construction 4929 # replica that must already hold b's snapshot); the snapshot markers are
4930 # (a's local-socket snapshot paints in well under 5s). 4930 # asserted order-free by the greps on the capture below.
4931 # 4931 #
4932 # The two tiles are spelled DIFFERENTLY on purpose: `--sock PATH` as two 4932 # The two tiles are spelled DIFFERENTLY on purpose: `--sock PATH` as two
4933 # arguments (muxweb's dialect) and as one quoted spelling (the wall file's). 4933 # arguments (muxweb's dialect) and as one quoted spelling (the wall file's).
@@ -4953,9 +4953,7 @@ CWINJPID=$!
4953 set +e 4953 set +e
4954 timeout 40 "$PTYCLIENT" --cols 100 --rows 30 --out "$OUT.cwcap" --err "$OUT.cwcap.err" -- \ 4954 timeout 40 "$PTYCLIENT" --cols 100 --rows 30 --out "$OUT.cwcap" --err "$OUT.cwcap.err" -- \
4955 "$MUX" wall --sock "$SOCK26#a" "--sock $SOCK26#b" > "$OUT.cwpc" 2>&1 <<'EOF' 4955 "$MUX" wall --sock "$SOCK26#a" "--sock $SOCK26#b" > "$OUT.cwpc" 2>&1 <<'EOF'
4956 expect cwa-pin 15000 4956 expect cwlive-pin 20000
4957 expect cwb-pin 20000
4958 expect cwlive-pin 5000
4959 send \x1cd 4957 send \x1cd
4960 waitexit 10000 4958 waitexit 10000
4961 EOF 4959 EOF