docs(ci): propose Mergify merge-queue integration spec (#407) #408

Merged
JMR-dev merged 2 commits from ci-407-mergify-spec into main 2026-07-07 03:08:34 +00:00
JMR-dev commented 2026-07-07 02:56:18 +00:00 (Migrated from github.com)

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

## 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)
Sign in to join this conversation.