Repository navigation
fix(pr-pipeline): hold a stale pr-verify pass in the queue and name pass refusals in the hold - #13342
Conversation
…ing pass 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-security-review reviewed Security review: PR #13342 (incremental, 12d59ec → dc7e0c8)I found no security issues in this push. The lane had already reviewed an earlier head, so this review was blocking only: it would report only CRITICAL or IMPORTANT findings. What I checked. One file changed since the last review,
The push changes no gate, hold script, workflow, token, or trust control. It only makes the shell suite expect the stricter behaviour reviewed last round. Nothing in it is a path for an attacker. Earlier findings. My earlier summary on this PR reported 0 findings, so there is nothing to restate. PR context. The description has no instructions aimed at this lane. It now matches the stale-pass hold. critical-findings: 0 |
|
claude-review reviewed Code review: #13342, incremental 12d59ec..dc7e0c8 (blocking only)This lane already reviewed an earlier head ( No blocking findings. What changed:
The test results in the PR description were claimed by the author. I did not verify them, because this lane has no shell. The earlier thread on No hold: this change is test-only and touches no billing. |
…ges the head again A verify:spec-changed refusal now holds whether or not the pass was read (owner decision 2026-11-04, "Hold until re-judged"). passRefusalOf returns only PASS_REFUSALS, so a FAIL class is never named a pass refusal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Owner decision, 2026-11-04 (AskUserQuestion in the Automation Lanes session 24905f8a). Asked: when the linked issue is commented on or edited after pr-verify passed a PR, the pass is stale ( Owner's pick, verbatim: "Hold until re-judged (Recommended)". Built in this PR: a Posted by the Automation Lanes session. This was generated by AI. |
… suite Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No related issue: hub ledger L300. The merge gate held lanes App PR #13333 with "pr-verify has not passed this head" when it had passed, and that ejected the queue behind it.
Summary
#13333's pass at 5d74488 is valid (artifact
pr-verify-13333-5d744886…-pass-notes, pr-verify run 41893841490). The gate's reader refused it withverify:spec-changed: a trusted comment landed on #13191 at 19:07:47Z, 31 s after that pr-verify run started (babysit_verify_evidence.py_pass_refusal). In FAIL index mode the reader saves no artifact listing, so the step at pr-require-checks.yml:6580-6585 treats every refusal as one returned before any listing and reads no pass names. merge-holds.mjs then saw no pass record and reported "pr-verify has not passed this head" (merge-group runs 41895300192 and 41895674384). PR Lane's host check read the pass and disagreed, and PR Lane has since moved verify-pass.sh onto the gate's own reader.Fix
verify:spec-changedrefusal now holds in the queue whether or not the pass was read. Before, a read pass let a stale head merge, and index mode held it only by accident. The hold readspr-verify's pass on this head is stale (verify:spec-changed): its linked issue changed after pr-verify judged it; wait for pr-verify to pass it, …. The lost-run reconciler re-runs pr-verify after a spec change, and an approval of the head by a listed person lifts the hold.verify:missingorverify:untrusted-spec), the hold names that refusal instead of "has not passed this head".passRefusalOfreturns onlyPASS_REFUSALS, so a FAIL class stays evidenceHold's and is never called a pass refusal.Verification
node --test .github/scripts/pr-merge/merge-holds.test.mjs: 66 pass, 0 fail. The tests cover the stale hold with a read pass, a pass refusal with no pass read, the missing-pass text for no refusal, another head or a FAIL class, and thatverify:missingandverify:untrusted-specstill leave a read pass standing.scripts/check-affected.sh --base origin/main --no-fetch: 9 passed, 7 skipped.Related
🤖 Generated with Claude Code