ci(mergify): Phase 2 — batching (BLOCKED on require-up-to-date decision) #410

Closed
opened 2026-07-07 03:09:59 +00:00 by JMR-dev · 1 comment
JMR-dev commented 2026-07-07 03:09:59 +00:00 (Migrated from github.com)

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).
## 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).
JMR-dev commented 2026-07-08 13:05:58 +00:00 (Migrated from github.com)

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.

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.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: JMR-dev/LibreMail#410