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
The _post_result_idle_watchdog + subcountdown + SIGTERM machinery (#333, #470) and the stuck-after-tool_result detector (#322) exist because Claude Code's --output-format stream-json intermittently hangs — the process stops producing output and never exits.
Surfaced by the v0.35.3 Claude Code workaround-retirement audit (umbrella tracking issue).
Upstream status (checked 2026-05-29)
anthropics/claude-code#39700 — "[BUG] --output-format stream-json intermittently hangs — process stops producing output and never exits" — CLOSED / NOT_PLANNED.
Consider re-escalating upstream with fresh repros — the channelo/nsd post-result-hang sessions captured during v0.35.3 rc16/rc17 instrumentation (claude.post_result_idle.tick / subprocess.state.* logs) — in case Anthropic reconsiders.
Summary
The
_post_result_idle_watchdog+ subcountdown + SIGTERM machinery (#333, #470) and the stuck-after-tool_result detector (#322) exist because Claude Code's--output-format stream-jsonintermittently hangs — the process stops producing output and never exits.Surfaced by the v0.35.3 Claude Code workaround-retirement audit (umbrella tracking issue).
Upstream status (checked 2026-05-29)
anthropics/claude-code#39700 — "[BUG] --output-format stream-json intermittently hangs — process stops producing output and never exits" — CLOSED / NOT_PLANNED.
(Sibling: anthropics/claude-code#30333 — ResultMessage never emitted — also NOT_PLANNED.)
Implication: this is NOT a retirement
Upstream declined to fix #39700, so the watchdog/SIGTERM safety net is a permanent mitigation, not a temporary workaround. Actions:
_post_result_idle_watchdog→ SIGTERM → SIGKILL). The detector decides messaging; the watchdog decides survival; they must stay decoupled.claude.post_result_idle.tick/subprocess.state.*logs) — in case Anthropic reconsiders.Affected code
src/untether/runners/claude.py—_post_result_idle_watchdog, post-result subcountdown,_detect_stuck_after_tool_resultsrc/untether/runner.py—_classify_jsonl_event(engine-agnostic tool_result classifier)resultevent (idle-but-alive UX gap) #333 / stall-message backoff once last_event_type=result (post-result idle is benign noise to the user) #470 / Claude Code stuck after MCP tool_result via Untether (upstream claude-code#39700) #322 (the shipped mitigations), background-task lifecycle: clear handle on terminal signal, not first tool_result #374 (bg-handle lifecycle)Done when
Part of the v0.35.3 Claude Code workaround-retirement audit (umbrella tracking issue).