Skip to main content
Last Updated: 2026-02-24
Purpose: Single source of truth for which tests cover which specs. Use to track gaps and maintain traceability.
See also: SPEC_STATUS_REGISTRY.md (implementation status), TESTING_SETUP_AND_RUN.md (how to run tests), tests/README.md (conventions and @spec).

How to use this matrix

  • RLS: Yes = all tables from spec have a corresponding tests/rls/{core}-{table}.rls.test.ts (or .test.sql). Run npm run check-rls-coverage (or --missing-only, --min-coverage N, --json) to list missing tables and enforce a coverage threshold in CI.
  • Unit: Yes = spec’s hooks/utilities have unit tests in tests/unit/. Partial = some covered.
  • Integration: Yes = at least one workflow test in tests/integration/ exercises the spec. Partial = partial coverage.
  • E2E: Playwright = *.spec.ts run by npm run test:e2e; Vitest = *.test.ts in tests/e2e/ run by Vitest (not Playwright). See E2E conventions below.
  • Backfilled rows: Rows tagged with coverage verification pending were added from the completed spec registry and require follow-up evidence mapping.

E2E conventions

  • Playwright runs only files matching .*\.spec\.(ts|tsx|js|jsx)$ in tests/e2e/ (see playwright.config.ts). All *.test.ts in e2e are excluded from Playwright.
  • Vitest can run *.test.ts under tests/e2e/ (e.g. financial-transactions.test.ts, leave-accruals.test.ts). These are integration-style E2E with Supabase.
  • testIgnore in Playwright currently excludes: ce/activities.test.ts, ce/referral-attribution-flow.test.ts, ce/partner-creation-workflow.test.ts, fa/budget-scenarios.test.ts, fa/rolling-forecasts.test.ts, fa/budget-templates.test.ts. Those run as Vitest or are documented as Vitest-only in this matrix.
  • Per-core E2E scripts: npm run test:e2e:auth, npm run test:e2e:hr, npm run test:e2e:fa, npm run test:e2e:smoke. See TESTING_SETUP_AND_RUN.md.

HR Core (Human Resources)


FA Core (Finance & Accounting)


FW Core (Forms & Workflow)


PF Core (Platform Foundation)


RH Core (Recovery Housing)


GR Core (Governance & Risk)


CL Core (Clinical & EHR)

P0 RLS (CL-05/CL-06): Full RLS coverage for cl_pharmacies, cl_prescriptions, and core medication tables is required before merging CL core changes. Tests must validate tenant isolation and controlled-substance access. npm run check-rls-coverage --missing-only must pass; entries in CL_TESTING_GAPS.md for these tables are blocked until coverage is complete. Gaps summary: See CL_TESTING_GAPS.md for missing RLS tables, unit/integration gaps, and E2E recommendations (consent, progress notes, risk screening, reporting).

Backfilled Completed Specs (Registry Sync)


CE, FM, LO, IT (summary)

  • CE: E2E: tests/e2e/ce/.spec.ts (some in Playwright testIgnore), .test.ts; integration: ce/; unit: ce/. Playwright excludes activities, referral-attribution-flow, partner-creation-workflow.
  • FM: E2E: fleet-vehicle-journey.spec.ts; integration: fm-; unit: fm/; RLS: (FM tables if any in tests/rls).
  • LO: E2E: lo-action-dependencies.spec.ts, lo-action-status.spec.ts, lo-smart-goal-creation.test.ts; integration: lo-; unit: lo/; rls: lo-strategic-goal-smart-isolation.
  • IT: RLS: it-.rls.test.ts (many); integration: it--workflow.test.ts; unit: it/*.

Critical flows (AGENTS.md)


Updating this matrix

  1. When adding a test that covers a spec, add or update the row for that spec and set the @spec CORE-## tag in the test file header.
  2. When completing a spec (spec-complete), ensure its row is updated and required tests exist (RLS for tables, E2E for critical flows). Run generate-test-suite {CORE-##} (dry-run first) to scaffold missing tests.
  3. Run npm run check-rls-coverage (or --missing-only) periodically to list RLS gaps; add missing RLS tests and update the matrix.
  4. See SPEC_WORKFLOW.md for the test step before spec-complete.
  5. CI gating: Add a CI job that runs npm run check-rls-coverage (or npm run check-rls-coverage -- --missing-only) as a gating step and fails the build when coverage checks report missing RLS tests. Use generate-test-suite {CORE-##} (dry-run) to scaffold fixes. Optionally configure a coverage threshold or flag so CI keeps this matrix synchronized with actual test files.