Starter kit
starter-kit/design/qa/test-report-TEMPLATE.md
One file from the portable method that ships with the book.
starter-kit / design / qa / test-report-TEMPLATE.md
# QA & Test Report — YYYY-MM-DD Run at a **build milestone** (per CLAUDE.md §9). Be honest about what was and was **not** done — never imply coverage that wasn't run. Copy this file to `test-report-<date>.md` and fill it in. ## Method & coverage by test type | Type | Done? | How | Result | |---|---|---|---| | Static (L0) | | linter + type-checker | | | Unit + property (L1) | | | | | Integration (L2) | | disposable DB | | | Browser regression (L3) | | Playwright/Cypress | | | Security — deps/secrets (L4b) | | audit + secret scan | | | Security — penetration | | manual probes: unauth read/write, auth bypass, IDOR, injection, CORS | | | Load | | to expected peak *and* to failure, prod-like config | | | Scenario / data-flow | | enter → propagate → reset → verify fresh | | | Responsive | | phone/tablet/desktop widths | | | Accessibility (WCAG AA) | | axe / keyboard / contrast / ARIA | | | UX heuristic + task-flow | | Nielsen pass; top journeys | | | UI / visual regression | | pixel-diff baseline | | | Cross-browser | | Chromium + Firefox + WebKit | | ## Findings > One block per finding. `SEVERITY-n — title · FIXED/OPEN`, the probe/inputs that showed it, and the fix. ## Production-readiness assessment **Verdict:** <!-- READY / NOT READY for <exposure level>, and why. --> | Criterion | Status ✅/⚠️/❌ | |---|---| | Correctness (invariants, tests) | | | AuthN/AuthZ enforced (tested against a real exposed config) | | | Login hardening (rate-limit, lockout, session policy) | | | Transport security (HTTPS, HttpOnly cookies) | | | Secrets management | | | Backups + tested restore | | | Data-migration integrity | | | Accessibility | | | Cross-browser | | | Load headroom | | | Observability (logs/metrics/health) | | | Real penetration test | | **Blockers before deploy:** <!-- ordered list --> ## The honest status report Four lines. If a report cannot produce all four, it is a summary of feelings. 1. **What ran, with denominators.** Not "tests pass" but "48 of 48 probes across 80 routes." 2. **What did not run, and why.** Named explicitly, never implied by omission. 3. **What is open.** Every gap, with an owner. 4. **What the evidence licenses you to say.** The oracle rung, and therefore the sentence. A layer that could not run is a **failure**, not an omission. A pipeline that reports green while two of its layers could not execute has not earned the word.
Prefer the whole thing at once?
Download the starter kit as a zip. The files here and the files in the zip are the same.