Skip to content

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

Merged
ualtinok merged 9 commits into
mainfrom
ci/faster-ci
Oct 14, 2026
Merged

ualtinok merged 9 commits into
mainfrom
ci/faster-ci

Conversation

@basal-alfonso

@basal-alfonso basal-alfonso Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

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.

Written for commit 8082ddc. Summary will update on new commits.

View guided diff Turn on auto-fix

Add hashed manifest state_epoch, migration 29, per-flow recorded epochs and durable reset history. Clear only kv in the admitting transaction; wait for all older nonterminal runs because execution concurrency alone does not serialize admissions.

Expose recorded epochs in list/health, declared and instance epochs in package.get, and consistent boolean reset previews in dry runs. Update the exact package.get reply test to include the required additive state_epoch field while retaining its immutable-byte and hash assertions.

Add defaults, preservation, rollback, independent template, worker ordering, transaction rollback and abrupt-exit recovery tests. Prove admission atomicity, token/rate preservation and epoch equality with four Linux mutation rows; retain the existing macOS schedule-drain proof after its anchor changes.
Flow and package ids can have the same name. Compare only the named flow for ordinary/instance previews, and only package membership for template-wide previews. Add direct store and management-operation regressions for a same-named package whose instance records a different epoch.
Keep a per-admission-pass set of StateBusy flow ids. Select and quarantine only fires outside that set, leaving waiting flows untouched while later flows continue. Draining remains global; every new pass rechecks previously waiting flows.

Test two waiting fires ahead of another flow's corrupt and healthy fires, then admit the waiting flow after its old run ends. Add and prove a Linux mutation restoring the early return; update and replay the existing FIFO mutation anchor for the exclusion-aware query.
Add independent FULL/OFF synchronous durability while keeping production defaults. Route fixtures and crash harnesses through feature-gated throwaway settings; keep production pragma probes and the journal durability benchmark on FULL. Production dry-run scratch also uses the production default as required for non-test paths.

Share the serving config and store opener with the binary pragma test. Parse all workspace Rust source to fence throwaway from production, including nested modules, macro tokens and unknown platform cfgs, with planted-use tests and Linux mutation rows. Adapt and re-prove the existing FULL-to-NORMAL control without changing its guarding test's contract.

Linux full affected suites passed in both kill-hook modes (1068/1069 tests), with both clippy gates and catalogue checks. Mac privacy/confinement tests passed. One Mac core timing sample before/after passed 279 tests each: libtest 25.33s/29.10s; total 112.25s/39.63s includes cold/incremental compilation, so no test-runtime speedup is claimed. See evidence/throwaway-durability.md.
Use eight regular Linux mutation shards without changing nightly counts or full-catalogue push replay. Split Windows package groups, keep the workspace host pass, and remove its three duplicate host tests. Move build-free gates to lint and retain hook clippy on every checks platform while skipping arm64 hook tests.

Cache builds under a main-only prefix plus immutable run id; mutation jobs use that run id or the newest main prefix, with a Windows baseline fallback. Runner install keys ignore basal's lockfile. Add build-folder measurements and line-tables-only debug for CI evaluation.

Rename the regular-shard count test because Linux scheduling deliberately changes from two to eight. Derive Linux coverage from the catalogue rather than pinning the review's stale 608 total (current total is 615), per reviewer's direction.
Temporarily allow ci/faster-ci-bench in the push trigger and full-catalogue push matrix filter. This exercises normal own-target replay rather than workflow_dispatch breadth. All cache-save guards remain push/main only. Revert this harness after measurement; it is not part of the production CI change.
The line-tables-only trial failed stack_limit_holds and stack_exhaustion_retires_the_worker_before_the_next_handout in both Windows images. Worker budgets expected BudgetExhausted(Stack) but got a lockdown-prelude engine error; module pool expected budget_exhausted but got activation. Do not retain an unsafe build-profile optimization or weaken those tests. Revert the profile setting everywhere and return push filters to main only. The prior benchmark continues remotely for timing evidence.
@ualtinok
ualtinok merged commit 8082ddc into main Oct 14, 2026
28 of 30 checks passed
@ualtinok
ualtinok deleted the ci/faster-ci branch October 14, 2026 22:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant