@@ -42,6 +42,20 @@ ID when the mailbox executes the request: a delayed control for an earlier stop
4242must not advance a newer stop, including an execution-complete inspection stop.
4343Explicit ` /codon resume ` , ` stepinto ` , ` stepover ` and ` stepout ` commands without an
4444ID retain their manual/console behavior and target the stop present at execution.
45+ UI controls also send a request ID. A rejection for that exact pending request and
46+ pause appears in a wrapped Codon toast without opening chat. A missing reply two
47+ seconds after sending the control reports that the server outcome is unknown;
48+ waiting for pre-step Watch reads does not start that deadline. It does not mean rollback
49+ or fabricate an execution acknowledgement. Late/duplicate rejections cannot clear
50+ a newer pending request. Feedback uses separate toast slots and renders above ordinary
51+ notifications, so a full, frozen vanilla toast queue cannot block it. Ordinary toast
52+ identities and paused lifetimes remain unchanged. Feedback expires after six seconds.
53+ A new control, pause or authoritative advancement clears control feedback; those
54+ execution events do not acknowledge independent breakpoint edits, whose notices
55+ retain their original deadline. Disconnect clears every notice. These notices are separate from
56+ Watch-read status before a control is sent. Command-tree owner checks remain intact;
57+ denials before command execution and mailbox drops have no correlated reply and
58+ therefore use the same unknown-outcome timeout.
4559The debugger mailbox admits at most 256 pending client requests and 64 client
4660control commands per server, with per-connection limits of 32 and 8 respectively.
4761Admitted queries and controls keep their receive order. Excess work is dropped
@@ -89,6 +103,7 @@ captures a selected row alongside a keyboard-focused, truncated action label.
89103| Delayed controls and pause ID validation | ` coreTest ` : ` DebuggerControlTest ` ; command transport: ` DebuggerRequestTransportGameTest ` |
90104| Mailbox limits, concurrent admission, request/step order, recovery and shutdown completion | ` test ` : ` DebuggerMailboxTest ` , ` DebuggerTaskQueueTest ` |
91105| Pending state, Watch read deadline/cancellation, current/history separation | ` clientTest ` : ` ClientQuerySchedulerTest ` , ` ClientDebuggerStateTest ` , ` ClientHistoricalCallStackTest ` , ` DebuggerStatusTest ` |
106+ | Visible rejection/timeout with all ordinary toast slots occupied, late replies and recovery | ` DebuggerRequestFeedbackGameTest ` |
92107| Native command-chain execution/stage recording | ` DebuggerExecutionFlowGameTest ` |
93108| Stop after step/resume in a parked native command context | ` DebuggerStopRoutingGameTest ` |
94109| Native conditional function chronology | ` DebuggerConditionalFunctionFlowGameTest ` |
@@ -104,6 +119,29 @@ Record the before/after command and call depth, not merely that the screen opene
104119execution-complete stop, then continues. Its native command runs once; the client
105120receives the completed record with a selected Flow stage and inactive controls.
106121
122+ ` DebuggerRequestFeedbackGameTest ` triggers a real two-block chain and uses a cached
123+ earlier pause to provoke actual server rejections for all four UI controls. Its
124+ connection-local observer deliberately withholds rejection replies to reproduce
125+ post-send timeout, then delivers the same late reply. EN/KO screenshots show the
126+ wrapped toast and its automatic disappearance without hover.
127+ The fixture first fills all five vanilla slots with real timed SystemToasts. It
128+ observes actual toast draw submissions while the world is paused: timeout and
129+ rejection feedback must render, expire normally, and leave the five ordinary
130+ toast identities and frozen lifetimes intact. The unmodified queued-feedback path
131+ fails after its notice expires without a draw. This does not clear or advance
132+ ordinary notifications in production; fixture cleanup belongs to the test client.
133+
134+ Current-stop Resume recovers and the score of 11 proves each block ran once. The test also observes a
135+ real not-paused rejection after execution ends and resets connection-local state.
136+ Before recovery, a real breakpoint rejection triggers Resume in the same client
137+ frame, before the notice's first draw. The Korean capture after authoritative
138+ advancement must retain that rejection; controls cannot erase unrelated edit
139+ feedback. The state regression covers Step/Resume/Continue, the next pause, a
140+ new control request, six-second expiry and disconnect without extending the clock.
141+ For that deliberately stale client view, vanilla also pauses the integrated
142+ server; the test drains the mailbox on the server thread to receive its rejection.
143+ This is an integrated-server check, not a dedicated-server or real packet-loss test.
144+
107145` DebuggerStopRoutingGameTest ` uses a real outer vanilla Commands execution with
108146command limit 1 and stops at the terminal after ` execute positioned ~ ~ ~ run ` .
109147One mailbox runnable steps/resumes and then submits ` stop ` before the parked context
0 commit comments