Local Test Review
Answer "is this project tested the way it should be?" with evidence, not
vibes: what exists, what passes, what's missing that matters, and a plan
sized to the risk. This is the thinking layer over run-tests (the
execution layer) — it never runs a suite by hand, and run-tests never designs
strategy.
0. Delegate strategy design if testing-strategy is available
Check the skills available in this session for one named
testing-strategy. If it exists, plan to delegate the strategy design to
it — but invoke it only when you reach section 3, with the inventory (1) and
baseline (2) in hand: strategy designed blind of the project's facts is the
failure mode this ordering exists to prevent. If it's not available, use the
inline fallback in section 3.
Either way, these house rules apply on top of whatever the strategy says:
- Determinism boundary: unit suites must run with no network, no model
calls, no live services — that work belongs in separated integration/eval
tiers, gated behind markers or dedicated commands.
- Escalation ladder: plans should support fast → scoped → full
execution, not only an all-or-nothing suite.
- No invented thresholds: hold the project to a coverage bar only when
it documents one — flag meaningful gaps, don't measure green suites
against imaginary percentages.
- Tests are never disabled to get to green, and a repo that declares
"no tests by design" keeps that status unless the user decides otherwise —
when that status is declared, do not invent testing gaps or recommend a
new suite unless the user explicitly opts in.
1. Inventory the current testing state
Establish the facts the same way run-tests does (its detection steps and
references/detection.md apply):
- Read the project's own instructions —
AGENTS.md / CLAUDE.md,
.cursor/rules/*.mdc, CONTRIBUTING.md, CI workflows — for the intended
testing story.
- Map what actually exists: which tiers (unit / integration / E2E / evals),
which frameworks, where the tests live, roughly how much there is per
tier, and which tiers need infrastructure (databases, Docker, env vars).
- Note the discrepancies both ways: documented-but-missing (aspirational
docs) and present-but-undocumented.
- Short-circuit for intentional testlessness. If the project declares
"no tests by design", the review ends here: report the policy and the
documented alternative validation, and skip sections 2–4 entirely — no
pyramid, no gap ranking, no add-tests plan — unless the user explicitly
opts in to reconsidering the policy (some repos require an RFC first).
2. Baseline with run-tests
If a runnable suite exists, invoke the run-tests skill to establish what
passes today — a red baseline changes every recommendation that follows
(fix before extend). Skip the baseline only when the suite needs
infrastructure the user hasn't agreed to start; report that it was skipped
and why.
3. Design the target strategy
Via the delegated skill when available; otherwise:
- Pyramid shape: many fast unit tests, some integration, few E2E — high
confidence at the top, fast feedback at the bottom.
- By component type: API endpoints → unit tests for business logic,
integration for the HTTP layer, contract tests for consumers; data
pipelines → input validation, transformation correctness, idempotency;
frontend → component, interaction, visual regression, accessibility;
infrastructure → smoke, load.
- Cover: business-critical paths, error handling, edge cases, security
boundaries, data integrity. Skip: trivial getters/setters, framework
code, one-off scripts.
Ground the strategy in this project: its component types, its risk
profile, its existing conventions — not a generic ideal.
4. Gap analysis and plan
Compare inventory (1) + baseline (2) against strategy (3):
- Rank gaps by risk: untested business-critical path > untested error
handling > missing tier > style issues. A handful of high-risk gaps
beats an exhaustive inventory of trivial ones.
- For each gap worth closing: what to test, the tier it belongs in, and one
or two concrete example cases — specific enough that an implementer
doesn't have to re-derive the analysis.
- Call out over-testing too: slow, flaky, or redundant tests that cost more
than they catch.
5. Report and hand off
Deliver: current state, baseline result (or why skipped), ranked gaps, the
recommended plan, and any repo-quirk warnings for whoever implements. Writing
the tests is separate work — hand the plan to the user, or into the
gather-requirements → create-plan → execute-plan flow for anything
substantial. Don't start implementing tests inside this skill. For the
implementer, note the relevant how-to skills when installed:
python-testing-patterns for pytest fixtures/mocking/parametrization,
webapp-testing for ad-hoc Playwright verification of web UIs.
1---2name: local-test-review3description: Review a project's testing state against a proper test strategy: inventory what tests exist, baseline what passes, identify the gaps that matter, and produce a prioritized test plan — running the suite via the run-tests skill when one exists. Use this skill whenever the user asks "how should we test this", "review our test coverage", "what tests do we need", "is our testing adequate", "test strategy for X", "assess the tests", or wants a test plan for a feature or repo. If a skill named "testing-strategy" is available in the session, this skill delegates the strategy design to it. DO NOT USE when the user just wants the tests executed — that's run-tests — or wants a specific test written (that's implementation work).4---56# Local Test Review78Answer "is this project tested the way it should be?" with evidence, not9vibes: what exists, what passes, what's missing that matters, and a plan10sized to the risk. This is the thinking layer over **run-tests** (the11execution layer) — it never runs a suite by hand, and run-tests never designs12strategy.1314## 0. Delegate strategy design if testing-strategy is available1516Check the skills available in this session for one named17**`testing-strategy`**. If it exists, plan to delegate the strategy design to18it — but invoke it only when you reach section 3, with the inventory (1) and19baseline (2) in hand: strategy designed blind of the project's facts is the20failure mode this ordering exists to prevent. If it's not available, use the21inline fallback in section 3.2223Either way, these house rules apply on top of whatever the strategy says:2425- **Determinism boundary**: unit suites must run with no network, no model26 calls, no live services — that work belongs in separated integration/eval27 tiers, gated behind markers or dedicated commands.28- **Escalation ladder**: plans should support fast → scoped → full29 execution, not only an all-or-nothing suite.30- **No invented thresholds**: hold the project to a coverage bar only when31 it documents one — flag meaningful gaps, don't measure green suites32 against imaginary percentages.33- **Tests are never disabled to get to green**, and a repo that declares34 "no tests by design" keeps that status unless the user decides otherwise —35 when that status is declared, do not invent testing gaps or recommend a36 new suite unless the user explicitly opts in.3738## 1. Inventory the current testing state3940Establish the facts the same way run-tests does (its detection steps and41[`references/detection.md`](../run-tests/references/detection.md) apply):4243- Read the project's own instructions — `AGENTS.md` / `CLAUDE.md`,44 `.cursor/rules/*.mdc`, `CONTRIBUTING.md`, CI workflows — for the intended45 testing story.46- Map what actually exists: which tiers (unit / integration / E2E / evals),47 which frameworks, where the tests live, roughly how much there is per48 tier, and which tiers need infrastructure (databases, Docker, env vars).49- Note the discrepancies both ways: documented-but-missing (aspirational50 docs) and present-but-undocumented.51- **Short-circuit for intentional testlessness.** If the project declares52 "no tests by design", the review ends here: report the policy and the53 documented alternative validation, and skip sections 2–4 entirely — no54 pyramid, no gap ranking, no add-tests plan — unless the user explicitly55 opts in to reconsidering the policy (some repos require an RFC first).5657## 2. Baseline with run-tests5859If a runnable suite exists, invoke the **run-tests** skill to establish what60passes *today* — a red baseline changes every recommendation that follows61(fix before extend). Skip the baseline only when the suite needs62infrastructure the user hasn't agreed to start; report that it was skipped63and why.6465## 3. Design the target strategy6667Via the delegated skill when available; otherwise:6869- **Pyramid shape**: many fast unit tests, some integration, few E2E — high70 confidence at the top, fast feedback at the bottom.71- **By component type**: API endpoints → unit tests for business logic,72 integration for the HTTP layer, contract tests for consumers; data73 pipelines → input validation, transformation correctness, idempotency;74 frontend → component, interaction, visual regression, accessibility;75 infrastructure → smoke, load.76- **Cover**: business-critical paths, error handling, edge cases, security77 boundaries, data integrity. **Skip**: trivial getters/setters, framework78 code, one-off scripts.7980Ground the strategy in *this* project: its component types, its risk81profile, its existing conventions — not a generic ideal.8283## 4. Gap analysis and plan8485Compare inventory (1) + baseline (2) against strategy (3):8687- Rank gaps by risk: untested business-critical path > untested error88 handling > missing tier > style issues. A handful of high-risk gaps89 beats an exhaustive inventory of trivial ones.90- For each gap worth closing: what to test, the tier it belongs in, and one91 or two concrete example cases — specific enough that an implementer92 doesn't have to re-derive the analysis.93- Call out over-testing too: slow, flaky, or redundant tests that cost more94 than they catch.9596## 5. Report and hand off9798Deliver: current state, baseline result (or why skipped), ranked gaps, the99recommended plan, and any repo-quirk warnings for whoever implements. Writing100the tests is separate work — hand the plan to the user, or into the101gather-requirements → create-plan → execute-plan flow for anything102substantial. Don't start implementing tests inside this skill. For the103implementer, note the relevant how-to skills when installed:104**python-testing-patterns** for pytest fixtures/mocking/parametrization,105**webapp-testing** for ad-hoc Playwright verification of web UIs.