Mergify batching (N PRs through ONE CI run — the #373-scale throughput win) requires GitHub's literal "require branches up to date" checkbox OFF (or fast-forward, which breaks the merge-commit policy).
Status: GREENLIT — sequenced AFTER Phase 1 (#409) is proven
Maintainer decision (2026-07-07): "Phase 2 is fine once we prove Phase 1 works. It's the invariant that matters, not the enforcement method." Mergify's speculative merge queue enforces the invariant (never merge untested-against-latest-main) by construction, so turning off the GitHub checkbox for batching preserves the invariant — it's just enforced by Mergify instead of the checkbox. This is a method-swap, not a loss of the guarantee.
Sequence
#409 Phase 1 (serial queue, checkbox ON) — implement + PROVE it works (queues + merges PRs correctly on CI passed, merge-commits, priority) first.
THEN this (Phase 2 batching):batch_size > 1, merge_method: merge-batch (one merge commit per batch), require-up-to-date checkbox OFF. Include a throwaway-branch trial verifying merge-batch lands a real merge commit AND that no stale PR can merge outside the queue (per the spec's verify-in-trial caveat). Relates #407/#408/#409, never-disable-require-up-to-date (clarified).
## Context
Mergify **batching** (N PRs through ONE CI run — the #373-scale throughput win) requires GitHub's literal "require branches up to date" checkbox OFF (or `fast-forward`, which breaks the merge-commit policy).
## Status: GREENLIT — sequenced AFTER Phase 1 (#409) is proven
Maintainer decision (2026-07-07): *"Phase 2 is fine once we prove Phase 1 works. It's the invariant that matters, not the enforcement method."* Mergify's **speculative merge queue enforces the invariant** (never merge untested-against-latest-`main`) by construction, so turning off the GitHub checkbox for batching **preserves the invariant** — it's just enforced by Mergify instead of the checkbox. This is a method-swap, not a loss of the guarantee.
## Sequence
1. **#409 Phase 1** (serial queue, checkbox ON) — implement + **PROVE it works** (queues + merges PRs correctly on `CI passed`, merge-commits, priority) first.
2. **THEN this (Phase 2 batching):** `batch_size` > 1, `merge_method: merge-batch` (one merge commit per batch), require-up-to-date checkbox OFF. Include a **throwaway-branch trial** verifying `merge-batch` lands a real merge commit AND that no stale PR can merge outside the queue (per the spec's verify-in-trial caveat). Relates #407/#408/#409, [[never-disable-require-up-to-date]] (clarified).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Context
Mergify batching (N PRs through ONE CI run — the #373-scale throughput win) requires GitHub's literal "require branches up to date" checkbox OFF (or
fast-forward, which breaks the merge-commit policy).Status: GREENLIT — sequenced AFTER Phase 1 (#409) is proven
Maintainer decision (2026-07-07): "Phase 2 is fine once we prove Phase 1 works. It's the invariant that matters, not the enforcement method." Mergify's speculative merge queue enforces the invariant (never merge untested-against-latest-
main) by construction, so turning off the GitHub checkbox for batching preserves the invariant — it's just enforced by Mergify instead of the checkbox. This is a method-swap, not a loss of the guarantee.Sequence
CI passed, merge-commits, priority) first.batch_size> 1,merge_method: merge-batch(one merge commit per batch), require-up-to-date checkbox OFF. Include a throwaway-branch trial verifyingmerge-batchlands a real merge commit AND that no stale PR can merge outside the queue (per the spec's verify-in-trial caveat). Relates #407/#408/#409, never-disable-require-up-to-date (clarified).Phase 2 batching deployed: batch_size 5 live on main via #433 (require-up-to-date swapped to Mergify's speculative batch queue). Phase 1 + 2 complete.