Files
solelog/docs/sessions/2026-07-22-per-domain-test-safety-net.md
Bas van Rossem 472fcf82b8
All checks were successful
Build and Push Docker Image / build (push) Successful in 1m48s
docs: finalize domain-test-checklist + session log + roadmap (test safety net, 100% coverage)
2026-07-23 15:40:49 +02:00

4.8 KiB
Raw Permalink Blame History

Session: 2026-07-22 — Per-domain test safety net

Goal

Give every domain across apps/api, apps/worker, and apps/admin a measured, near-100% test safety net (coverage tooling + gap-fill + one lifecycle test per domain), and shake out bugs in the process. Spec: docs/superpowers/specs/2026-07-22-per-domain-test-safety-net-design.md; plan: docs/superpowers/plans/2026-07-22-per-domain-test-safety-net.md. Tracked as Plane epic SL-70.

Approach

Brainstorm → spec → plan → execution. Decisions: full safety net (tooling + gap-fill + lifecycle tests + a living behaviors checklist), all three layers equal depth, bugs logged to Plane with trivial fixes inline. Coverage target: near-100% per domain, no silent gaps (/* c8 ignore */ with a reason for genuinely unreachable/defensive lines).

  • Phase A (inline): coverage tooling (@vitest/coverage-v8 + test:coverage in all three workspaces, all: true, text + json-summary), a resetDb() helper for per-test DB isolation (fixes the accumulate-and-scope fragility; proved on the sessions suite), the Plane epic, and the checklist-doc skeleton with the baseline. Commits 3c79e51, f872daf, 0564fab.
  • Phase B (Workflow, background): 18 domains, strictly sequential — one focused general-purpose agent per domain following the Domain Procedure (measure coverage → fill gaps → add the domain's lifecycle test → near-100% → oxfmt/oxlint → append checklist section → commit). Sequential because all agents share one working tree, one SQLite test DB, and one git index — parallel test-runs/commits would corrupt each other.
  • Phase C (inline): independent verification + synthesis (this session's author, not the agents' self-reports).

Execution — what actually happened

The Workflow hit two transient network outages (not test failures):

  1. First run: A0–A6 (the first 7 API domains) completed and committed; then a sustained SSL certificate hostname mismatch connection error killed A7 and every agent after it (12 failures). The ticktick MCP dropped at the same time — a network blip, not a code problem.
  2. Resumed via Workflow({resumeFromRunId}): A0–A6 replayed from cache, A7 + all clients ran live. 18/19 completed; W2 (Stopwatch) dropped with Connection closed mid-response. The tree was left clean (no partial commit).
  3. W2 finished by a single focused fallback Agent (avoids the resume re-running the already-committed suffix). Commit a30441b.

Phase C then found one file that had fallen between the admin D-domains — apps/admin/src/lib/api.ts (the base fetch/ApiError wrapper, 34% covered; the D-tasks covered the per-resource api/*.ts but not the shared helper). Closed inline mirroring the worker's api.test.ts. Commit test(admin): cover lib/api fetch wrapper.

Outcome

All three workspaces at 100% statements / branches / functions / lines.

Workspace Stmts Branch Funcs Tests (before → after)
api 100 100 100 103 → 175
worker 100 100 100 30 → 79
admin 100 100 100 50 → 129
  • 383 tests total (was 183), all green. Typechecks clean in all three; npx oxlint clean.
  • One lifecycle/integration test per domain where the plan called for it (API integration tests live in apps/api/test/integration/).
  • Zero bugs found. Every added test locks in already-correct behavior — a good signal for a greenfield build that had been TDD'd from the start. Genuinely unreachable lines (?? 0 guards behind NOT NULL DEFAULT 0 columns, CLI direct-run blocks, disabled-control early returns) are /* c8 ignore */'d with reasons, not left silent.
  • Harness improvement: resetDb() gives per-test isolation; new API domain suites use beforeEach(resetDb) so they assert exact counts without dodging other suites' rows.
  • Living docs/reference/domain-test-checklist.md records the guaranteed behaviors per domain — the definition-of-done future work checks against.

Verification (independent of the agents' self-reports)

  • yarn workspace @solelog/{api,worker,admin} test:coverage → 175 / 79 / 129 tests, all green, 100% (api, worker) and 100% (admin after the Phase C gap-closure).
  • Three typechecks clean; npx oxlint exit 0; git status clean.

Tracking / next

  • Plane epic SL-70 → Done. No bug tickets filed (none found).
  • main is well ahead of origin — the maintainer pushes from their terminal (git push origin main).
  • Next per the roadmap: Phase 5 — Polish & deploy (hosting already handled on the maintainer's machine), or the Plane backlog (the "data not visible after reopening browser / relogin" bug looks highest-value).