I3930 — The suite is dealt from the seconds it costs now, and the record that deals it says when it falls behind
Deal the four suite shards from measured case seconds: an unrecorded case weighs the record's median, the record is refreshed from a measured run, and every run names the cases the record lacks or under-weighs and writes the record it measured.
READY wave 0 · p1 · debugging profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3930 will be accepted.
Objective
Deal the four suite shards from measured case seconds: an unrecorded case weighs the record's median, the record is refreshed from a measured run, and every run names the cases the record lacks or under-weighs and writes the record it measured.
Why
The deal is the critical path's floor. On 2026-10-22 the record held 410 of 602 cases, an unrecorded case weighed a guessed 300 s against a median of 9, and run 39762797718's shards ran 87, 52, 82 and 43 minutes. Nothing failed, so nothing said so: the cost was wall clock on every pull request.
Current state
.ai/repo/ci/suite-durations.tsv was last refreshed on 2026-10-10; test/run.sh deals an unrecorded case at 300 s; scripts/ci/suite-budget reads the record only for NEAR lines.
Desired state
test/run.sh deals an unrecorded case at the record's median; the record holds the seconds runs 39762797718 and 39634495999 measured; suite-budget prints STALE for each case the record lacks and DRIFT for each case at more than twice its record, and with --write-durations writes the record the run measured, which the suite job uploads in ci-metrics-suite. Simulated on the same runs, the shards' case seconds go from 15237/11769/18483/8355 to 13450/13452/13493/13449.
Scope
- test/run.sh
- .ai/repo/ci/suite-durations.tsv
- scripts/ci/suite-budget
- .github/workflows/validate.yml
- test/cases/721_the_suite_shards_are_the_whole_suite.sh
- test/cases/3084_a_case_near_its_budget_is_named.sh
- .ai/repo/project/issues/I3930.yaml
Out of scope
- Raising or lowering any budget or bound in .ai/repo/ci/suite.yaml
- Making the slowest case cheaper (I2115 holds 486_rustdoc_composition at 4017 s, the shard floor)
- Committing the record from CI; refreshing it stays a reviewed change
Dependencies
None. This issue is a root of the graph.
Acceptance criteria
- An unrecorded case is dealt at the record's median, and case 721 fails when it is dealt above it
- The record holds every case the measured runs ran, and the shards' simulated case seconds are within 1% of each other
- suite-budget names STALE and DRIFT cases and writes the measured record without changing its exit status, and case 3084 holds all three
- The suite job uploads the record it measured beside suite.tsv
Validation
- bash test/run.sh 721_the_suite_shards_are_the_whole_suite 3084_a_case_near_its_budget_is_named 94_ci_plan 1021_a_push_runs_what_ci_would_find_first 417_the_suite_finishes_inside_its_bound
- scripts/ci/shell-lint
Evidence required
- suite
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Risk
A refreshed record is a snapshot of one runner's load; the median default and the per-run STALE and DRIFT lines are what keep a stale record from costing wall clock again.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3930.yaml. Read it back with majordomus plan show I3930.