Repository navigation
ci(mergify): checks timeout at 2×p95 for the release queue (rail G11; batching blocked by plan tier) - #16066
Merged
Conversation
… queue (rail G11) Rail G11 (v3.8.54) asks for a batched queue (~5) with a timeout of about 2x the CI p95. Only the timeout half can ship: batching is a paid Mergify tier on this repo (live dequeue "Cannot use Merge Queue batch", #7220), so batch_size stays out and the contract test guards against re-adding it. - queue_rules.release: checks_timeout 240 min = 2 x the 119.75 min p95 wall-clock of the last 100 successful quality.yml runs (2026-09-28..10-08). - docs/ops/MERGE_TRAIN.md: the runbook claimed the queue batches up to 10 PRs and bisects; it has been serial since #7220. - tests/unit/mergify-queue-config.test.ts: pins queue/merge conditions, the timeout floor (2 x measured p95) and the absence of paid/deprecated keys.
Merge Protections🔴 1 of 2 protections blocking · waiting on 🙋 you
🔴 🚦 Auto-queueWaiting for
This rule is failing.When all merge protections are satisfied and these conditions match, this pull request will be queued automatically.
Show 1 satisfied protection🟢 📃 Configuration Change RequirementsMergify configuration change
|
Contributor
CI Coverage Report
Coverage artifact was not available for this run. |
diegosouzapw
added a commit
that referenced
this pull request
Oct 10, 2026
Brings in #16073 (RELEASE_STRATEGY.md, ROADMAP See-also), #16180 (dev:candidate, RELEASE_CHECKLIST, meta.json), #16172 (dist-tag.mjs and the dormant LTS workflows) and #16066 (Mergify checks_timeout). package.json keeps both release:dry-run-lts-cut and labels:sync. Now that the base carries them, the LTS-cut dry-run uses the real scripts/release/dist-tag.mjs resolver (the built-in fallback is gone), treats a dormant workflow missing at the cut source as NOT READY, and the runbook / GO-NO-GO docs link RELEASE_STRATEGY.md and name the real forward-port secret and nightly publish variable. The G11 fixture is the real .mergify.yml.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Rail G11 (v3.8.54) asks the merge queue for batching ~5 and a timeout ≈ 2×p95 of CI. This PR lands the timeout half. The batching half is blocked by the Mergify plan tier: on this repo,
batch_size/batch_max_wait_timealready got every PR dequeued with "⚠ The 'Merge Queue Batch' feature requires a higher subscription tier" (live finding on #7205, removed in #7220). Re-addingbatch_size: 5would break the queue, so it stays out until the owner decides to upgrade the subscription.What changed
.mergify.yml→queue_rules.release.checks_timeout: 240 min. The YAML comment records the measurement.merge_conditions,queue_conditionsand the governance header are untouched.p95 is measured over the last 100 successful
quality.ymlruns (2026-09-28 → 2026-10-08), wall-clockcreatedAt → updatedAt, so runner queueing counts:2 × 119.75 = 239.5, rounded up to 240 min. The distribution is bimodal: path-filtered docs-only runs take about 2 min, and full runs have a median of about 72 min.
Before this change the queue used Mergify's default
checks_timeout: auto. Per the docs,autoapplies no timeout until the queue has enough CI history on the branch. Our queue is serial and lightly used, so a hung check could stall it with no limit.docs/ops/MERGE_TRAIN.md: the runbook said the queue "batches up to 10 PRs and bisects". The queue has been serial since fix(ci): drop Mergify batch settings (paid-tier feature — queue failed with 'Cannot use Merge Queue batch') #7220, so the runbook now says so.tests/unit/mergify-queue-config.test.ts(new contract test) pins:label=queue,-draft,-conflict,base~=^release/) and the auto-merge label;#check-pending=0,#check-success>=1, theMerge integrityanchor);checks_timeout≥ 2 × the measured p95, kept as a commented constant;allow_inplace_checks,autoqueue,speculative_checks).Validation
npx --yes js-yaml .mergify.ymlcurl -F data=@.mergify.yml https://api.mergify.com/v1/validate/node --import tsx/esm --test tests/unit/mergify-queue-config.test.tschecks_timeout: 200 min→ re-runnpx eslint tests/unit/mergify-queue-config.test.tsnpx prettier --check(3 files)npm run check:docs-allOpen risk: the Mergify docs do not say whether
checks_timeoutis tier-gated; they say so for batching only. If Mergify's config check on this PR flags it, drop the key and fall back toauto.