fa7a3295
docs: an e2e comment that names a size no leg runs at is deleted
a73x 2026-08-26 14:26
Commit message
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 | # |