ci: shard the weekly mutation runs; no viewer job; six import mutants caught
The first scheduled run (2026-10-19) failed four ways: the viewer's mutation job called the recipe retired in P2 slice 1 (owner, 2026-10-18: no mutation runs on the GUI); the core and MCP runs were stopped at GitHub's six hours; the import run missed six mutants. - Every mutation recipe takes a shard (k/n, default all of it); the workflow runs the core in 8 shards, the store in 4, the importers in 2, the MCP server in 16, each its own job with a 350-minute limit. - Test timeouts are three times each run's own baseline, never under the recipe's old fixed value, so slower runners don't report false timeouts. - The mutants-gui job is gone. - ledger-import: rule_marks_match_their_notes, asset_register_xlsx_headings_and_totals_rule and xlsx_missing_amounts_are_cells_only_on_ruled_rows catch the six (the tax-basis rule marks, a heading's alignment, the totals row's blank cells, and a blank amount cell only on ruled rows), each checked against its mutant by hand. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01T3gXMVt7XJPi6ens1or9Dj
This commit is contained in:
1 parent
b47331e9d5
commit
13b09aa766
5 files changed
+219
-40
No files matched your search
@@ -88,40 +88,45 @@ miri:
|
||||
# Where cargo-mutants copies and builds the tree for each mutant (several
|
||||
# GB per job): the user's cache on disk, never /tmp, which is often RAM.
|
||||
# A mutant only needs some test to fail, so proptest doesn't shrink.
|
||||
#
|
||||
# Every mutation recipe takes a shard, "k/n" (default: all of it), so CI
|
||||
# can spread a crate over parallel jobs. Test timeouts are three times the
|
||||
# run's own baseline, never under the floor given: a slower machine gets
|
||||
# longer ones instead of false timeouts.
|
||||
mutants_tmp := env_var_or_default("XDG_CACHE_HOME", env_var("HOME") + "/.cache") + "/wanderbooks/mutants"
|
||||
|
||||
# Mutation testing of the core: do the tests catch planted bugs?
|
||||
mutants: sweep-test-tmp
|
||||
mutants shard="0/1": sweep-test-tmp
|
||||
# Core and store tests (the store's replay tests reach Ledger::replay_*);
|
||||
# the whole workspace would rebuild the viewer for every mutant.
|
||||
mkdir -p {{mutants_tmp}}
|
||||
PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-core --exclude crates/ledger-core/src/proofs.rs --test-package ledger-core --test-package ledger-store -j 4 --timeout 120
|
||||
PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-core --exclude crates/ledger-core/src/proofs.rs --test-package ledger-core --test-package ledger-store -j 4 --timeout-multiplier 3 --minimum-test-timeout 120 --shard {{shard}}
|
||||
@just sweep-test-tmp
|
||||
|
||||
# Mutation testing of the store. Fewer random cases per mutant (each needs
|
||||
# a run that catches it, not the deep sweep).
|
||||
mutants-store: sweep-test-tmp
|
||||
mutants-store shard="0/1": sweep-test-tmp
|
||||
mkdir -p {{mutants_tmp}}
|
||||
STORE_CASES=64 PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-store --test-package ledger-store -j 3 --timeout 300 -o mutants-store
|
||||
STORE_CASES=64 PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-store --test-package ledger-store -j 3 --timeout-multiplier 3 --minimum-test-timeout 300 --shard {{shard}} -o mutants-store
|
||||
@just sweep-test-tmp
|
||||
|
||||
# Mutation testing of the importers and report renderers.
|
||||
mutants-import: sweep-test-tmp
|
||||
mutants-import shard="0/1": sweep-test-tmp
|
||||
mkdir -p {{mutants_tmp}}
|
||||
PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-import --test-package ledger-import -j 4 --timeout 300 -o mutants-import
|
||||
PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-import --test-package ledger-import -j 4 --timeout-multiplier 3 --minimum-test-timeout 300 --shard {{shard}} -o mutants-import
|
||||
@just sweep-test-tmp
|
||||
|
||||
# Mutation testing of the settings parser and the receipt policy.
|
||||
mutants-config: sweep-test-tmp
|
||||
mutants-config shard="0/1": sweep-test-tmp
|
||||
mkdir -p {{mutants_tmp}}
|
||||
PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-config --test-package ledger-config -j 4 --timeout 120 -o mutants-config
|
||||
PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-config --test-package ledger-config -j 4 --timeout-multiplier 3 --minimum-test-timeout 120 --shard {{shard}} -o mutants-config
|
||||
@just sweep-test-tmp
|
||||
|
||||
# Mutation testing of the MCP server (every mutant runs the stdio suites;
|
||||
# fewer random cases each, as for the store).
|
||||
mutants-mcp: sweep-test-tmp
|
||||
mutants-mcp shard="0/1": sweep-test-tmp
|
||||
mkdir -p {{mutants_tmp}}
|
||||
MCP_CASES=16 PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-mcp --test-package ledger-mcp -j 4 --timeout 600 -o mutants-mcp
|
||||
MCP_CASES=16 PROPTEST_MAX_SHRINK_ITERS=0 TMPDIR={{mutants_tmp}} cargo mutants -p ledger-mcp --test-package ledger-mcp -j 4 --timeout-multiplier 3 --minimum-test-timeout 600 --shard {{shard}} -o mutants-mcp
|
||||
@just sweep-test-tmp
|
||||
|
||||
# No mutation runs on the viewer (owner, 2026-10-18: they crushed the
|
||||
|
||||
Reference in new issue
Block a user