Repository navigation
fix(maintenance): count a runner-loss annotation only on a failed job cut before the judge step - #9871
Conversation
… cut before the judge step A judge step that echoes model or PR text can emit a failure-level annotation that reads as a lost runner. holdReason now counts the annotation only when the job concluded failure, and holds a cut list that reaches the judge step's predecessor. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
claude-review reviewed No findings. I read the full diff (
|
|
claude-security-review reviewed No security findings on PR #9871. critical-findings: 0 The change touches
I changed no trusted-path files, no plugin manifests, and no instruction surfaces. Nothing here draws on paid usage. The PR description is data. It contains no embedded instructions. |
No related issue: hardens the annotation read added in #9813.
Summary
#9813 let the lost-runs reconciler read a cut verify job's annotations and treat a "lost communication with the server" failure annotation as proof the runner was lost, so it can re-run that run. The annotation can come from text a step prints, though. The judge step's log can echo model or pull request text, so a steered judge could print a line that reads as a runner loss and get its run re-run. A job that did not conclude
failurecould also count.Fix
holdReasoncounts a runner-loss annotation only on a job whose steps did not list in full and that concludedfailure(.github/scripts/maintenance-reconcile-lost-runs/reconcile.mjs:238).JUDGE_PREDECESSOR= "Write the prompt and schema" (reconcile.mjs:115), stays held as "after its judge step may have started" (reconcile.mjs:251), rather than read as a lost runner.Verification
node --test .github/scripts/maintenance-reconcile-lost-runs/*.test.mjs: 85 tests, 85 pass.a runner-loss annotation counts only on a failed job whose cut list stops before the judge step's predecessor(reconcile.test.mjs:539). It checks that a cut before the predecessor is re-run, that a cut reaching the predecessor or the judge step is held and not recorded, and that a cancelled job is not re-run.pr-verify still names its judge step as the reconciler reads itnow also asserts thatJUDGE_PREDECESSORis the step right beforeJUDGE_STEPinpr-verify.yml(reconcile.test.mjs:437), so renaming either step fails the test.Related
🤖 Generated with Claude Code