rework(vetter): resume a dead auditor before redispatching, and name the path taken - #276
rework(vetter): resume a dead auditor before redispatching, and name the path taken#276thedavidmeister wants to merge 1 commit into
Conversation
…the path taken An auditor that dies mid-run leaves a stopped agent whose context is intact and already paid for. Run 20260810T230003Z redispatched #404's audit from scratch (~$2.70 of a $15.46 run) while logging 'resuming it so it continues from where it left off' — the resume channel (SendMessage) was denied, so redispatch was the only expressible recovery and the narration could not be true. - review-prompt.txt FAN OUT: resume-first via ListAgents + SendMessage; fresh redispatch only when the resume itself fails; the narration and run summary name which path was taken. - review-settings.json: ListAgents and SendMessage move to allow; SendMessage leaves deny. The write denials are untouched. - README.md: recovery paragraph in the fan-out section; the permissions bullet now names the resume pair. - main.rs: the_vetter_can_resume_a_dead_auditor pins both halves — the permission pair and the prompt rule — the same shape as the_vetter_can_dispatch_but_still_cannot_write. Closes #275 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
Next review available in: 29 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: ASSERTIVE Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Closes #275
What
An auditor that dies mid-run is now resumed, not replaced — and the log must say which happened.
Run
20260810T230003Zredispatched the cyclofinance/cyclo.site#404 audit from scratch (~$2.70 of a $15.46 run: a fourth full audit-skill injection, a first call holding zero inherited context) while narrating "resuming it so it continues from where it left off". The narration could not have been true:SendMessage— the harness's only continue-a-subagent channel — was denied inreview-settings.json, so a fresh redispatch was the only expressible recovery.ListAgents+SendMessageto that auditor; a fresh dispatch is the fallback taken only when the resume itself fails, and the narration and run summary name the path taken (resumed the <pr> auditor/resume failed (<why>) — redispatched fresh).SendMessageis confined by the same rule: continuing this run's own auditor is its one legal use.ListAgentsandSendMessagemove toallow;SendMessageleavesdeny. Every write denial (Bash/Write/Edit/NotebookEdit) is untouched — the CI gatereview-settings.json denies every write toolstill passes by construction, andSendMessagewrites nothing to GitHub or disk.Taskwas the only permission ever moved.the_vetter_can_resume_a_dead_auditorpins both halves — permission pair allowed-and-not-denied, prompt statesRESUMED, NOT REPLACEDand requiresredispatched freshnaming — the same shape asthe_vetter_can_dispatch_but_still_cannot_write, and for the same reason: either half alone is inert or unconfined.QA
the_vetter_can_resume_a_dead_auditor— fails on base by construction of mutant A below (base'sreview-settings.jsonIS the pre-change settings, and the test panics against it atmain.rs:53382); on this head,nix develop .#rust -c cargo test -p pr-review-report the_vetter_can_resumereportstest result: ok. 1 passed; 0 failed; … 1278 filtered out, and the fullvetterfilter suite passes (exit 0, including the 12usage_gate_skipvetter integration tests).review-settings.json→git checkout HEAD~1 --(SendMessage back in deny, ListAgents gone from allow) → killed bythe_vetter_can_resume_a_dead_auditor, panic atmain.rs:53382. (B)review-prompt.txt→sedtheRESUMED, NOT REPLACEDsentence to its negation → killed by the same test, panic atmain.rs:53396. Tree restored clean after each (git status --shortempty).SendMessageto its id and a freshTask/Agentdispatch starts with no inherited context — plus trace20260810T230003Zas the measured counterexample (fourth audit-skill injection, replacement first call at the 18.4k dispatch floor with zero cache-read of prior work), independent of any code in this repo.redispatched freshassertion. Self-review: the pre-existing "doubted claim → SECOND DISPATCH" sentence is the doubt case, not the death case — no surviving sentence permits a silent redispatch on death. No shell script changed, so nobash -n;plugins/untouched, so version-hygiene's bump gate does not fire.🤖 Generated with Claude Code