Repository navigation
fix(pr-pipeline): name the merge-holds step for what it holds and drop the stale status re-run - #12725
Conversation
…p the stale status re-run Rename ci-status's merge-holds step to say what it holds now: the kill switch, hold paths, verifier holds and a member's veto. pr-verify's held-run check keeps taking the old name, because a run reports the step names of its own commit, re-runs too. Drop "no body hold" from the merge-holds verdict line. The step's grep still takes the old line as well: it reads the module from main's tip, which a queued group carrying this change has not reached. Stop re-running ci-status when a pr-unblock run completes. ci-status reads no pr-unblock/* status, and the labels that run writes start their own run, so pr-unblock also leaves the workflow's upstreams and concurrency groups. Correct the docs: a member's veto comment holds a lanes App pull request, and the seven hold places are the 2026-11-01 count. Closes #12446 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQb9Q49h99qKdrunU4xw3S
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: #12725 (no findings)I read every hunk of all 17 changed files in The last review of this lane was at Merge hold:
ci-status verdict reader:
pr-verify held-run check:
Re-run trigger and recorder:
Docs and tests
Owner threat model: this change removes no named friction hold. critical-findings: 0 |
|
claude-review reviewed Code review: #12725 at 28db4ebI read every hunk of all 17 changed files and found no correctness or maintainability problems, so this review has no findings. The last review of this lane, at What I checked
Window the PR leaves openThe PR body names one window. Take a ci-status run that started before the merge and is re-run after it, for example by Closing issue #12446The PR delivers the leftovers listed in the issue's close-out comment:
The issue's comments record the other done-when items as met. The PR context has no embedded instructions aimed at the review lane. ChangelogThe fragment is SpendNone. Dropping the pr-unblock upstream means fewer Not verifiedI ran nothing in this lane. The test results in the PR body (PASS=300, PASS=239, |
The native auto-merge section, the reconciler's comment and the hold test's header still described a body hold and a pr-unblock stop re-run that no longer exist. The outage audit's two pr-feedback-dispatch.yml citations moved with the re-run's removal. Refs: #12446 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VQb9Q49h99qKdrunU4xw3S
Closes #12446
Summary
The leftovers of #12446, per its close-out comment. ci-status's merge-holds step gets a name that says what it holds, the verdict line stops mentioning a body hold, a ci-status re-run for a status ci-status no longer reads goes away, and two docs stop contradicting the code. The merge-holds behavior does not change, and a member's veto stays a comment read, with no labeling write. Item 5 of the issue, the re-sample, is met by the comment above.
Fix
Fail a lanes App pull request its body or a member holdsbecomesFail a lanes App pull request on kill switch, hold path, verifier or vetoinpr-require-checks.yml,resolve-pr.mjs(HOLD_STEP),reconcile.test.mjs,resolve-pr.test.mjs,ci-lanes-pr-hold.test.shandpr-pipeline/README.md.resolve-pr.mjsruns from main and judges the step names of runs from older commits, and a re-run keeps its commit's workflow. Without the old name, a head held only on a hold path whose newest run predates this merge would read asnot-a-passing-run, and pr-verify would not judge it. Both checks inheldShapeandheldOnlytake either name;OLD_HOLD_STEPcan go once no open pull request's newest run reports it.merge-holds.mjsnow prints#<n>: no member veto and no hold path.. The grep inpr-require-checks.ymltakes that line and the old one: the step copies the module from main's tip (:6287), while the grep comes from the run's own commit, so a lanes App group queued behind this one has the new grep and main's old module. The old alternative can go once this has merged and no such group is queued.pr-feedback-dispatch.yml. A completedpr-unblock.ymlrun no longer re-runs ci-status. It leavesworkflows:, the concurrency group and thererun-ci-statusgate, since no other job uses it (thedispatchjob'sifnever names it), so each pr-unblock completion no longer starts a run in which every job skips. The review-lane and approval upstreams are unchanged.check-trusted-trigger/README.mddrops the matching record and residual text.pr-unblock/*status: onlyenable-auto-merge.mjsdoes (unblockStops). Labels a stop writes go on with the lanes App token, andpr-require-checks.yml:52runs onlabeledandunlabeled, so they start their own run. The reconciler'sRECORDED_UPSTREAMSispr-require-checks.ymlalone, and fix(pr-pipeline): converge our own actors' merge holds on do-not-merge #12522 removed the reconciler's pr-unblock stop kind.loop-lane/README.mdnow says a member's veto comment holds a lanes App pull request.pr-pipeline/README.mdgives "seven places" as the 2026-11-01 count. TheAGENTS.mdhold paragraph still reads true (merge-holds.mjs:1647-1650;babysit_merge_policy.py:5130for the body hold), so it is unchanged.One window stays open: a lanes App run from before this merge that is re-run after it has the old grep and main's new module, so it fails closed with "exited 0 without its verdict" until a new event starts a run on the head. That failure holds rather than passes and clears with the next run. Printing both lines from the module would avoid it, at the cost of a second verdict line to remove later, so this PR leaves it.
Verification
bash scripts/ci-lanes-pr-hold.test.sh: PASS=300 FAIL=0.bash scripts/ci-rerun-ci-status.test.sh: PASS=239 FAIL=0.node --testonmerge-holds.test.mjs,enable-auto-merge.test.mjs,resolve-pr.test.mjs,reconcile.test.mjs,workflow-gates.test.mjsandlog-api-budget.test.mjs: no failures.actionlinton both edited workflows andmarkdownlint-cli2on the three edited docs: clean.scripts/check-affected.sh --base origin/main --uncommitted --no-fetch: 12 passed, 3 skipped.scripts/check-line-citations.py: clean.Left out: CI's full suites, per the task; the changeover itself, which only a live run across the merge can show.
Related
🤖 Generated with Claude Code
https://claude.ai/code/session_01VQb9Q49h99qKdrunU4xw3S