make testruns the Go suite with-race -count=1.make test-frontendruns the vitest suite inweb/. Tests are colocated as*.test.ts(x)underweb/src/.- For iterative local work:
cd web && pnpm test:watch. - For a coverage report:
cd web && pnpm test:coverage. - CI runs both
make testandmake test-frontendon every PR. - Frontend changes should ship with vitest specs. Behavior jsdom can't render — virtualization, drag-and-drop, scroll — needs a manual smoke (a passing suite isn't full coverage).
See AGENTS.md and web/AGENTS.md for agent-specific conventions.
Database schema changes must include:
- a SQLite migration under
internal/database/migrations - a Postgres migration under
internal/database/postgres_migrations - matching model/store updates in the same PR so schema and code stay in sync
For an open PR, keep schema work consolidated to at most one new migration file per driver:
- one file under
internal/database/migrations - one file under
internal/database/postgres_migrations
If a PR needs more schema changes before merge, update the draft migration files for that PR instead of adding more migration files. Consolidate before merge.
Do not land schema-only changes. The corresponding model/store files touched by the schema change must be updated in the same PR.