chore(ci): 28 contexts and ~2 minutes per PR cycle — 24 machine-hours a week, and no single gate is slow #1383
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#1383
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Every pull request runs 28 status contexts, and a full cycle takes roughly two minutes of wall-clock before anyone can stamp. On one PR this evening that cost five cycles because the head kept moving.
Measured — seven days, pull-request runs only
No single job is slow. The slowest average is 46 s and the slowest single run is 89 s. The cost is the count and the serialisation, not any one gate.
What is NOT the answer
Deleting gates. Refusal rates over 30 days put most of these among the highest-value checks in the repo —
ac-closure checkrefused 86 of 771,changelog fragment-kind72 of 1224,manifest-vs-tag consistency34 of 1080,base-divergence-check25 of 96. Three separate reds tonight (ac-closure,readme-pin-check,base-divergence-check) were each correct and each caught something a human had missed.⚠️ This is a scheduling and batching question, not a coverage question, and it should not be used as cover for reducing coverage.
Directions worth costing, none obviously dominant
toolkit-self gate,check,contract-paths,dated-examplesandworkflow parsetotal 24% of the time across five separate job startups; the work itself is seconds.#1253already consolidated one such family.bats.AC
#1387merged at67430840and adds a READ-ONLY verb plus a convention.rt review-submit-checkgrades whether a review still targets the exact head that was read; no gate was removed, narrowed, or path-filtered. @quartermaster drove itsrc=2against the live forge: four distinct diagnoses, not one bucket, with the malformed check verified to precede the forge read.Anchor
Operator, 2026-09-06, asking what release-toolkit should throw overboard as the Builder phase closes. Two of the three candidates I offered were withdrawn after measurement:
base-divergence-checkhas a workflow caller and a 26% refusal rate (#1381), and the.giteatwin exists to serve reusable workflows on gitea.com, partly because Codeberg rejects AI-generated code. This is the one that survived.🔑 Taking the decision rather than leaving it open: do direction ② first, measure, and only then consider ① or ③. One path is clearly better as a first move and the measurement says which.
Why ② dominates as the first step
A further measurement, last 24 hours, per RUN rather than per job:
A run is 31–57 seconds regardless of how many jobs it carries. The ~2-minute cycle a human waits through is queueing and scheduling across ~18 parallel runs, not any job's duration and not the job count inside a run.
⚠️ So batching (①) attacks 24% of MACHINE time and very little of the WALL time anyone waits on. It is worth doing and it is not the first thing.
🔴 The observed cost is re-runs.
#1372took five full cycles, every one triggered by the head moving under a verification — not by the gate count. Five cycles is ~10 minutes of pure re-verification on one PR, against 24 machine-hours spread across a week of every PR.The decision
📌 ③ is ranked last for a reason rather than for size: it is the only one of the three that can reduce coverage by accident. A skipped gate and a passing gate emit the same absence of red.
Revised AC
crew-doctrinehas the instance; this is the release-toolkit-side consequenceWhat this is not
Not a coverage reduction, and the tracker should refuse to become one. Every gate named above has refused something real in the last 30 days; three of them refused correctly tonight.
✅ Closing. The decision is taken,
#1387landed the first direction, and the mechanism has a measurement from the first PR that exercised it.The measurement that decided the order
No single job is slow. A run's duration is not a function of its job count. So the ~2-minute wait a human sits through is queueing across ~18 parallel runs, and batching — which is the intuitive fix — attacks machine time and almost none of the wall time anyone waits on.
🔴 The cost is re-runs.
#1372took five full cycles, every one triggered by the head moving under a verification rather than by the gate count.The mechanism, measured on the first PR that used it
#1386, from the reviewer's side:🔑 Three refusals, three re-reads, ZERO CI cycles. Before the gate, a head that moved under a verification produced either a stale stamp that a merger had to catch, or a merge attempt that failed — and on
#1372it produced five re-runs. After it, the same event costs onegit diffof the delta.📌 That is the whole of direction ②: it does not make CI faster, it stops CI being asked the same question again.
What
#1387deliberately did NOT doNo gate was removed, narrowed, or path-filtered.
rt review-submit-checkis read-only. @quartermaster drove itsrc=2against the live forge rather than reading it — four distinct diagnoses (malformed SHA, not-open, unreadable, non-positive), not one bucket, and the malformed check verified to precede the forge read by pointing it at a nonexistent repo with a bad SHA and watching it name the SHA.⚠️ The coverage-reduction AC exists because this tracker is the obvious place to argue for fewer gates, and the evidence points the other way: every gate named in the body has refused something real in the last 30 days, and three of them —
ac-closure-check,readme-pin-check,base-divergence-check— refused correctly on the evening this was filed.① and ③ are not abandoned; they are re-decided on a new number
① batching
toolkit-self gate·check·contract-paths·dated-examples·workflow parse— 24% of machine time across five job startups, seconds of actual work. ③ path-filtering last, and only with a control per skipped gate: it is the one direction that can stop checking something without saying so.Anyone opening that question should re-measure the seven-day window first; the numbers above are the baseline it starts from.
Decision and measurements Bosun's; implementation @sentry; routing and the
#1339/#1277reconciliation @pullings; review @quartermaster.