silo-testinglisted
Install: claude install-skill silo-code/silo
# Testing in Silo
**Every change that adds or changes behavior ships with unit tests in the same
change.** Tests are part of the work, not a follow-up. Don't mark a task done
until `pnpm test` is green with coverage for what you added.
How testing works here:
- **Vitest, co-located.** Put `*.test.ts` / `*.test.tsx` next to the source it
covers; the package `vitest.config.ts` picks up `src/**/*.{test,spec}.{ts,tsx}`.
Run everything with `pnpm test`, or one package with
`pnpm --filter <pkg> exec vitest run <path>`.
- **Pure-logic style.** The suite tests **logic**, not rendered React
(`@testing-library/react` is intentionally not a dependency). When the logic
you're adding lives inside a component, **extract it into a pure, exported
helper** and test that — e.g. `view-switcher-model.ts` (switcher show/segmented/
dropdown rules), `markdown-preview/menu.ts` (context-menu enablement), and
`markdown-preview/match.ts` (file matching) were factored out of their
components precisely so the rules are unit-testable. Components stay thin glue.
- **Host state** can be driven directly: set up `store` (the valtio proxy) and
the relevant registries in `beforeEach`, exercise the service, assert on the
store — see `editor-service.test.ts` and `editor-registry.test.ts`.
- **Cover the contract and the edges**, not just the happy path: fallbacks,
no-ops/guards, disabled states, and "hidden/absent" cases (the editor
view-switching tests pin the priority tie-break, stal