From 6142acc20301d78809592c3edbeb34a8efcc6286 Mon Sep 17 00:00:00 2001 From: Levi Neuwirth Date: Fri, 21 Aug 2026 14:26:32 +0200 Subject: [PATCH] test(panel): Q5 names the successor frame it orders against `!messages.is_empty()` could be satisfied by any unrelated semantic message, so the row asserted an ordering against a frame it never confirmed was there. It now requires the unwritten messages to contain InstanceMessage::PanelFrame(PanelFramePayload::Absent) --- the successor frame whose own transition raised the release. The assertion bites: suppressing that payload while keeping the cancellation fails the row, where the emptiness check would not have noticed. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_016bqGA6s9tTUFzYpbeW3tai --- src/daemon.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/daemon.rs b/src/daemon.rs index d7144fb..5ad56f5 100644 --- a/src/daemon.rs +++ b/src/daemon.rs @@ -8813,9 +8813,16 @@ mod tests { merely both arriving" ); assert!( - !messages.is_empty(), - "fixture: projection really did produce the successor frame \ - whose own transition required that release" + messages.iter().any(|message| matches!( + message, + InstanceMessage::PanelFrame(pmacs_protocol::panel::PanelFramePayload::Absent) + )), + "fixture: the unwritten messages must contain THE SUCCESSOR \ + FRAME --- the `Absent` payload whose own transition raised \ + the release. A non-empty vec proves nothing: any unrelated \ + semantic message would satisfy it, and the row would then \ + assert an ordering against a frame that was never there. \ + Got {messages:?}" ); assert!( !states[&fid].has_pending_release(),