Repository navigation
perf(pr-verify): skip the pr-merge wake for an armed or held pull request - #13087
Conversation
…uest The wake's one author read now also returns whether the pull request is already armed for auto-merge and whether it carries do-not-merge. A lanes App pull request in either state gets a notice and no pr-merge dispatch: the scheduled sweep runs the same decide() on it, disarms included, and ci-status holds do-not-merge in the merge queue, so the wake only spent a pr-merge run. Person pull requests stay unwoken: the token broker mints for a verdict wake only when the lanes App opened the pull request. 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. |
Reading the author through process substitution took read's status, not gh's: a multi-line HTTP error body made read succeed on its first line, and the wake logged "not a lanes App pull request" instead of dispatching as a failed read should. The answer is captured first, so a failed gh call dispatches as before. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
claude-security-review reviewed Security review: PR #13087, incremental (06f6eae → e1ab0dc)I found no security issues in this push. Scope. This is an incremental review. I read every hunk of both files on the incremental list: What changed. The wake step used to read the pull request with Checks:
Prior findings. My one earlier post was a no-findings summary for 06f6eae. Nothing is repeated, and this is round 0 of a cap of 3, so the cap does not apply. I found no embedded instructions in the PR context. Spend. On a failed author read this push can dispatch a pr-merge run that the old code would have skipped. That spends Actions minutes and API calls only. Nothing new is billed. critical-findings: 0 |
|
claude-review reviewed Code review (incremental, 06f6eae → e1ab0dc)I read both files in the incremental scope in full: Prior finding resolved. The earlier finding was that a failed read no longer dispatched (thread). This push fixes it. The wake step now captures the output first with Test coverage. The Other notes:
|
No related issue: part of the hub's arm-on-green order (green to first merge-group run is 53% of push-to-merge minutes). Issues are being driven to zero, so none was filed.
Summary
The pr-verify pass wake dispatched a whole pr-merge run for a lanes App PR even when the PR was already armed or held by
do-not-merge. In the #12445 AFTER v4 window those wakes cost about 260 calls (#13031, #13032, #13015, #12991): each ran a fresh post-merge check (66-116 calls) and changed nothing.Fix
The wake's single author read (
gh api repos/{repo}/pulls/{n}) now also returnsauto_merge != nulland whetherdo-not-mergeis set. A lanes App PR that is armed or held gets a notice and no dispatch:::notice title=pr-verify wake::pr=N verdict=V already armed; nothing woken::notice title=pr-verify wake::pr=N verdict=V held (do-not-merge); nothing wokenWhy skipping is safe:
decide()as the 30-minute sweep, and nothing in it disarms only on a wake (enable-auto-merge.mjs:1464-1576). An armed PR therefore keeps every disarm path through the sweep, as it did before the wake existed.do-not-mergePR in the merge queue.Call delta (R34): 0 added. Every skip saves one whole pr-merge run.
Verification
node --test .github/scripts/pr-verify/workflow.test.mjs: 54 pass after merging origin/main. The pinned wake test was updated, with armed and held cases added; the builder broke the armed check on purpose and the new test went red.actionlint,sync-hold-floor.py --checkand the fragment checks pass.Related
authorize.mjs:218-224), and widening it would loosen a security control. Person PRs keep arming through the session cron.🤖 Generated with Claude Code