Replace Jest with Vitest across the workspace. The brain and helm Angular suites
now run in a real browser (Playwright/Chromium via Vitest browser mode) so they
exercise real layout, focus, pointer events and computed styles that jsdom could
not. The cli, tools, mcp, registry and cli-smoke suites run on Vitest's node
environment.
- Add per-project vite configs and switch test targets to @nx/vitest:test
- Convert jest APIs to vi.* and jest module mocks to vi.mock with importOriginal
- Replace jest-axe with a browser-native axe-core helper and toHaveNoViolations
- Regenerate snapshots in vitest format (content unchanged, format-only)
- Remove all jest packages, configs, the preset and the @nx/jest target default
- Install Playwright Chromium in the CI unit job for the browser suites
Also fixes a brain avatar test that asserted inside a fire-and-forget setTimeout,
which passed vacuously under jsdom and only surfaced once a real browser loaded
the image.
* docs: add CLAUDE.md with repo conventions for agents
Documents the local CI checks to run before pushing, Conventional Commit
rules (including the commitlint scope enum), and populating the PR template.
* ci: cache Nx, run only affected, and parallelize to cut CI time
Without relying on Nx Cloud:
- shared composite setup action (pnpm + Node + install + Nx cache restore),
removing the duplicated install boilerplate across jobs
- persist the Nx computation cache via actions/cache so unchanged projects are
restored as cache hits instead of rebuilt/retested/relinted
- run nx affected (with nrwl/nx-set-shas) for lint/test/build/e2e instead of
run-many --all, so PRs only touch the projects they change
- unit no longer needs the build job, so it runs in parallel instead of waiting
~13 min for the build
- cancel superseded runs on the same ref via concurrency
- blobless full-history clone on the light jobs (keeps affected working)
* ci: run e2e in parallel instead of gating it on the docs build
The e2e suite runs cypress against storybook (its devServerTarget is
ui-storybook:static-storybook), so it is independent of the docs-app build and
no longer needs to wait ~13 min for it.
* perf: trim the docs-app vite build config
- reportCompressedSize: false (skip per-chunk gzip sizing)
- gate rollup-plugin-visualizer behind ANALYZE (was every build)
- drop the deprecated splitVendorChunkPlugin
- make prerender concurrency configurable (default 1; parallel prerender was a
net slowdown - the renders are CPU-bound single-thread SSR)
* ci: cache the cypress binary in the e2e job
* ci: exclude trpc-app-e2e from affected e2e (not a CI e2e suite)
* ci: restore cypress cache before install; harden prerender concurrency parse
* chore: drop prerender-concurrency experiment scaffolding and restore splitVendorChunkPlugin
Reverts two leftovers from the (rejected) parallel-prerender and Vite 8
experiments: prerender concurrency goes back to a hardcoded 1, and
splitVendorChunkPlugin is restored since it still works on Vite 6 and removing
it only changed chunking with no speed benefit.
* fix(repo): require pnpm v9 with engineStrict set
* fix: bump node version to v20 LTS
* fix(repo): apply formatting and importing sorting required for CI to pass
* feat(repo): oxlint lightning-fast linter with more code quality, correctness and performance checks
---------
Co-authored-by: Robin Goetz <35136007+goetzrobin@users.noreply.github.com>
* fix(repo): require pnpm v9 with engineStrict set
* fix: bump node version to v20 LTS
* fix(repo): apply formatting and importing sorting required for CI to pass