Contributing
import { Steps, Aside } from ‘@astrojs/starlight/components’;
Prerequisites
Section titled “Prerequisites”- Node.js ≥ 20 (developed on 24)
- pnpm ≥ 9 (developed on 11)
- Git
-
Clone the repository and install dependencies:
Terminal window pnpm install -
Install Playwright’s browser binary (once per machine):
Terminal window pnpm exec playwright install chromium -
Run the full check suite:
Terminal window pnpm testpnpm typecheckpnpm lintpnpm build -
Make your change.
-
Re-run the check suite before opening a PR.
Everyday commands
Section titled “Everyday commands”| Command | What it does |
|---|---|
pnpm build |
Turbo runs build in every package |
pnpm test |
Turbo runs test in every package (vitest) |
pnpm typecheck |
Turbo runs tsc --noEmit in every package |
pnpm lint |
ESLint over the whole workspace |
Trying a change against the example app
Section titled “Trying a change against the example app”# terminal 1pnpm --filter example-react-vite dev
# terminal 2pnpm --filter @frontend-qa/cli buildnode packages/cli/dist/index.js scan --url http://localhost:5173The scan writes to examples/react-vite/.local/frontend-qa/runs/<runId>/report.json.
Adding a new collector
Section titled “Adding a new collector”- New module under
packages/browser/src/collectors/(or a fresh package). - Implements
QACollector<T>from@frontend-qa/core. - A Zod result schema in
packages/shared/src/schemas/. toIssuesmaps the result to theIssuemodel with an evidence tag.- Unit + integration test.
- Update
docs/FLOW.mdanddocs/TESTING.md.
- No
any— external data enters asunknownand is Zod-validated. - No default exports at package boundaries.
- Prettier defaults; ESLint enforces.
- Conventional commits (
feat(browser): …).
Publishing
Section titled “Publishing”Publishing to npm is owner-only and never done from an automated session — see Roadmap for the planned release process.