a73x

fa7a3295

docs: an e2e comment that names a size no leg runs at is deleted

a73x   2026-08-26 14:26

Commit message
docs: an e2e comment that names a size no leg runs at is deleted

Six comments read "two tiles at 100x30 trip the aspect rule (100 >= 60)"
above legs that all run `ptyclient --cols 40 --rows 30`. `rootOrient` is
`cols >= 2 * rows`, so 40x30 does NOT trip it and the wall is stacked —
which is what every one of those legs needs. Wrong width, wrong outcome,
and the assertions below only work because the comment is wrong. Where
the orientation is load-bearing the assertion already spells it out
("3 tiles on 30 rows: stripes at 1/11/21"), so these name nothing that
can fail. The 90x24 one whose code runs 70x36 stays.

The pins paragraph had drifted the same way in the other direction: it
said 65 checkpoints while the pin said 76, and the note recording the
LAST drift had itself drifted. The ordinal narrative behind it renumbered
on every insertion and had stopped adding up. Both are replaced by the
rule — the two literals at the end of the file are the only count, and
the convergence-point exemptions are stated as the categories they
always were.

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

test/e2e.sh
Old New
@@ -5152,7 +5152,6 @@ wait_grid "$SOCK26" "cwb-pin" "CLI wall: session b's marker" b
5152 --sock "$SOCK26" --session b > "$OUT.cwinj" 2>&1 ) & 5152 --sock "$SOCK26" --session b > "$OUT.cwinj" 2>&1 ) &
5153 CWINJPID=$! 5153 CWINJPID=$!
5154 set +e 5154 set +e
5155 # tall: two tiles at 100x30 trip the aspect rule (100 >= 60)
5156 timeout 40 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.cwcap" --err "$OUT.cwcap.err" -- \ 5155 timeout 40 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.cwcap" --err "$OUT.cwcap.err" -- \
5157 "$MUX" wall --sock "$SOCK26#a" "--sock $SOCK26#b" > "$OUT.cwpc" 2>&1 <<'EOF' 5156 "$MUX" wall --sock "$SOCK26#a" "--sock $SOCK26#b" > "$OUT.cwpc" 2>&1 <<'EOF'
5158 expect cwlive-pin 20000 5157 expect cwlive-pin 20000
@@ -6351,7 +6350,6 @@ _whx_n=$(wc -l < "$WHXSTATE/mux/wall")
6351 # single expect plus `settle` gives; the tile it forgets is the FOCUSED 6350 # single expect plus `settle` gives; the tile it forgets is the FOCUSED
6352 # one, tile 0, whose line the file is then asserted NOT to hold. 6351 # one, tile 0, whose line the file is then asserted NOT to hold.
6353 set +e 6352 set +e
6354 # tall: two tiles at 100x30 trip the aspect rule (100 >= 60)
6355 XDG_STATE_HOME="$WHXSTATE" timeout 60 "$PTYCLIENT" --cols 40 --rows 30 \ 6353 XDG_STATE_HOME="$WHXSTATE" timeout 60 "$PTYCLIENT" --cols 40 --rows 30 \
6356 --out "$OUT.whxcap" --err "$OUT.whxcap.err" -- \ 6354 --out "$OUT.whxcap" --err "$OUT.whxcap.err" -- \
6357 "$MUX" wall > "$OUT.whxpc" 2>&1 <<'EOF' 6355 "$MUX" wall > "$OUT.whxpc" 2>&1 <<'EOF'
@@ -7212,7 +7210,6 @@ wait_grid "$SOCK50" "wmb-pin" "wall cluster: session b's marker" b
7212 # other way. A negative that cannot fail is not a test, so each carries the 7210 # other way. A negative that cannot fail is not a test, so each carries the
7213 # marker that MUST land in the focused session. 7211 # marker that MUST land in the focused session.
7214 set +e 7212 set +e
7215 # tall: two tiles at 100x30 trip the aspect rule (100 >= 60)
7216 timeout 60 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.wmcap3" --err "$OUT.wmcap3.err" -- \ 7213 timeout 60 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.wmcap3" --err "$OUT.wmcap3.err" -- \
7217 "$MUX" wall "--sock $SOCK50#a" "--sock $SOCK50#b" > "$OUT.wmpc3" 2>&1 <<'EOF' 7214 "$MUX" wall "--sock $SOCK50#a" "--sock $SOCK50#b" > "$OUT.wmpc3" 2>&1 <<'EOF'
7218 expect wmb-pin 20000 7215 expect wmb-pin 20000
@@ -7242,7 +7239,6 @@ grep -q "wm-three" "$OUT.wmfa" && {
7242 # The other direction: focus b explicitly, then click a's content and watch 7239 # The other direction: focus b explicitly, then click a's content and watch
7243 # the focus come back to a. 7240 # the focus come back to a.
7244 set +e 7241 set +e
7245 # tall: two tiles at 100x30 trip the aspect rule (100 >= 60)
7246 timeout 60 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.wmcap4" --err "$OUT.wmcap4.err" -- \ 7242 timeout 60 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.wmcap4" --err "$OUT.wmcap4.err" -- \
7247 "$MUX" wall "--sock $SOCK50#a" "--sock $SOCK50#b" > "$OUT.wmpc4" 2>&1 <<'EOF' 7243 "$MUX" wall "--sock $SOCK50#a" "--sock $SOCK50#b" > "$OUT.wmpc4" 2>&1 <<'EOF'
7248 expect wmb-pin 20000 7244 expect wmb-pin 20000
@@ -7594,7 +7590,6 @@ pipe_detach
7594 wait_grid "$SOCK52" "mc-pin" "cursor: session c's marker" c 7590 wait_grid "$SOCK52" "mc-pin" "cursor: session c's marker" c
7595 7591
7596 set +e 7592 set +e
7597 # tall: three tiles at 100x30 trip the aspect rule (100 >= 60)
7598 timeout 40 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.cucap" --err "$OUT.cucap.err" -- \ 7593 timeout 40 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.cucap" --err "$OUT.cucap.err" -- \
7599 "$MUX" wall --sock "$SOCK52#a" "--sock $SOCK52#b" "--sock $SOCK52#c" > "$OUT.cupc" 2>&1 <<'EOF' 7594 "$MUX" wall --sock "$SOCK52#a" "--sock $SOCK52#b" "--sock $SOCK52#c" > "$OUT.cupc" 2>&1 <<'EOF'
7600 expect mc-pin 20000 7595 expect mc-pin 20000
@@ -7668,7 +7663,6 @@ pipe_detach
7668 wait_grid "$SOCK53" "sb2nbr" "scrollback-rect: session b's pin" b 7663 wait_grid "$SOCK53" "sb2nbr" "scrollback-rect: session b's pin" b
7669 7664
7670 set +e 7665 set +e
7671 # tall: two tiles at 92x30 trip the aspect rule (92 >= 60)
7672 timeout 90 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.sb2cap" --err "$OUT.sb2cap.err" -- \ 7666 timeout 90 "$PTYCLIENT" --cols 40 --rows 30 --out "$OUT.sb2cap" --err "$OUT.sb2cap.err" -- \
7673 "$MUX" wall "--sock $SOCK53#a" "--sock $SOCK53#b" > "$OUT.sb2pc" 2>&1 <<'EOF' 7667 "$MUX" wall "--sock $SOCK53#a" "--sock $SOCK53#b" > "$OUT.sb2pc" 2>&1 <<'EOF'
7674 expect sb2nbr 20000 7668 expect sb2nbr 20000
@@ -7715,136 +7709,25 @@ DPID=""
7715 7709
7716 # The pins. Literals, not variables set from counting something else — 7710 # The pins. Literals, not variables set from counting something else —
7717 # "assert the literal, never the constant the code under test reads" 7711 # "assert the literal, never the constant the code under test reads"
7718 # (decisions.md, M10). 65 scenario checkpoints; 37 convergence points. 7712 # (decisions.md, M10). The two figures live at the END of this file and
7719 # (The first of these two numbers had drifted to 43 while the pin below 7713 # nowhere else: a count repeated in prose is a count nothing gates, and
7720 # said 63 — prose is not gated, which is why the pin is.) 7714 # both of the ones that used to stand here had drifted away from the pins
7721 # Anyone adding a scenario updates these by hand, on purpose. 7715 # they described. Adding a scenario means editing those two literals by
7722 # 7716 # hand, on purpose.
7723 # M18 added three checkpoints and no convergence points: its wall block 7717 #
7724 # asserts through assert_ws_converged, which is deliberately outside 7718 # Why most legs carry no convergence point. `assert_converged` replays one
7725 # CONV_COUNT (see its comment) — that pin counts assert_converged call 7719 # client capture into an engine and diffs it against one daemon grid, so it
7726 # sites, and folding the two together would make either number stop 7720 # can only speak where BOTH exist and the grid is the subject. It says
7727 # meaning anything. The side-channel leg added the 27th and no convergence 7721 # nothing about a side channel (OSC 52, a window title, pty modes, a
7728 # point: its capture is asserted on for a byte the grid does not carry. The 7722 # fingerprint ssh printed, bytes counted rather than read), about a file an
7729 # paste leg added the 28th and no convergence point either: what it asserts 7723 # editor or the wall wrote, about an exit code or a status field, about
7730 # on is a file an editor wrote, not a grid at all. The window-title leg 7724 # WHICH of two sessions a keystroke reached, about scrollback the live grid
7731 # added the 29th, and no convergence point for the side-channel reason 7725 # does not hold, about the absence of bytes two agreeing empties would
7732 # again: it asserts on a capture, for bytes no grid carries. The 30th is 7726 # agree on anyway, or about a leg that never attaches at all. It also does
7733 # that leg's negative twin — the same bytes, asserted ABSENT from a client 7727 # not claim to reproduce a full-screen application's redraws byte for byte,
7734 # that took no terminal over — and carries no convergence point either. The 7728 # which is why the alternate-screen legs stay out. A leg that asserts on
7735 # 31st is the bell burst, and no convergence point for the side-channel 7729 # one of those and adds a convergence point would be pinning a fact every
7736 # reason a third time: what it asserts on is a COUNT of bytes in a capture, 7730 # leg above already establishes.
7737 # and a grid carries neither the bytes nor the number of them. The 32nd is
7738 # the dynamic wall, and no convergence point either: what it asserts on is
7739 # the hub's HTTP answers and the wall FILE — its one grid check rides on
7740 # `expectgrid` inside the stand-in, which no more counts here than the M18
7741 # wall block's convergence does. The 33rd is the CLI wall, and no
7742 # convergence point for the M12 reason: it asserts on a ptyclient capture
7743 # — bytes a wall painted to a terminal — which no grid dump can witness.
7744 # The 34th is the Ctrl-\ prefix, and no convergence point for that same
7745 # reason: its subject is what the client REFUSED to forward, which a grid
7746 # that never saw the bytes cannot testify to either way. The 35th is
7747 # Ctrl-\ c, and no convergence point either: what it compares is TWO
7748 # sessions' grids against each other — one holding a marker, one refusing
7749 # to — and assert_converged speaks about one session at a time. The 36th is
7750 # the session ring, and no convergence point for that same reason a second
7751 # time: it compares THREE sessions' grids against each other. The 37th is
7752 # Ctrl-\ w, and no convergence point for the CLI wall's reason: what it
7753 # asserts on is a ptyclient capture holding two sessions' bytes at once,
7754 # which no dump of one grid can witness. The 38th is the self-attach
7755 # refusal, and no convergence point because it has no client to converge:
7756 # the leg exists to prove no client was ever created, and its evidence is a
7757 # status field and a shell's exit code, neither of which is a grid. The
7758 # 39th is the wall's focus move, and no convergence point for the CLI wall's
7759 # reason a third time: its subject is a ptyclient capture — one terminal
7760 # holding two sessions' bytes — plus a COUNT the daemon kept while nobody
7761 # was looking, neither of which is a grid. The 40th is the wheel, and no convergence point because
7762 # what it asserts on is a SCROLLBACK view — rows the live grid does not
7763 # hold, which is the whole reason to scroll — plus the absence of bytes
7764 # from a grid, which converging two identical empties would say nothing
7765 # about. The 41st is its twin, the application that owns the mouse, and no
7766 # convergence point for the side-channel reason: its subject is the modes
7767 # the client wrote to a terminal and the echo of bytes it forwarded, and a
7768 # grid carries the second without carrying the first. The 42nd is the wheel
7769 # on the ALTERNATE screen, and no convergence point because the grid it
7770 # asserts on belongs to a pager holding that screen — assert_converged
7771 # replays a capture into an engine and compares, and a capture whose whole
7772 # subject is a full-screen application's redraws is one this suite has
7773 # never claimed to reproduce byte for byte. The 43rd is the client with no
7774 # terminal of its own, and no convergence point because it HAS no terminal:
7775 # there is no capture to converge, which is the entire point of the leg. The
7776 # 44th is the focus skipping between tiles, and no convergence point for the
7777 # CLI wall's reason a fourth time: its subject is one terminal's capture
7778 # holding two sessions' bytes, plus a COUNT the daemon kept while nobody was
7779 # looking — neither of which is a grid. The 45th is its negative twin, the wall that forwards nothing, and no
7780 # convergence point because what it asserts on is the ABSENCE of bytes from
7781 # a grid, which converging two grids that agree about that absence would say
7782 # nothing about. The 46th is
7783 # the tile whose pump died, and no convergence point because its subject is
7784 # a session that DOES NOT EXIST: what the leg reads is what a terminal was
7785 # told about a refused attach, and there is no grid on either side to
7786 # converge. The 47th is the wall as attach history, and no convergence
7787 # point because its subject is a FILE — lines a client wrote beside the
7788 # session, plus a hash that must not move when an agent attaches — and no
7789 # grid records what was written down about it. The 48th is `x`, and no
7790 # convergence point either: what it asserts on is that file shrinking by
7791 # one line while the session it named goes on answering, which is two
7792 # facts a grid comparison speaks to neither of. The 49th, 50th and 51st are
7793 # the convergence block (phase 3c), and no convergence point between the
7794 # three of them: what they assert on is a ptyclient capture, a cumulative
7795 # attach COUNTER, the wall file and an exit CODE — a screen, a number, a
7796 # file and a status, and the last of them names a session that no longer
7797 # exists to dump. The 56th is agent forwarding's positive leg, and no
7798 # convergence point because its subject is one string on a terminal — a
7799 # fingerprint openssh printed after a round trip through the daemon — and
7800 # converging the grid that string landed in would only say the client
7801 # painted what the daemon holds, which is a fact every leg above already
7802 # establishes and this one does not doubt. The 57th is its negative twin,
7803 # and no convergence point for the same reason plus the exit-code reason:
7804 # what it asserts on is a shell's `$?` and a wall-clock bound, and a grid
7805 # comparison speaks to neither. The 58th is the two-agent flip, and no
7806 # convergence point because its subject is which of two clients' terminals
7807 # a fingerprint was answered FOR — a difference the two grids do not carry,
7808 # since both replicate the same session and hold both answers alike. The
7809 # 59th is the `-A` preflight, and no convergence point because it never
7810 # attaches: what it asserts on is an exit code and a message, before any
7811 # transport exists to converge. The 61st and 62nd are the wall's mouse —
7812 # a report not read as keys, then a click that selects — and neither is a
7813 # convergence point, because their subject is WHICH SESSION a keystroke
7814 # reached (read off two daemon captures, one of which must not contain it)
7815 # and a client grid compared against the daemon's says nothing about where
7816 # the wall decided to send input. The 63rd is the drag that copies, and no
7817 # convergence point because its subject is a side channel and not a grid:
7818 # what it asserts on is OSC 52 arriving on the client's own tty, carrying
7819 # text the daemon extracted from rows the client never painted twice. They
7820 # are last in the file rather than beside the other wall legs on purpose:
7821 # the ordinals in this paragraph are positions, so a scenario inserted in
7822 # the middle renumbers every sentence after it.
7823 #
7824 # The 64th is the drag across WIDE cells, and it IS a convergence point —
7825 # the first one this feature has. Everything else it asserts is the
7826 # daemon's state or the painter's own escape bytes, and neither can see a
7827 # row that emits the same wide glyph twice: the substrings a painter is
7828 # supposed to emit are all still present, and the row is a column too wide.
7829 # That shipped and was found by hand. This is the check that would have
7830 # caught it.
7831 #
7832 # The 65th is the in-band size report, and no convergence point: its
7833 # subject is what the DAEMON wrote to the app's stdin, read back off the
7834 # grid as the text `cat -v` made of it; the client's replica carries the
7835 # same rows and would add nothing.
7836 #
7837 # The 66th is the refused default socket path, and no convergence point:
7838 # nothing attaches, so there is no grid on either side — it asserts on an
7839 # exit code and on a message naming the variable, because the guess it
7840 # replaced also exited nonzero and only the wording tells them apart.
7841 #
7842 # The 67th is the mute offerer, and no convergence point for the 58th's
7843 # reason: its subject is whether ssh in the session got an answer, and how
7844 # fast, which is a side channel no grid carries. Last in the file because
7845 # it is the one leg that holds an ssh-agent under SIGSTOP, and a trap that
7846 # has to CONT before it kills is cheaper to reason about with nothing
7847 # after it.
7848 7731
7849 # ---- fullscreen: f toggles, focus follows, restore ------------------- 7732 # ---- fullscreen: f toggles, focus follows, restore -------------------
7850 # 7733 #