Files
Uzayer Masud 9a41c1485f ci: run only the Rust jobs a change affects
Every push ran all 27 jobs, including the ~25-minute macOS app build and
the engine compile, although most commits touch only the frontend. A new
`plan` job (scripts/ci-affected.mjs) diffs the push or PR, maps each file
to the cargo packages that read it, closes over reverse dependencies, and
gates the app, engine-dialect and per-crate jobs on the result. The crate
matrix moves to .github/ci-crates.json so the plan can filter it.

It fails closed: an unclassified file, a global input (lockfile, root
manifest, cargo config, ci.yml, the planner), a new branch, a force-push,
a push to main, a manual run and a new weekly scheduled run all run
everything. frontend always runs.

Several crates read files outside their own directory (the spawn audit
walks every Rust source, the app include_str!s docs and a TS file,
atlas-theme checks the mock fixtures), which a directory mapping cannot
see. They are declared in EXTRA_INPUTS, and tests/ci-affected.test.ts
scans first-party crates for such reads and fails on an undeclared one,
on an unclassified tracked file, and on a job that loses its plan gate.

A `CI passed` job waits on every job and is the one check to require in
branch protection, since a required job the plan skipped would otherwise
stay pending forever.
2026-09-30 05:28:07 +06:00
..