Investigates Mergify (third-party GitHub App: merge queue + batching + speculative checks, free for open source) and proposes an integration spec for #407. Proposal only — this PR is docs-only, there is no live .mergify.yml, and nothing activates. The maintainer reviews the spec before adopting anything.
Adds:
docs/ci/mergify-integration-spec.md — the spec.
docs/ci/mergify.yml.proposed — an annotated, deliberately NOT-active config (*.proposed, not .mergify.yml).
Key findings
Free-for-OSS: Mergify's "Open Source" plan is $0, unlimited users on public repos, and includes the full Merge Queue + batching + speculative checks. LibreMail qualifies.
The central tension (surfaced honestly): batching is incompatible with GitHub's literal require branches up to date checkbox (Mergify docs). It's a trilemma — require-up-to-date literal x merge-commits x batching, pick two:
Phase 1 (serial): keeps the checkbox literally on, merge_method: merge, automates the manual bumping. Zero change to the hard rule. No batching win yet.
Phase 2 (batching):merge_method: merge-batch (one merge commit per batch — keeps the merge-commit policy), checkbox off, up-to-date guarantee moved into the queue (speculative testing preserves/strengthens the invariant), merges locked to Mergify. The only remaining path to the #373-scale throughput win.
Coexists with the single CI passed gate unchanged; replacesautoupdate.yml + ci-trigger.yml + mothballed traffic-control.yml; P0–P9 labels → priority_rules; MAX_INFLIGHT_RUNS → max_parallel_checks; synergistic with the path-filter/#399/#402, sharding/#372, and wedge-diag/#404/#406.
Recommendation: adopt phased — Phase 1 now (safe), Phase 2 only after the maintainer signs off on the trilemma + a throwaway-branch trial. Must not weaken require-up-to-date — the spec preserves the invariant in both phases.
Notes for review
No auto-merge — the maintainer reviews the spec before adopting.
Docs-only; no source, no live .mergify.yml, so nothing runs Mergify.
## What
Investigates **Mergify** (third-party GitHub App: merge queue + **batching** + speculative checks, **free for open source**) and proposes an integration spec for #407. **Proposal only** — this PR is **docs-only**, there is **no live `.mergify.yml`**, and **nothing activates**. The maintainer reviews the spec before adopting anything.
Adds:
- `docs/ci/mergify-integration-spec.md` — the spec.
- `docs/ci/mergify.yml.proposed` — an annotated, deliberately **NOT-active** config (`*.proposed`, not `.mergify.yml`).
## Key findings
- **Free-for-OSS:** Mergify's "Open Source" plan is $0, unlimited users on public repos, and includes the full Merge Queue + batching + speculative checks. LibreMail qualifies.
- **The central tension (surfaced honestly):** batching is **incompatible with GitHub's literal `require branches up to date` checkbox** (Mergify docs). It's a trilemma — `require-up-to-date` literal x merge-commits x batching, **pick two**:
- **Phase 1 (serial):** keeps the checkbox **literally on**, `merge_method: merge`, automates the manual bumping. **Zero** change to the hard rule. No batching win yet.
- **Phase 2 (batching):** `merge_method: merge-batch` (one merge commit per batch — keeps the merge-commit policy), checkbox **off**, up-to-date **guarantee moved into the queue** (speculative testing preserves/strengthens the invariant), merges locked to Mergify. The only remaining path to the #373-scale throughput win.
- **Coexists with the single `CI passed` gate** unchanged; **replaces** `autoupdate.yml` + `ci-trigger.yml` + mothballed `traffic-control.yml`; **P0–P9 labels → `priority_rules`**; `MAX_INFLIGHT_RUNS` → `max_parallel_checks`; synergistic with the path-filter/#399/#402, sharding/#372, and wedge-diag/#404/#406.
- **Recommendation:** adopt **phased** — Phase 1 now (safe), Phase 2 only after the maintainer signs off on the trilemma + a throwaway-branch trial. **Must not weaken require-up-to-date** — the spec preserves the invariant in both phases.
## Notes for review
- **No auto-merge** — the maintainer reviews the spec before adopting.
- Docs-only; no source, no live `.mergify.yml`, so nothing runs Mergify.
Closes #407
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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.
What
Investigates Mergify (third-party GitHub App: merge queue + batching + speculative checks, free for open source) and proposes an integration spec for #407. Proposal only — this PR is docs-only, there is no live
.mergify.yml, and nothing activates. The maintainer reviews the spec before adopting anything.Adds:
docs/ci/mergify-integration-spec.md— the spec.docs/ci/mergify.yml.proposed— an annotated, deliberately NOT-active config (*.proposed, not.mergify.yml).Key findings
require branches up to datecheckbox (Mergify docs). It's a trilemma —require-up-to-dateliteral x merge-commits x batching, pick two:merge_method: merge, automates the manual bumping. Zero change to the hard rule. No batching win yet.merge_method: merge-batch(one merge commit per batch — keeps the merge-commit policy), checkbox off, up-to-date guarantee moved into the queue (speculative testing preserves/strengthens the invariant), merges locked to Mergify. The only remaining path to the #373-scale throughput win.CI passedgate unchanged; replacesautoupdate.yml+ci-trigger.yml+ mothballedtraffic-control.yml; P0–P9 labels →priority_rules;MAX_INFLIGHT_RUNS→max_parallel_checks; synergistic with the path-filter/#399/#402, sharding/#372, and wedge-diag/#404/#406.Notes for review
.mergify.yml, so nothing runs Mergify.Closes #407
🤖 Generated with Claude Code