You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
bug(claude): a prompt whose absorption times out is left in the native composer, and every later delivery refuses it as a human draft #1350
What happened (2026-09-26, manager fleet, structured Claude sessions while they were busy)
ac_agents_prompt was sent to worker W1, a Claude session in the middle of a turn. It returned stage: absorption, code: absorption-timeout, promptWritten: true, enterWritten: false, and the message "did not visibly absorb the prompt and its composer could not be recovered" (disposition: do-not-retry).
The prompt text is now left in Claude's native composer, unsent.
Worker W4 has shown the same state since about 02:25Z. ac_agents_input_inspect returns nativeDraft.state: occupied and readinessReason: composer-occupied, while the Agent Code draft (ac_agents_draft_get) is empty. Every later ac_agents_prompt to W4 is refused as "prompt input is occupied by a human draft". That is four refusals across 25 minutes, and no human typed in that pane. The likely origin is an earlier manager prompt that stranded the same way, perhaps around the app restart.
Why it matters
A failed delivery leaves our OWN text behind, and the gate then treats it as a human draft. The agent becomes unreachable for orchestration until someone clears the composer by hand, and nothing tells the sender that the "human draft" is its own stranded prompt.
The stranded text is also submitted along with whatever the human types next.
Expected
When absorption fails and recovery also fails, the delivery layer either (a) keeps a record that the composer holds its own stranded prompt, so it can reclaim it (clear it, then retry, or surface "your earlier prompt is stranded"), or (b) never leaves it behind. The composer clear and verify should happen before do-not-retry is reported.
composer-occupied should say whether the occupant is known to be our own stranded write.
Context (manager, 03:20Z): the machine load average was 28–46. About 7 parallel tsc -b runs (13–29 min each) and a 33-min full vitest suite were running, and the Agent Code renderer was at ~115% CPU with ~60 agents open. A second delivery (W2, op 478f0e8d) wrote the prompt and Enter but timed out on acceptance. The stranded-draft path may only show under heavy load, but a load spike must not leave our own text parked in the composer and then misreport it as a human draft.
Scope note from #1358.#1358 fixes this for text prompts: Agent Code now remembers a text prompt it stranded, for the same process only, and the next delivery reclaims it. That includes a delivery that starts before the stranded text has painted.
A timed-out delivery with image attachments is not covered. Whether Ctrl+U safely removes an image pill has not been observed on a real composer, so those strands are left alone. That residual is tracked in #1359.
Activity
Juliusolsson05 commentedon Sep 27, 2026
Context (manager, 03:20Z): the machine load average was 28–46. About 7 parallel
tsc -bruns (13–29 min each) and a 33-min full vitest suite were running, and the Agent Code renderer was at ~115% CPU with ~60 agents open. A second delivery (W2, op478f0e8d) wrote the prompt and Enter but timed out on acceptance. The stranded-draft path may only show under heavy load, but a load spike must not leave our own text parked in the composer and then misreport it as a human draft.Juliusolsson05 commentedon Sep 27, 2026
Scope note from #1358. #1358 fixes this for text prompts: Agent Code now remembers a text prompt it stranded, for the same process only, and the next delivery reclaims it. That includes a delivery that starts before the stranded text has painted.
A timed-out delivery with image attachments is not covered. Whether Ctrl+U safely removes an image pill has not been observed on a real composer, so those strands are left alone. That residual is tracked in #1359.
🤖 Generated with Claude Code
fix(claude): bind a stranded-delivery mark to its process, wait out t…
fix(claude): mark only sessions whose delivery can reclaim, pin refus…