mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 19:58:50 +00:00
Four independent cuts into the 2-4 hour full run, none touching the contract "a mutant must turn its guard red": - guardNeedsBundle: rollup runs only for guards that open the built bundle (demo/ smokes, golden captures, bundle:sync) — 68 of 253 registry entries. Unit and backend guards never read dist/ as a build artifact (verified against every test that mentions dist/**: they read the git checkout or synthetic files), so 185 mutants skip the most expensive step entirely. - seedTestBuild + incremental tsc: the mutant worktree starts from the main tree's warm test-build/ and .tsbuildinfo; tsc compares file hashes, not mtimes, so the fresh checkout stays warm and only the mutated delta is recompiled. This also speeds up the long guards that run tsc themselves. - --changed[=range]: run only mutants whose patch files are touched by the diff (origin/dev..HEAD by default). An empty selection is an honest success with an explicit message — the full registry remains the pre-release contract, per the workflow comment. - --shard=i/n: deterministic interleaved slices; the workflow runs a 4-way matrix, and a warm test-build step feeds every shard. Interleaving spreads the expensive browser mutants across shards instead of clumping them. Measured per mutant on this machine: unit 12-13 s (was ~50-70 s), backend 6 s, browser 32 s (unchanged — the bundle is genuinely needed there). Full run estimate drops to ~70 sequential minutes, ~20 on four shards. Unit coverage: guard classification on real registry shapes, a floor on both classes so the split cannot silently collapse, changed-selection semantics, and shard completeness/disjointness with an anti-clumping bound. Issue: #332 User-Visible: no