CI: eight mutant shards, and a 30-minute timeout on each

Merged
DO
2d ago
+13-7

Why

The mutation check's six shards run close to their 25-minute job timeout, and one is now cut by it. Measured on the last day:

RunShard timesCut
#212 at 02e79a014 to 24 minshard 1 of 6 cut at 25:00 on three attempts; attempt 2 had printed "166 of 166 mutants killed" 20 ms before the cut
#212 at beccc29shard 1 passed in 24:47
#214 merge-group run 3933542125114 to 24 minshard 3 of 6 cut at 25:00 having killed 136 of 168, none surviving; the PR was ejected and merged on the next attempt
#210 at f561b9a17 to 22 minshards 0 to 2 cut at 25:00 (13 mutants that named no test; fixed in that PR)
main at d0e0105 (merge group)15 to 24 min

A mutant that names no test runs the whole suite, with the simulation, before it is read as killed; about half the list does, and that is most of a shard's time. The workflow's own comment said to add a shard before the shards neared 15 minutes.

What changes

The matrix in .github/workflows/verify.yml gains two shards, eight in all of about 126 mutants each, and the mutants job's timeout goes from 25 to 30 minutes. MUTANTS_SHARD and MUTANTS_SHARDS already come from strategy.job-index and strategy.job-total, so nothing else in the workflow changes: the judging step and verify's needs are untouched, no permission or pin moves. examples/workflows/verify.yml and the first block of docs/standards/workflows.md carry the workflow word for word, and the head comment now states the measured times. Every mutant is in exactly one shard at any count from 1 to 12 (tests/test_tools.py::test_every_mutant_is_in_exactly_one_shard).

Part of #180. No decision record: nothing is decided, two numbers grow. The first head carried a seventh shard alone; the review's one major was that it leaves the slowest leg near 21 minutes against 25, past the comment's own rule, and the Maintainer chose eight shards (about 18:40 at the slowest) and a 30-minute timeout.

Reviews

A fresh-context Claude review with a security pass against docs/standards/workflows.md, and Muse Wonder Full, read the first head, 75b21ef. Findings, all folded into the one fix commit: seven shards is not enough by the comment's own rule (Claude's major; the Maintainer decided eight and a 30-minute timeout); the comment's figures were off (both: 1,008 mutants, not 960; the cut came 22 ms after the last kill, on different legs of three pull requests); the design still said six shards (both). Muse's minor that nothing holds the shard count itself is by design: decision 0026 keeps the count in the matrix, and every count partitions every mutant once.

Verify

make verify passed on a fresh git archive export with PATH=/usr/bin:/bin SIM_SEEDS=40 at both heads.

šŸ¤– Generated with Claude Code