/code-review regression since v2.1.235: background forked-skill execution — parent stalls on last angle, and ReportFindings UI is lost
Summary
When running the /code-review skill (effort high) on the Fable model (claude-fable-5), the background review agent consistently stalls before producing its final report. It completes its per-dimension review angles, then ends its turn with a status like:
« Sept angles rendus. J'attends le dernier (efficiency) avant de dédupliquer et lancer la vérification. »
…and never resumes. The task-notification fires (agent stopped, no live background children), but the agent never dedupes findings, never runs its verification pass, and never emits the final report. The only workaround is to manually SendMessage the agent telling it to stop waiting and conclude, after which it finishes normally.
Reproduction
- Model:
claude-fable-5(Claude Code v2.1.236, macOS Darwin 25.5.0) - In a repo with a substantial staged diff (~30 files), run
/code-review high - The review runs in the background, completes 7/8 angles, then stops with "waiting for the last angle" as its final text
- No further notification ever arrives; the report is never produced
Expected
The review agent should either be re-invoked when its last angle completes, or detect the missing/finished angle and proceed to dedup + verify + final report on its own.
Notes
- The user reports this happens every time they use
/code-reviewon the Fable model ("Ça fait ça à chaque fois que j'utilise le modèle Fable"). - Resuming the agent with a
SendMessage("stop waiting, dedupe and report now") reliably unblocks it, so the state is intact — it just never wakes up on its own. - Subagent had consumed ~145k tokens / 18 tool uses at the time of the stall.
5 Comments
Follow-up: transcript analysis — no system error, it's a bookkeeping slip with no harness safety net
I extracted the subagent's JSONL transcript (
~/.claude/projects/<project>/<session>/subagents/agent-<id>.jsonl). There is no error event anywhere — no failed tool_result, no API error. The stall is fully explained by the timeline:| Time | Event |
|---|---|
| 12:01:16–12:02:15 | Review agent launches 8 finder subagents in the background |
| 12:03:43 | Agent notes: "Le finder « efficiency » a rendu 6 candidats. J'attends les 7 autres angles" — efficiency is the FIRST angle to report back |
| 12:03:43 | Agent runs
ToolSearch select:Monitor(loads the Monitor tool) but never uses it as a fallback || 12:04:32–12:08:34 | 7 task-notifications arrive, one per remaining finder. After each, the agent recounts correctly ("Deux angles rendus…", "Trois…", …, "Six angles rendus. Il reste B et efficiency.") |
| 12:08:37 | After the 7th and last notification, the agent ends its turn with: "Sept angles rendus. J'attends le dernier (efficiency)" — i.e. it waits for the angle it had already received first, 5 minutes earlier |
| 12:08:37 → 12:31:27 | Total silence. All 8 children are done, so no further task-notification can ever fire; the agent has no scheduled wakeup and no live children |
| 12:31:27 | Manual
SendMessage("stop waiting, dedupe and report") — agent resumes instantly and finishes normally in ~90s |So two contributing factors:
State was fully intact — resume via SendMessage worked first try — which confirms this is purely a "nothing woke it up" problem.
Reproduction context + raw log excerpt
Since a bare "/code-review high stalls" is unlikely to reproduce without the exact shape, here is the full context of the failing run:
Environment
claude-fable-5; the review subagent and its finders also ran onclaude-fable-5code-review, invoked asSkill(code-review, args: "high")from the main loop, which forks a background/code-review highagentShape that triggers it
Agentcalls (angles A/B/C, reuse, simplification, efficiency, altitude, conventions) against a ~2,750-line staged diff (30 files, mostly new PHP)Raw JSONL excerpt (from
~/.claude/projects/<project>/subagents/agent-<id>.jsonl, sanitized to the relevant fields):Line 74 is the last event of the run until the manual coordinator message 23 minutes later:
stop_reason: "end_turn", zero live children, no scheduled wakeup, and the final text is a wait for an already-delivered result. Nothing in the harness ever re-invokes it from that state.Root cause reframe: not Fable — the switch to background forked-skill execution (~v2.1.235)
Transcript archaeology across my sessions rules the model out in both directions:
claude-fable-5:ReportFindingssucceeded 5× — reviews completed fine on Fable.claude-opus-5, no Fable involved.The variable that flips on Aug 19 is the execution mode: until Aug 17
/code-reviewran inline in the main agent (32 successfulReportFindingscalls, last 2026-08-17T20:54Z); from Aug 19 (v2.1.235+) it runs as a background forked skill (forked-skill.marker.json,spawnDepth: 1). Two symptoms date from that switch:ToolSearch("select:ReportFindings")returns empty inside the forked agent, so findings degrade to plain text ("The ReportFindings tool isn't available in this session…") and the sidebar findings UI never renders. The tool is exposed to the main agent in the same session. Reproduced on v2.1.235 and v2.1.237, two repos, effortmedium, output style on/off, no allowedTools/disallowedTools config.Retitled accordingly — the Fable attribution was correlation (I happened to be on Fable those days).
Cross-references: this is a class of "forked/background agents get a pruned tool roster" bugs
Searching the tracker, both symptoms here are already reported elsewhere, which helps date and scope the regression:
The ReportFindings symptom (exact match):
--commentsilently degrades to terminal printing when the forked agent lacks the posting tools, "repro on 2.1.237, after #84093 closed".The stall symptom:
Same class, other tools pruned from subagent rosters:
Given the dated evidence (last inline success 2026-08-17T20:54Z on the pre-235 build; zero successes from 2.1.235 onward), #84093 likely deserves reopening or folding into this one.
Additional data point: tool availability is only half the regression — the findings panel UI is gone even when ReportFindings succeeds
Tested on 2.1.235, interactive TUI session: I had the main agent run the review inline and call
ReportFindingsdirectly (bypassing the broken forked flow). The call succeeded ("1 finding reported") and the transcript rendered the compact inline block:…but the full findings interface (sidebar + central detail panel) that used to open on /code-review before Aug 17 never rendered.
So two distinct layers regressed with the switch to background forked-skill execution:
ReportFindingsis not propagated to the fork (documented above).Env: v2.1.235, macOS Darwin 25.5.0, terminal (fullscreen TUI).