Repository navigation
acpmux: a working lane whose model went quiet with no tool call running says it has stalled (lane.stalledSince) - #25006
Conversation
…ng says it has stalled (lane.stalledSince) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16c8c-54ec-71b2-a0fa-125d1404dd72&host=big-red
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16c8c-54ec-71b2-a0fa-125d1404dd72&host=big-red
Count calls past the cap instead of a flag that never cleared, so a turn with 257+ tool calls can still stall once they all end (Codex review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16c8c-54ec-71b2-a0fa-125d1404dd72&host=big-red
…ADME say stalledSince The adopting daemon rebuilt the running turn with nothing in flight, so a tool call that ran across a restart read as stalled. open_work now notes the open turn's logged tool_call/plan updates (TurnActivity::note), which also brings back the turn's activity and plan step. _acpmux/schema and the README describe stalledSince and stalledTurnMs (Codex review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16c8c-54ec-71b2-a0fa-125d1404dd72&host=big-red
The rebuild after a restart fed a subagent's logged updates into its parent turn, so a child's running tool kept the parent from stalling and took its activity. Skip records with _meta.acpmux.subagent, as the live path does (Codex review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16c8c-54ec-71b2-a0fa-125d1404dd72&host=big-red
… subagents open_work rebuilds the subagent tree from the log (SubagentTree::annotate, as the tap does live) instead of trusting an update's _meta.acpmux, which the agent can write (Codex review). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16c8c-54ec-71b2-a0fa-125d1404dd72&host=big-red
|
cmux status (one comment, edited in place; each line is updated by the job that owns it) Review App of this head (app.zip, kept 1 day)
Gallery before/after for
States
Pick other states with a red: cmux-next checks (god files, concurrency, crash safety, l10n); no finished base run on e869761 to compare; do not merge until green; see lane-rules Tour of |
|
Owned by hb-acpmux on big-red · session |
|
Found 14 test failures on Blacksmith runners: Failures
...and 4 more test failures. View all on Blacksmith: run 40148009522, run 40148009625
|
|
Bead |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40148827822 at c72f0c9 failed: cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40149382418 at a4c4d46 failed: cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40149412279 at 19a5504 failed: cmux-next generated files. |
|
The feat-cmux-next push run https://github.com/manaflow-ai/cmux/actions/runs/40149315230 at f3895fa failed: cmux-next generated files. |
|
Shipped in:
|
#25006 added a display-only stalledTurnMs (lane.stalledSince, default 10 min). The turn-ending reconciler's key is now stalledTurnEndMs (default 6 h, 0 off) so the two never share a setting. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Agent-Session: https://cmux.com/deeplink/agent?harness=claude&session=01a16c8c-54ec-71b2-a0fa-125d1404dd72&host=big-red
![Fix with [code]smith](https://pr-comments-assets.blacksmith.sh/codesmith/fix-with-codesmith-light-3x.png)
Part 2 of goal 8 (liveness), from the design doc leo-workspace research/2026-10-24-acpmux-tasks-liveness-urgency.md. After #24992 (tasks).
Leo, 2026-10-24: "shouldn't you be able to tell more metadata regarding... when things are completed, when things are not completed? Just like how you have your sub-agents... if things are hanging..."
What it does
A working lane whose model has gone quiet says so:
lane.stalledSince(andturn.stalledSincein the session summary) is set when a turn is running, no tool call is in flight, and the model has sent nothing (text, thought, tool call) forstalledTurnMs, default 10 minutes. Setting it to 0 turns it off.Session.last_model_atis set only from model output, by the tap next to theheardcounter.updatedAtisn't used because it moves on any record, Codex bookkeeping included.TurnActivity) keeps the ids of its tool calls in flight. An id is added when a call starts or an update says it runs, and removed when the call completes or fails; the set ends with the turn. So a 15-minute build inside one tool call is never stalled, as insilent_turn.rs. At most 256 ids are kept; calls past that are counted and still end.hosts.rsopen_work). Before this, it came back with none, so a tool call that ran across the restart read as stalled. It also gets its latest tool and plan step back, which were empty after adoption before. A subagent's logged updates are left out, as on the live path._acpmux/schemaand the README describestalledSinceandstalledTurnMs.acpmux task lsshows the lane as(working, stalled 12m). The sub-session rows (list_sessions,get_session) carrystalledSince.Departure from the doc: the doc said
lane.stategainsstalled. The state staysworkingand gains thestalledSincefield instead. The Mac app (AgentActivityLane.of) and the webview (LANES) drop a lane whose state they don't know, so a new state would hide stalled lanes from them.Timers and observers
None. The check runs on read (
session_summary), as the doc says. There's no new timer, task or observer, so there's nothing to stop.Tests (huge-blue)
tests/hub_integration/lanes.rs::a_quiet_turn_with_no_tool_running_stalls_and_a_long_tool_call_does_not: withstalledTurnMs = 300, a turn quiet with no tool call showsstalledSince. A turn whose tool call is still running does not.hub::activityunit tests: a tool call is in flight until it completes or fails; calls past the cap end too (red at 4c61f76, the Codex finding); and the stall rule itself.tests/durable_agents.rs::a_tool_call_running_across_a_restart_keeps_its_turn_from_stalling: a tool call running when the daemon is killed is still in flight once the next daemon adopts the host. Red at 7671f78 (the Codex finding), green now.a_subagents_tool_call_across_a_restart_is_not_its_parent_turns(fake modechild-gate:): a subagent's running tool call is not its parent turn's after a restart. Red at 55d4811, the Codex finding. durable_agents 41/41.hub_integrationrun had 10 failures under load on huge-blue (transfer, transfer_guard, silent_turn, wait/turn-marker tests); each passes when run on its own.hub_integration lanes6/6,hub::activity8/8. cargo fmt and clippy are clean. The protocol spec was blessed (protocol_ir_is_current) and the webview types regenerated (acpmux-protocol:codegen).Capture
No capture: no UI changes. The new field is in the protocol and the CLI only; the app and webview ignore it until a later PR draws it.
Review
Codex xhigh via acpmux (session
review-24939on huge-blue): SHIP at d2d8084, after five rounds. Its findings, each fixed with a test: an open-call flag past the 256 cap never cleared; an adopted turn after a restart came back with no tool calls in flight;_acpmux/schemadidn't list the field; the rebuild counted a subagent's tool calls as the parent turn's; and it then trusted an update's own_meta.acpmux, which an agent can write.Overlap
pr-overlap lists five open PRs that touch the same files (#24150 lineage, #21944 sidebar rows, #24021, #24802, #24155). They share
Session/make_session/session_summaryand the protocol spec; none of them detects stalls.Agent session: big-red
🤖 Generated with Claude Code
Need help on this PR? Tag
@codesmith-botwith what you need.