Files
Neil ec2bcb2d37 test(runtime): capture what a turn ending, a residual window and a two-row composer really do
Attempt six shipped with three rules, two open captures and one mutation-dead
clause. All three are addressed against a live `agy` — which self-updated to
banner 1.2.1 mid-investigation, so the whole rule set is now confirmed across a
version bump it did not know about.

**The rule clause decided nothing.** Deleting "the line above the caret is a run
of dashes" failed no test: every capture ending on a bare `>` also had the
composer rule above it. `antigravity-composer-multiline-unsent.txt` is the state
that separates them — `abc` typed, then shift+enter, leaving an empty second
composer row, so the tail ends on a bare `>` under `> abc`. Without the clause
that reads ready, and a delivered prompt is appended to the operator's own text:
a mis-send, not a wedge. The `>= 8` floor is still mutation-dead and is now
documented as unpinned rather than defended.

**The residual window is a capture, not an argument.** Chunk-level timing puts it
at ~116 ms between a frame park and the first spinner tick.
`antigravity-busy-residual-window.txt` lands in it. Its sibling,
`...-no-spinner.txt`, kills the proposed braille clause outright rather than
merely subsuming it: a turn's first frame draws the spinner row with no glyph, so
that capture carries zero braille codepoints while the turn is live, and even an
unbounded braille scan would call it ready. The gap stays pinned and open.

**A finished turn was mischaracterised, and the capture wins.** The refusal has
nothing to do with the turn ending in an error. `agy` ends a turn on one of two
frames, and the spinner-erase touch-up walks back down over the composer box with
bare newlines without redrawing it, so the retained tail loses rows the real
terminal still holds. Twelve real turns ended that way 3 times and on a full
repaint 9 times; neither state is transient.
`antigravity-turn-ended-composer-repainted.txt` is committed as the pair, because
either capture alone is misleading — the same trap §8 already records, hit again.

Also adds the adversarial matrix run against the live binary: seven dialogs, four
grid widths, type-ahead, and pane content carrying box-drawing glyphs or the
banner string. Line-wrapping does not split the rule, because `agy` draws it at
the grid width; below ~17 columns the banner gate fails first, and a scrollback
long enough to evict the banner fails the same safe way.
2026-09-11 01:26:13 -07:00
..
2026-09-10 18:29:07 +00:00
2026-08-28 00:59:21 -07:00