a73x

404f2d42

test: the attach-ordering guard asserts its own frame

a73x   2026-09-03 20:23

Commit message
test: the attach-ordering guard asserts its own frame

The two firstStateFrame waits discarded their optional, so a null — ten
seconds with no state frame, meaning the seat never happened — passed
silently and the guard the two lines exist for proved nothing. Each names
its own error now.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SakwJEwD9dXBoRP5kWbemW

src/server/server_test_attach.zig
Old New
@@ -544,9 +544,11 @@ test "Server: scrollback fetch is per-client and independent" {
544 // `seatClient` has run for that fd. The daemon is on its own thread here, 544 // `seatClient` has run for that fd. The daemon is on its own thread here,
545 // so without the waits A's attach could be seated after B's and the grid 545 // so without the waits A's attach could be seated after B's and the grid
546 // would be at A's 80x24, which is the opposite of what the selections 546 // would be at A's 80x24, which is the opposite of what the selections
547 // below are about. 547 // below are about. The frames are ASKED FOR, not discarded: a null here
548 _ = try h.firstStateFrame(alloc, a.handle, 10_000); 548 // is a seat that never happened, and swallowing it would leave the wait
549 _ = try h.firstStateFrame(alloc, b.handle, 10_000); 549 // in place while it proved nothing.
550 _ = (try h.firstStateFrame(alloc, a.handle, 10_000)) orelse return error.NoStateFrameForA;
551 _ = (try h.firstStateFrame(alloc, b.handle, 10_000)) orelse return error.NoStateFrameForB;
550 552
551 // Typed by B; both clients see the history it produces. Every output row 553 // Typed by B; both clients see the history it produces. Every output row
552 // carries the SAME marker, and the selections below read a row well down 554 // carries the SAME marker, and the selections below read a row well down