fix(ci): wake PRs that predate the CI floor so they can ever be judged - #75
Merged
Conversation
The sweep merges a PR only if it "has at least one check". Correct — but GitHub never retroactively runs workflows, so every PR opened before this repo gained its CI floor (2026-08-05/08-07) has zero checks, cannot gain any on its own, and parks permanently. The script already spotted this and only warned about it; warning does not move them. Worse, they report as CLEAN, which reads as "ready to merge" and actually means "nothing ever objected". Waking solon's five showed what CLEAN was hiding: lucide-react, @noble/hashes and @noble/secp256k1 all fail verify — secp256k1 v3 removes hmacSha256Sync, randomPrivateKey, sig.recovery, toCompactRawBytes and Signature.fromCompact, which is the Bitcoin message signing path. Only @playwright/test was genuinely green (merged, #37). So the sweep now pushes such branches via update-branch, which fires pull_request:synchronize and produces real checks. This grants nothing: a woken PR still has to go green to merge, and a red one parks exactly where it already was — it only replaces "no evidence" with evidence. Capped at WAKE_MAX_PER_SWEEP (3) so a backlog does not stampede the runners; waking does not touch the base, so the one-car-per-sweep rule does not apply. Conflicted branches cannot be updated and are left to the existing CONFLICTING report instead of burning a slot. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The bug
auto-merge-sweep.shmerges a PR only if it has at least one check. That rule is right and must stay. But GitHub never retroactively runs workflows, so any PR opened before this repo gained its CI floor (2026-08-05/08-07) has zero checks, can never gain any on its own, and parks forever.The script already diagnosed this — and only warned:
Warning does not move them. solon had 5 such PRs from 2026-06-22/06-29.
Why it mattered more than it looked
These PRs report
mergeStateStatus: CLEAN. That reads as "ready to merge"; it actually means "nothing ever objected". Waking all five replaced that guess with evidence:@playwright/test1.46→1.61lucide-react0.441→1.22verifyfails@noble/hashes1.8→2.2verify+integrationfail@noble/secp256k12.3→3.1verify+integrationfail@types/node20→264 of 5 "CLEAN" PRs were broken.
@noble/secp256k1v3 removeshmacSha256Sync,randomPrivateKey,sig.recovery,toCompactRawBytesandSignature.fromCompact— that issrc/lib/bitcoin/message.ts, the governance signing path. Bulk-merging the CLEAN ones as "mechanical dependency updates" would have broken Solon's signature rail.The fix
The sweep now pushes check-less branches via
update-branch, firingpull_request: synchronizeso real checks run. The next sweep judges them on evidence like any other PR.This loosens nothing: a woken PR still has to go green to merge; a red one parks exactly where it already was. It only replaces no evidence with evidence.
WAKE_MAX_PER_SWEEP(default 3) so a backlog doesn't stampede runners. Waking never touches the base, so the one-car-per-sweep rule doesn't apply.CONFLICTINGreport rather than burning a wake slot.RE-ARM(post-mergeworkflow_dispatch) vocabulary.Verification
bash -nclean; shellcheck unavailable locally, CI runs the fullverify.verify+integration→ green → auto-merged by the existing sweep at 00:33Z.WAKE_MAX_PER_SWEEP,woken) are declared before the loop, per theset -ulesson documented at thebase_red_jobsdeclaration.Follow-up (not in this PR)
#31/#30need a real@noblev2→v3 migration ofmessage.ts— a crypto API rewrite that needs a human call, not an automated bump.🤖 Generated with Claude Code