Repository navigation
fix(source-control): hold pr-verify-failed pull requests in pr-merge - #10676
Conversation
pr-verify labels a person's pull request pr-verify-failed on a FAIL, and ci-status enforces that label only in the merge queue. pr-merge armed and enqueued it anyway, and the queue ejected it, in a loop. Add the label to both merge-hold lists, beside do-not-merge, so the gate, its prefilter, adoption, the queue sweep and enable-auto-merge all hold it. 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. |
enable-auto-merge.mjs HOLD_LABELS mirrors babysit_merge_policy MERGE_HOLD_LABELS by hand. Export it and compare the two under node in test_merge_holds_sync.py, beside the other JS/Python parity checks. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
claude-security-review reviewed Incremental review of the changes since 0efc4d5 found no security issues.
No trust-control widening, no manifest changes, and no hold needed. The change spends no billable resources. critical-findings: 0 |
|
claude-review reviewed Incremental review of the change since 0efc4d5: no findings.
Spend: no cost hold. The change touches no paid plans or billing. |
Post-merge mutation testingKilled 3, survived 3, timeout 0, no coverage 0, invalid 0, not run 2.
Surviving mutants
The run's summary has the full report. |
No related issue: companion to Automation Lanes'
fix/verify-fail-label-hold, which has pr-verify label a person's PRpr-verify-failedon a FAIL.Summary
ci-status enforces
pr-verify-failedonly in the merge-queue step. On the pull_request run it would deadlock pr-verify, which judges a head only after ci-status passes (.github/workflows/pr-verify.yml:74). So a labeled PR shows a green ci-status, pr-merge arms and enqueues it, and the queue ejects it, in a loop. This PR makes pr-merge hold the label in every place it already holdsdo-not-merge.Fix
pr-merge has no config-read skip-label list today.
do-not-mergeis a constant in two places, and this PR addspr-verify-failedbeside it in both:plugins/source-control/skills/babysit-prs/scripts/babysit_merge_policy.pyMERGE_HOLD_LABELS. It feedsmerge_hold_label, which covers the gate's blockers (no merge or enqueue) and pr-merge's candidate prefilter (babysit_merge_prefilter.py). It also feedsadoption_refusal(adopting a person's idle PR) andentry_hold, the queue sweep that removes a queued entry once it carries a hold..github/scripts/pr-merge/enable-auto-merge.mjsHOLD_LABELS, the mirror read byholdReason. That job does not arm a labeled PR, and it disarms one that is already armed, on scheduled runs and on event runs. It arms only lanes App PRs, so for a person's PR the Python list above is what stops the loop.Left unchanged on purpose:
labels-absentlane filters indocs/conventions/pr-pipeline.yaml: they would also stop the lanes that turn the FAIL into a PASS.babysit_merge_block_labels/--block-labels: an additive per-tier config, not the merge hold.babysit_whole_review.py,check-wip-capandapply-patch: none of them arms or enqueues.gate-check.mjsandsuperseded.mjs: neither has a label skip.The next such label still takes an edit to both constants.
Verification
The new tests were added first, and all four failed against the unchanged constants:
enable-auto-merge.test.mjs, "a pr-verify-failed pull request is not armed, and an armed one is disarmed": schedule and event runs.test_babysit_merge_policy.py,EntryHold.test_the_pr_verify_failed_labelandAdoptIdleOwnerPullRequests.test_the_pr_verify_failed_label_holds.test_babysit_merge_prefilter.py,test_a_pr_verify_failed_candidate_is_dropped.The existing
do-not-mergetests are untouched and still pass. After the fix, the.github/scripts/pr-mergenode suite passed 608/608 and the babysit-prs Python suite passed 3344.Related
fix/verify-fail-label-hold: pr-verify adds and removes the label, and ci-status enforces it in the merge queue.🤖 Generated with Claude Code