mirror of
https://github.com/pacifio/atlas.git
synced 2026-10-02 08:34:53 +08:00
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.