Unit tests: Vitest, colocated with source (*.test.ts next to *.ts). Config: packages/app/vitest.config.ts.
E2E tests: Cypress, in packages/app/cypress/e2e/. Config: packages/app/cypress.config.ts.
Enforced by @pr-claude — missing/low-quality tests are flagged 🔴 BLOCKING.
- New utility functions → colocated unit test
- New UI features → E2E test in
cypress/e2e/<feature>.cy.ts - Bug fixes → regression test reproducing the bug
- Run
pnpm test:unitandpnpm test:e2ebefore considering task complete
pnpm dev --hostname 0.0.0.0 --port 3000 &
curl --retry 10 --retry-delay 2 --retry-connrefused -sSf http://localhost:3000 >/dev/null
pnpm test:unit
pnpm test:e2e- No tautological tests — every test must verify a real transformation
- Cover edge cases — empty input, null, boundary values, error paths
- Meaningful assertions — check specific values, not just truthiness
- Test behavior, not implementation
- Realistic inputs — real model names, GPU keys, sequence strings
- No shallow Cypress tests — assert content/behavior, not just visibility
- Regression tests must reproduce the bug with exact triggering input
- No inline Cypress timeout overrides — use the global
defaultCommandTimeoutincypress.config.ts. Never pass{ timeout: N }to individual commands.