@@ -11,13 +11,23 @@ matching `## [X.Y.Z]` section (plus install instructions). Do not maintain
1111parallel copies under ` docs/ ` or ` scripts/notes/ ` . At cut time: rename
1212` ## [Unreleased] ` to ` ## [X.Y.Z] - YYYY-MM-DD ` , then run the release script.
1313
14- ## [ Unreleased ]
14+ ## [ 0.3.21 ] - 2026-09-11
1515
16- ### Fixed
16+ ### Added
17+
18+ - ` tool_search ` -activated tools persist in ` run.json ` and are re-advertised
19+ after resume, rebuild, and compaction. Per-project ` pinnedTools ` in
20+ ` .corbits/settings.json ` keeps chosen MCP tools on the wire without
21+ activation. Registered-but-unadvertised calls error toward ` tool_search `
22+ instead of silent dispatch.
23+ - Repeated identical tool batches warn in the transcript before the doom-loop
24+ guard kills the run.
25+
26+ ### Changed
1727
18- - A stalled worker now gets a full ` stallTimeoutMs ` grace after the first
19- continuation nudge before salvage — stall pings queued inside that window
20- wait instead of counting toward escalation .
28+ - A named profile file that is missing fails closed instead of falling
29+ through. Resume-picker docs match the unfiltered recent-10 list. Grok
30+ model-family policy docs match the runtime .
2131
2232### Removed
2333
@@ -26,11 +36,33 @@ parallel copies under `docs/` or `scripts/notes/`. At cut time: rename
2636
2737### Fixed
2838
39+ - Stalled workers get a full ` stallTimeoutMs ` grace after the first
40+ continuation nudge before salvage. Stall pings inside that window wait
41+ instead of counting toward escalation. Mailbox mail re-flushes from the
42+ fleet stall poll. Dry-fleet occupancy still delivers inbound mail.
2943- Stale ` running ` sessions age to ` interrupted ` after two missed 5-minute
30- heartbeats, leftover newer parseable ` run.json.*.tmp ` files recover by mtime
31- over a stale ` run.json ` , and resume persists ` interrupted ` before reopening
32- as ` running ` . Signals stay ` failed ` ; missing or unreadable state stays
33- ` crashed ` .
44+ heartbeats. Leftover newer parseable ` run.json.*.tmp ` files recover by
45+ mtime. Resume persists ` interrupted ` before reopening as ` running ` . Crash
46+ and signal finalizers keep ` turnsUsed ` .
47+ - Subagent follow-up and interrupt are race-safe. Queued messages recover
48+ when the target agent closes. Retryable worker failures retry once.
49+ Pending sub-agent nudges append onto existing ephemeral turns. Pending
50+ poll batches are exempt from the doom-loop guard. Non-fatal reactor
51+ errors continue; empty extra session segments do not skip a real
52+ checkpoint.
53+ - Auto mode treats bash combined file redirects as mutations. The agent
54+ cannot persist its own shell grants into the standing approval store.
55+ Operators are not asked to approve a path the sandbox will reject.
56+ Same-process credential writes queue so each gets its own lock window.
57+ - Compaction summarizer is bounded and retried once per failure class.
58+ Torn write tails heal; failed rewrite commits stay on HEAD. A prompt
59+ submitted before ` /clear ` does not land in the new session. Quoted
60+ image-path mentions keep whitespace and drop false-positive matches.
61+ Relative filenames in prose quotes do not mint root-path mentions.
62+ - Assistants that print tool-call markup as text get one nudge. Consecutive
63+ tool-failure recovery audits coalesce. Concurrent mutating lane-overlap
64+ warnings rate-limit. OpenCode Go worker session IDs forward without a
65+ catalog. Attributable xAI capacity protocol mismatches retry.
3466
3567
3668## [ 0.3.20] - 2026-09-10
0 commit comments