fast-mutants: cargo-mutants per file with scoped tests, survivors confirmed on the full suite, sharded across slots #40

Merged
eureka merged 4 commits from eureka-substrate/fast-mutants into main 2026-11-01 20:11:48 +00:00
Owner

Cut eureka-substrate:cut_spec:cut-fast-mutants.r1 (operator ruling eureka-substrate:ruling:fast-mutation-testing).

  • New tools/cargo-mutants.sh: stage 1 runs each touched file's mutants against that file's module tests; stage 2 reruns survivors, timeouts and zero-test files on the full suite; only stage-2 survivors count as missed. Shards across free ygg-verify slots, throttled by IO pressure.
  • Same 132 mutants / 9 survivors as the old whole-diff sweep on Huginn persona-session: 22 min quiet (37 under IO pressure) vs 83/107.
  • Soul s1 + s2: no false kills; merged missed list equals a plain full-suite run (fixture and a live Huginn range); a red suite is a red job.
  • Residual Low deferred: eureka-substrate:follow_up:zero-mutant-range-baseline.

Reports: cut-fast-mutants.h1, h2. Verdicts: s1, s2.

🤖 Generated with Claude Code

Cut eureka-substrate:cut_spec:cut-fast-mutants.r1 (operator ruling eureka-substrate:ruling:fast-mutation-testing). - New `tools/cargo-mutants.sh`: stage 1 runs each touched file's mutants against that file's module tests; stage 2 reruns survivors, timeouts and zero-test files on the full suite; only stage-2 survivors count as missed. Shards across free ygg-verify slots, throttled by IO pressure. - Same 132 mutants / 9 survivors as the old whole-diff sweep on Huginn persona-session: 22 min quiet (37 under IO pressure) vs 83/107. - Soul s1 + s2: no false kills; merged missed list equals a plain full-suite run (fixture and a live Huginn range); a red suite is a red job. - Residual Low deferred: eureka-substrate:follow_up:zero-mutant-range-baseline. Reports: cut-fast-mutants.h1, h2. Verdicts: s1, s2. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
One verify job per range: a plan container lists the mutants (diff taken at the
workspace root), stage 1 runs each file's mutants against that file's tests only
and decides only caught and unviable, stage 2 confirms every survivor, timeout,
unfiltered or zero-test file on the full suite, sharded over free slot leases,
and the merge prints one MUTANTS line and the final MISSED/TIMEOUT names.
NAMES reruns chosen survivors; TEST_ARGS skips flaky tests.

Deletes ygg-verify.sh's MISSED/TIMEOUT summary grep and its inline cargo mutants
usage example; the host-mode export gains YGG_SLOTS and YGG_ROOT. Briefs and
SKILL.md name the script; the mock docker grows /cm and /out, with a fake cargo
and a fake flock for the new test-tools.sh cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- full-baseline-skipped: stage 2 runs even when stage 1 settled every name (one name rides along; cargo-mutants runs no baseline for an empty selection), so a red suite is a red job
- timeout-mult-splits-missed: CONFIRM_TIMEOUT_MULT defaults to 5 and stage 2 gets --minimum-test-timeout like stage 1
- escaper-pipe-untested: the escaper is the --escape mode, run by the driver and by tests/test-tools.sh with each metacharacter
- zero-test-stage1-wasted: the plan container derives each file's filter and counts its tests (cargo test -- <filter> --list); 0 tests goes straight to stage 2; the container-side baseline.log count is deleted

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
eureka merged commit c2d2ee6c4f into main 2026-11-01 20:11:48 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/Eureka!40
No description provided.