ci(mergify): Phase 2 - enable batching (batch_size 5) (#410) #433

Merged
JMR-dev merged 2 commits from ci-mergify-phase2-batching into main 2026-07-08 13:01:17 +00:00
JMR-dev commented 2026-07-08 12:07:37 +00:00 (Migrated from github.com)

Phase 2 of the Mergify rollout (#410) - enable batching, now that Phase 1 (serial queue) is proven end-to-end (mergify[bot] merged #425/#426 and serialised #426 -> #427 with an update + re-CI).

What changes

  • queue_rules.default.batch_size: 1 -> 5 + batch_max_wait_time: 5 min. Mergify now validates up to 5 queued PRs together on ONE speculative branch (latest main + the batch), runs CI once, and merges the whole batch if green - roughly 5x the serial throughput.
  • All other semantics unchanged: merge commits, "CI passed" the single required check, P0-P9 priority, auto_merge_conditions trigger.

The require-up-to-date swap (paired ruleset change)

Batching is incompatible with GitHub's "Require branches to be up to date before merging", so that option is turned off in the main ruleset (strict_required_status_checks_policy: false; the required CI passed check stays). This does not drop the invariant - it relocates it: the speculative batch branch is latest-main-plus-the-batch, so a green batch check is the against-latest-main test. Sanctioned swap, authorized because Phase 1 proved the queue performs that update + re-CI.

Rollout order

Ruleset flipped first (the serial queue still guards the invariant while main still has batch_size 1), then this PR merges -> batching live.

Phase 2 of the Mergify rollout (#410) - enable **batching**, now that Phase 1 (serial queue) is proven end-to-end (mergify[bot] merged #425/#426 and serialised #426 -> #427 with an update + re-CI). ## What changes - `queue_rules.default.batch_size: 1 -> 5` + `batch_max_wait_time: 5 min`. Mergify now validates up to 5 queued PRs together on ONE speculative branch (latest `main` + the batch), runs CI once, and merges the whole batch if green - roughly 5x the serial throughput. - All other semantics unchanged: merge commits, "CI passed" the single required check, P0-P9 priority, `auto_merge_conditions` trigger. ## The require-up-to-date swap (paired ruleset change) Batching is incompatible with GitHub's "Require branches to be up to date before merging", so that option is turned **off** in the `main` ruleset (`strict_required_status_checks_policy: false`; the required **CI passed** check stays). This does **not** drop the invariant - it relocates it: the speculative batch branch *is* latest-main-plus-the-batch, so a green batch check **is** the against-latest-main test. Sanctioned swap, authorized because Phase 1 proved the queue performs that update + re-CI. ## Rollout order Ruleset flipped first (the serial queue still guards the invariant while `main` still has batch_size 1), then this PR merges -> batching live.
mergify[bot] commented 2026-07-08 12:08:15 +00:00 (Migrated from github.com)

Merge Protections

🟢 All 2 merge protections satisfied — ready to merge.

Show 2 satisfied protections

🟢 📃 Configuration Change Requirements

Mergify configuration change

  • check-success = Configuration changed

🟢 🚦 Auto-queue

When all merge protections are satisfied and these conditions match, this pull request will be queued automatically.

  • -conflict
  • -draft
  • base = main
  • check-success = CI passed
  • label != broken
# Merge Protections 🟢 **All 2 merge protections satisfied** — ready to merge. <details><summary>Show 2 satisfied protections</summary> ## 🟢 📃 Configuration Change Requirements Mergify configuration change - [X] `check-success = Configuration changed` ## 🟢 🚦 Auto-queue When all merge protections are satisfied and these conditions match, this pull request will be queued automatically. - [X] `-conflict` - [X] `-draft` - [X] `base = main` - [X] `check-success = CI passed` - [X] `label != broken` </details>
mergify[bot] commented 2026-07-08 12:34:44 +00:00 (Migrated from github.com)

Merge Queue Status

  • ✅ Entered queue — 2026-07-08 12:34 UTC · Rule: default · triggered by merge protections
  • ✅ Checks passed · in-place
  • ✅ Merged — 2026-07-08 13:01 UTC · at 68e45df0ea44cc65e1493b4854c2b2035628d4df · merge

This pull request spent 26 minutes 36 seconds in the queue, including 26 minutes 21 seconds running CI.

Required conditions to merge
<!--- DO NOT EDIT -*- Mergify Payload -*- {"version": 1, "state": "merged", "queue_rule_name": "default", "queued_at": "2026-07-08T12:34:42.977578+00:00", "estimated_time_of_merge": null, "speculative_check_pr": null, "required_conditions": []} -*- Mergify Payload End -*- --> # Merge Queue Status - ✅ **Entered queue** — `2026-07-08 12:34 UTC` · Rule: `default` · triggered by [merge protections](https://github.com/JMR-dev/LibreMail/pull/433#issuecomment-4914610027) - ✅ **Checks passed** · in-place - ✅ **Merged** — `2026-07-08 13:01 UTC` · at `68e45df0ea44cc65e1493b4854c2b2035628d4df` · merge This pull request spent **26 minutes 36 seconds** in the queue, including **26 minutes 21 seconds** running CI. <details> <summary>Required conditions to merge</summary> - `-conflict` - [X] #433 - `-draft` - [X] #433 - [X] `base = main` - [X] `check-success = CI passed` - `github-review-approved` [🛡 GitHub repository ruleset rule `main`] - [X] #433 - `label != broken` - [X] #433 - [X] any of [🛡 GitHub branch protection]: - [X] `check-success = Debug build` - [ ] `check-neutral = Debug build` - [ ] `check-skipped = Debug build` - [X] any of [🛡 GitHub branch protection]: - [X] `check-success = Unit tests` - [ ] `check-neutral = Unit tests` - [ ] `check-skipped = Unit tests` - [X] any of [🛡 GitHub branch protection]: - [X] `check-success = CI passed` - [ ] `check-neutral = CI passed` - [ ] `check-skipped = CI passed` - [X] any of [🛡 GitHub repository ruleset rule `main`]: - [X] `check-success = @github-actions/CI passed` - [ ] `check-neutral = @github-actions/CI passed` - [ ] `check-skipped = @github-actions/CI passed` </details>
Sign in to join this conversation.