CI: faster push and PR runs (CI-only draft)
Merged
BA
2d ago+2297+2297+0123456789012345678901234567890123456789-245-245-012345678901234567890123456789
CI-only draft to measure the CI restructuring; it lands on main through the normal gated push.
Summary by cubic
This draft restructures push and PR CI to cut wall-clock time. A temporary push-only branch filter measured the reshuffle and has been reverted; the baseline benchmark continues remotely before the change lands through the normal gated push. It also carries two features the restructured pipeline depends on: stored-value state epochs and throwaway durability for disposable test stores.
CI
- Build-free gates (rustfmt, shell checks, clippy) move to a new
lintjob that does not compile. - Regular Linux mutation shards go from 2 to 8; nightly counts and full-catalogue push replay are unchanged.
- Builds cache under a main-only prefix plus an immutable run id so shard legs reuse main artifacts, with a Windows baseline fallback.
rig-kill-hooktests now run on x86_64 Linux and macOS only; hook-enabled clippy stays on all three platforms.- A line-tables-only debug-profile trial was reverted after failing the stack-limit tests on both Windows images; the default profile stays.
State epochs and durability
- Manifest gains optional
state_epoch(default 1); the first admitted run of a version with a different epoch clears that instance'skvin the same admitting transaction. - Older runs finish first; a waiting epoch change (
StateBusy) blocks only its flow's oldest fire, so other schedules keep going. - Migration 29 records per-flow epochs and a
state_resetshistory; epochs surface in flow health,package.get(instance_state_epochs), and dry-run replies (state_reset). - Disposable test stores open with
synchronous=OFFviaDurability::throwaway(); production keepssynchronous=FULLwith fullfsync, guarded by a new Rust-parsing boundary test and mutation rows.