4.8 KiB
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:coveragein all three workspaces,all: true, text + json-summary), aresetDb()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. Commits3c79e51,f872daf,0564fab. - Phase B (Workflow, background): 18 domains, strictly sequential — one focused
general-purposeagent 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):
- First run: A0–A6 (the first 7 API domains) completed and committed; then a sustained
SSL certificate hostname mismatchconnection 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. - Resumed via
Workflow({resumeFromRunId}): A0–A6 replayed from cache, A7 + all clients ran live. 18/19 completed; W2 (Stopwatch) dropped withConnection closed mid-response. The tree was left clean (no partial commit). - W2 finished by a single focused fallback
Agent(avoids the resume re-running the already-committed suffix). Commita30441b.
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 oxlintclean. - 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
(
?? 0guards behindNOT NULL DEFAULT 0columns, 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 usebeforeEach(resetDb)so they assert exact counts without dodging other suites' rows. - Living
docs/reference/domain-test-checklist.mdrecords 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 oxlintexit 0;git statusclean.
Tracking / next
- Plane epic SL-70 → Done. No bug tickets filed (none found).
mainis 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).