Use when writing tests, adding coverage, implementing business logic, or building features with TDD. Enforces output-based testing of pure functions only - never test imperative shell directly.
The single source of truth for test rules is references/. This skill routes there. Read the docs in order and write to their rules.
The goal is not coverage. The goal is trust: after reading this test, can you trust the implementation more?
Test names follow references/naming.md at every level.
Tests are colocated with source (next to the file, or in a sibling __tests__/). Two Vitest projects, routed by filename:
| Kind | Extension | Vitest project | Setup | MSW |
|---|---|---|---|---|
| Unit | *.test.ts(x) | unit | setupTest.ts | off |
| Integration | *.integration.test.tsx | integration | setupTest.ts + setupTest.integration.ts | on (onUnhandledRequest: 'error') |
Missing the .integration suffix routes the file to the unit project with no MSW → silent false green. This is the #1 filename mistake.
apps/web/vite.config.ts (test.projects). Run: pnpm --filter web test / test:run / test:coverage.apps/web/tests/*.spec.ts, local Supabase) is out of scope for this skill.createBrowserRouter, loaders, lazy)./rest/v1/*, /auth/v1/*); tests mock the network with MSW, never the Supabase SDK.renderWithProviders (src/test/utils/renderWithProviders.tsx). Auth: signInAs (src/test/utils/signInAs.ts) or vi.mock('@/shared/hooks/useAuth') — see integration.md.vitest run <file> --coverage (v8) for reachability.Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer