CI: faster push and PR runs (CI-only draft)

Merged
BA
2d ago
+2297-245

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 lint job 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-hook tests 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's kv in 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_resets history; epochs surface in flow health, package.get (instance_state_epochs), and dry-run replies (state_reset).
  • Disposable test stores open with synchronous=OFF via Durability::throwaway(); production keeps synchronous=FULL with fullfsync, guarded by a new Rust-parsing boundary test and mutation rows.