Skip to content

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

Part of ci-critical-path — The critical path from a change to its verdict, and from a merge to its verified deploy, runs under a minute warm.

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.

Searches the titles and descriptions of every page this site publishes.