Files
Caspian 東澔 a40a2e9694 ci: consolidate PR workflows into one path-gated ci.yml (#793)
* ci: consolidate PR workflows into one path-gated ci.yml

Merge quality/test/build/windows into a single CI workflow with one
`changes` job (dorny/paths-filter@v4, inline filters) and exactly one
`if: needs.changes.outputs.<x> == 'true'` gate per job, so a change only
runs the suites it can affect:

- Rust-only change runs Clippy + Rust Test + Windows Rust Test, skips
  frontend/sidecar/e2e/build lanes
- frontend/sidecar/marketing changes never trigger cargo clippy or Rust tests
- marketing-only or docs-only PRs run just Biome (the marketing site builds
  on its own Vercel preview)

Filters compose via YAML anchors (paths-filter flattens nested lists): the
`global` category (CI config, lockfile, root tool/build config, scripts) is
folded into every filter, so a cross-cutting tooling change force-runs the
full suite and can never silently skip a lane.

Also split the old combined lint into Biome (fast, no Rust toolchain) and
Clippy (Rust toolchain + sidecar staging, Rust-gated).

main has no branch protection, so skipped jobs don't block merges.

* ci: close filter gaps found in deep audit

Three coverage gaps against pre-consolidation behavior, all verified by
simulating the filters with the real picomatch engine ({dot: true}, same
recursive flatten as paths-filter):

- biome: gate on every Biome-parseable extension repo-wide instead of
  enumerating directories — biome.json includes ["**"], so the old
  per-PR lint also covered e2e/**, playwright.config.ts, .announcements/,
  .changeset/config.json etc. An e2e-only lint error could previously
  have landed and failed every subsequent PR's Biome job.
- typecheck: add playwright.config.ts — root tsc checks it through the
  tsconfig.node.json project reference.
- rust: add sidecar/package.json + sidecar/bun.lock — agent SDK bumps
  change the event shape the Rust accumulator parses; AGENTS.md requires
  pipeline snapshot tests on every claude-code bump.

19-scenario simulation passes: frontend-only runs no Rust lane, rust-only
runs no frontend/sidecar/e2e lane, docs-only runs nothing, SDK bumps run
both sidecar and Rust suites.
2026-06-10 23:26:39 -07:00
..
2026-05-01 15:36:55 +08:00