fix(test): the GPU terminal suites measure geometry the flip changed

Stage 3 review round 2. `vterm_stage3_acceptance`'s three terminal
fixtures opened with no `display`, so the flip placed them in a 12-row
panel — and this suite measures RENDERED FRAMES and CHILD PTY GEOMETRY.
It was measuring the geometry the flip had changed underneath it.

I nearly recorded this as a flake, and the reasoning that stopped me is
worth keeping. Two CI runs on the same commit failed DIFFERENT suites:
the first `vterm_stage2`'s real-TUI smoke, the rerun `vterm_stage3`'s
a37 plus two GPU terminal tests. Different failures across runs is the
load-sensitivity signature, both suites are on the documented flake
surface, and the ledger says a red a37 is "ambiguous by construction".
Every indicator pointed at noise.

But the tests it kept landing on were GPU TERMINAL tests, and terminal
placement is exactly what this PR changed. Checking rather than
concluding: all three `terminal.open` fixtures omitted `display`. So the
flip did reach them. It did not BREAK them — they pass locally, and they
passed in one CI run each — it made them MARGINAL, by shrinking the
window whose rendered output they assert against. Marginal under
lavapipe on the heaviest job in the workflow reads exactly like a flake
until you ask which tests, and why those.

The distinction that matters: "my change made this fragile" is a
different finding from "this was always flaky", and only one of them is
mine to fix.

These take the explicit opt-out for the same reason `vterm_stage2`'s
smoke already did — their subject is rendering, geometry and input
round-trip over a full document window, not placement, which the panel
suites cover. The reason is stated at each fixture rather than once at
the top, because each asserts a different property of the geometry.

Verified: vterm_stage3 9/9 with a37 taking 4.33s rather than the 0.17s
that means it never ran; vterm_stage2 6/6; and the full crdt sweep at
3718 passed / 0 failed against a measured 3715/0 baseline, the +3 being
this PR's new pins.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Levi Neuwirth 2026-08-04 18:00:58 +02:00
parent 6b4d52a5bc
commit fdbeb5cc32
No known key found for this signature in database
1 changed files with 12 additions and 0 deletions

View File

@ -608,8 +608,14 @@ pmacs.command.define {
name = "vterm-probe.open", name = "vterm-probe.open",
description = "Open the Stage 3 acceptance terminal child.", description = "Open the Stage 3 acceptance terminal child.",
fn = function() fn = function()
-- Bottom-panel Stage 3: explicit opt-out. This suite measures
-- RENDERED FRAMES and child PTY geometry against a full document
-- window; the panel default would put the child in a 12-row side
-- window and change the very geometry under test. Placement is
-- covered by the panel suites.
return pmacs.terminal.open { return pmacs.terminal.open {
command = "/bin/sh", command = "/bin/sh",
display = "current",
args = { "-c", args = { "-c",
"i=0; while [ $i -lt 400 ]; do printf 'VTERMROW%02d\n' \"$i\"; i=$((i+1)); sleep 0.05; done" }, "i=0; while [ $i -lt 400 ]; do printf 'VTERMROW%02d\n' \"$i\"; i=$((i+1)); sleep 0.05; done" },
} }
@ -1140,8 +1146,11 @@ pmacs.command.define {
name = "vterm-probe.open", name = "vterm-probe.open",
description = "Open a quiet terminal that counts SIGWINCH.", description = "Open a quiet terminal that counts SIGWINCH.",
fn = function() fn = function()
-- Stage 3 opt-out: this test asserts the child's PTY geometry
-- settles and stops signalling. A panel changes that geometry.
return pmacs.terminal.open { return pmacs.terminal.open {
command = "/bin/sh", command = "/bin/sh",
display = "current",
args = { "-c", args = { "-c",
"n=0; trap 'n=$((n+1)); printf \"WINCH %d\r\n\" \"$n\"' WINCH; " .. "n=0; trap 'n=$((n+1)); printf \"WINCH %d\r\n\" \"$n\"' WINCH; " ..
"printf 'READY\r\n'; while :; do sleep 0.2; done" }, "printf 'READY\r\n'; while :; do sleep 0.2; done" },
@ -1163,8 +1172,11 @@ pmacs.command.define {
name = "vterm-probe.open", name = "vterm-probe.open",
description = "Open a terminal child that copies stdin to stdout.", description = "Open a terminal child that copies stdin to stdout.",
fn = function() fn = function()
-- Stage 3 opt-out: input must round-trip through a frame rendered
-- over the document window this test measures.
return pmacs.terminal.open { return pmacs.terminal.open {
command = "/bin/sh", command = "/bin/sh",
display = "current",
args = { "-c", "printf 'READY\r\n'; exec cat" }, args = { "-c", "printf 'READY\r\n'; exec cat" },
} }
end, end,