What happened
make test-e2e-tui on dev 62cae8580 (2026-09-18, the staging promotion of #1194) fails 6 of 17 subtests. The same six fail identically on cfdc29ded (v0.2.1) with that commit's own suite, so this is not a regression of #1194: the suite drifted from the surface some time before v0.2.1 and nobody had run it since. The internal/e2e files and the home/spend files those tests read are byte-identical between the two commits.
--- FAIL: TestTUIE2E/home_opens_on_launch_as_seven_panels (5.67s)
tui_e2e_test.go:383: home's foot is not the resting sentence:
type to search or start something new · ↑↓ pick · enter open · ctrl+o open folder · tab next place
--- FAIL: TestTUIE2E/a_real_conversation_on_the_panels_and_its_search_card (7.33s)
tui_e2e_test.go:502: `where you were` does not lead with this window's own `here` row:
--- FAIL: TestTUIE2E/answer_from_home_across_two_windows (27.38s)
tui_e2e_test.go:1123: the asking row is not under "needs you":
--- FAIL: TestTUIE2E/the_projects_panel_is_the_view_by_project (4.68s)
--- FAIL: TestTUIE2E/a_refused_task_proposal_draws_no_schema_sentence (114.67s)
--- FAIL: TestTUIE2E/space_in_the_task_room_pages_the_card (124.25s)
tui_e2e_test.go:1967: waited 30s for ["new conversation"] and never saw it.
One cause per test, from the screens the suite logged:
home_opens_on_launch_as_seven_panels — the oracle is the exact string homeFootWord + " · " + placeHintTail; the foot now carries ctrl+o open folder between those clauses.
a_real_conversation_on_the_panels_and_its_search_card — the here oracle clips the row at a third of the width before here is reached. (Its FINDING: no spent $… clause line is a diagnostic log, not the failing assertion — worth its own look.)
answer_from_home_across_two_windows — searches for needs you · while the screen draws a bare needs you heading with the question on the next row.
the_projects_panel_is_the_view_by_project — panelColumn clips to the left half; the projects panel now begins in the right half.
a_refused_task_proposal_draws_no_schema_sentence — after proving the refusal is hidden, waits for a standing-reminder string unrelated to the proposal.
space_in_the_task_room_pages_the_card — assumes a stable selected row and an untitled readback session while live titling changes both; the space-vs-pgdown assertion itself passes.
The untagged word gate (go test ./internal/e2e/, tuiwords_test.go) is green because every word still exists in internal/tui3; it cannot see a shape rotting.
Replication
Deterministic (no model). None: these are real-terminal, real-model tests by design.
Field (real models). OPENROUTER_API_KEY (or the profile's key), tmux, ~6 minutes, a few cents:
make build && go test -tags e2e -count=1 -timeout 25m -v \
-run 'TestTUIE2E/(home_opens_on_launch_as_seven_panels|a_real_conversation_on_the_panels_and_its_search_card|answer_from_home_across_two_windows|the_projects_panel_is_the_view_by_project|a_refused_task_proposal_draws_no_schema_sentence|space_in_the_task_room_pages_the_card)$' \
./internal/e2e/
Fires on every run, on dev@62cae8580 and on v0.2.1.
Where
internal/e2e/tui_e2e_test.go — the assertions at home's foot is not the resting sentence, does not lead with this window's own, is not under "needs you", panelColumn, and the two task-room waits.
The fix
The six oracles read the surface's current shape (the foot sentence with the folder chord, the bare needs you heading, the projects panel's real column, a selected row that may be retitled while the test looks), and the suite goes green on make test-e2e-tui twice in a row before a promotion leans on it again.
Acceptance
End to end: make test-e2e-tui passes all 17 subtests on dev, twice.
What happened
make test-e2e-tuion dev62cae8580(2026-09-18, the staging promotion of #1194) fails 6 of 17 subtests. The same six fail identically oncfdc29ded(v0.2.1) with that commit's own suite, so this is not a regression of #1194: the suite drifted from the surface some time before v0.2.1 and nobody had run it since. Theinternal/e2efiles and the home/spend files those tests read are byte-identical between the two commits.One cause per test, from the screens the suite logged:
home_opens_on_launch_as_seven_panels— the oracle is the exact stringhomeFootWord + " · " + placeHintTail; the foot now carriesctrl+o open folderbetween those clauses.a_real_conversation_on_the_panels_and_its_search_card— thehereoracle clips the row at a third of the width beforehereis reached. (ItsFINDING: no spent $… clauseline is a diagnostic log, not the failing assertion — worth its own look.)answer_from_home_across_two_windows— searches forneeds you ·while the screen draws a bareneeds youheading with the question on the next row.the_projects_panel_is_the_view_by_project—panelColumnclips to the left half; theprojectspanel now begins in the right half.a_refused_task_proposal_draws_no_schema_sentence— after proving the refusal is hidden, waits for a standing-reminder string unrelated to the proposal.space_in_the_task_room_pages_the_card— assumes a stable selected row and an untitled readback session while live titling changes both; the space-vs-pgdown assertion itself passes.The untagged word gate (
go test ./internal/e2e/,tuiwords_test.go) is green because every word still exists ininternal/tui3; it cannot see a shape rotting.Replication
Deterministic (no model). None: these are real-terminal, real-model tests by design.
Field (real models).
OPENROUTER_API_KEY(or the profile's key),tmux, ~6 minutes, a few cents:Fires on every run, on
dev@62cae8580and onv0.2.1.Where
internal/e2e/tui_e2e_test.go— the assertions athome's foot is not the resting sentence,does not lead with this window's own,is not under "needs you",panelColumn, and the two task-room waits.The fix
The six oracles read the surface's current shape (the foot sentence with the folder chord, the bare
needs youheading, the projects panel's real column, a selected row that may be retitled while the test looks), and the suite goes green onmake test-e2e-tuitwice in a row before a promotion leans on it again.Acceptance
End to end:
make test-e2e-tuipasses all 17 subtests on dev, twice.