Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Evaluates test suites for coverage gaps, TDD/BDD compliance, and anti-patterns. Use when auditing test quality or before a major release.
.claude/skills/athola-test-review/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-20 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 70% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 189% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 57% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 80% | 0% |
test-review:languages-detected))test-review:coverage-inventoried))test-review:scenario-quality))test-review:gap-remediation))test-review:evidence-logged))Evaluate and improve test suites with TDD/BDD rigor.
bash/test-review
Verification: Run pytest -v to verify tests pass.
test-review:languages-detectedtest-review:coverage-inventoriedtest-review:scenario-qualitytest-review:invariant-preservationtest-review:gap-remediationtest-review:evidence-loggedtest-review:findings-verifiedLoad modules as needed based on review depth:
modules/framework-detection.mdmodules/coverage-analysis.mdmodules/scenario-quality.mdmodules/remediation-planning.mdtest-review:languages-detected)Identify testing frameworks and version constraints. → See: modules/framework-detection.md
Quick check:
bashfind . -maxdepth 2 -name "Cargo.toml" -o -name "pyproject.toml" -o -name "package.json" -o -name "go.mod"
Verification: Run the command with --help flag to verify availability.
test-review:coverage-inventoried)Run coverage tools and identify gaps. → See: modules/coverage-analysis.md
Quick check:
bashgit diff --name-only | rg 'tests|spec|feature'
Verification: Run pytest -v to verify tests pass.
test-review:scenario-quality)Evaluate test quality using BDD patterns and assertion checks. → See: modules/scenario-quality.md
Focus on:
test-review:gap-remediation)Create concrete improvement plan with owners and dates. → See: modules/remediation-planning.md
test-review:evidence-logged)Record executed commands, outputs, and recommendations. → See: imbue:proof-of-work
Tests encode design invariants as well as verifying behavior. A test that asserts "module A never imports from module B" encodes a layer boundary. A test that asserts "this function is pure" encodes a concurrency model. These tests are load-bearing in ways that coverage metrics cannot capture.
During review, check:
A test that enforced an architectural boundary, data structure constraint, or API contract should not be deleted without naming the invariant being abandoned and escalating to human judgment.
implementation? If an assertion value changed, ask: did the requirement change, or did the agent change the test to make its code pass? The latter is the single most dangerous form of test tampering.
decision is made (choice of data structure, module boundary, error strategy), there should be at least one test whose failure would signal that the invariant was violated.
Red flag patterns:
| Pattern | Risk | |---------|------| | @pytest.mark.skip added to a passing test | Invariant being silently dropped | | Assertion changed from specific to broad | Constraint being relaxed | | Test renamed to describe new behavior | Old invariant erased from history | | Test deleted "because it tested old code" | Invariant removed without replacement |
When invariant erosion is detected:
Do NOT approve. Flag as a BLOCKING quality issue and present the three options to the human:
implementation to satisfy the invariant
behavior alongside it (accepting inelegance)
the old test AND write a new test encoding the replacement invariant
This is a judgment call that models get wrong far too often. Default to option 1 (preserve) when no human is available.
markdown## Summary [Brief assessment] ## Framework Detection - Languages: [list] | Frameworks: [list] | Versions: [constraints] ## Coverage Analysis - Overall: X% | Critical: X% | Gaps: [list] ## Quality Issues [Q1] [Issue] - Location - Anchor: `verbatim source text at file:line` - Fix ## Remediation Plan 1. [Action] - Owner - Date ## Recommendation Approve / Approve with actions / Block
Verification: Run the command with --help flag to verify availability.
imbue:proof-of-work for reproducible evidence captureimbue:diff-analysis for risk assessmentimbue:structured-output patternstest-review:findings-verified)Every finding must cite a real location and a verbatim anchor. Write findings to .review/findings.json and confirm each citation resolves:
bashpython plugins/imbue/scripts/citation_verifier.py \ --findings .review/findings.json --repo-root .
Drop or label UNVERIFIED any finding the verifier fails (exit 1); only verified findings enter the report. See Skill(imbue:review-core) Step 5 and Skill(imbue:structured-output) for the schema.
Location + verbatim Anchor confirmedby citation_verifier.py (exit 0), or unverified findings were dropped or labeled UNVERIFIED
Tests not discovered Ensure test files match pattern test_*.py or *_test.py. Run pytest --collect-only to verify.
Import errors Check that the module being tested is in PYTHONPATH or install with pip install -e .
Async tests failing Install pytest-asyncio and decorate test functions with @pytest.mark.asyncio
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 24,723 | 6,801 | -72% | 1 | 1 | 0% | 3,927 | 2,342 | -40% | 0 | 0 | — |
case-20 | fail→pass | 31,126 | 13,957 | -55% | 1 | 1 | 0% | 2,908 | 3,824 | +31% | 0 | 0 | — |
case-02 | fail→fail | 29,909 | 6,613 | -78% | 1 | 1 | 0% | 4,233 | 2,440 | -42% | 0 | 0 | — |
case-03 | fail→fail | 25,182 | 7,685 | -69% | 1 | 1 | 0% | 4,211 | 2,499 | -41% | 0 | 0 | — |
case-04 | pass→pass | 12,326 | 6,093 | -51% | 1 | 1 | 0% | 1,778 | 3,092 | +74% | 0 | 0 | — |
case-05 | fail→pass | 11,549 | 7,151 | -38% | 1 | 1 | 0% | 1,969 | 3,343 | +70% | 0 | 0 | — |
case-10 | pass→pass | 9,437 | 4,107 | -56% | 1 | 1 | 0% | 1,508 | 2,676 | +77% | 0 | 0 | — |
case-06 | fail→pass | 6,272 | 3,874 | -38% | 1 | 1 | 0% | 914 | 2,640 | +189% | 0 | 0 | — |
case-07 | pass→pass | 10,243 | 6,897 | -33% | 1 | 1 | 0% | 1,618 | 3,230 | +100% | 0 | 0 | — |
case-08 | fail→pass | 10,453 | 2,202 | -79% | 1 | 1 | 0% | 1,483 | 2,332 | +57% | 0 | 0 | — |
case-09 | fail→pass | 9,723 | 4,201 | -57% | 1 | 1 | 0% | 1,564 | 2,815 | +80% | 0 | 0 | — |
case-11 | pass→pass | 9,248 | 4,968 | -46% | 1 | 1 | 0% | 1,668 | 2,910 | +74% | 0 | 0 | — |
case-12 | fail→pass | 8,763 | 3,428 | -61% | 1 | 1 | 0% | 1,551 | 2,628 | +69% | 0 | 0 | — |
case-13 | fail→pass | 13,158 | 2,744 | -79% | 1 | 1 | 0% | 1,835 | 2,466 | +34% | 0 | 0 | — |
case-14 | fail→pass | 10,671 | 3,086 | -71% | 1 | 1 | 0% | 1,605 | 2,518 | +57% | 0 | 0 | — |
case-15 | fail→pass | 9,713 | 2,260 | -77% | 1 | 1 | 0% | 1,489 | 2,330 | +56% | 0 | 0 | — |
case-16 | fail→pass | 11,809 | 2,809 | -76% | 1 | 1 | 0% | 1,812 | 2,425 | +34% | 0 | 0 | — |
case-17 | pass→pass | 21,033 | 2,236 | -89% | 1 | 1 | 0% | 1,847 | 2,346 | +27% | 0 | 0 | — |
case-18 | pass→pass | 7,882 | 3,528 | -55% | 1 | 1 | 0% | 1,172 | 2,600 | +122% | 0 | 0 | — |
case-19 | pass→pass | 12,356 | 2,237 | -82% | 1 | 1 | 0% | 2,009 | 2,344 | +17% | 0 | 0 | — |
case-21 | fail→pass | 12,043 | 3,568 | -70% | 1 | 1 | 0% | 1,992 | 2,692 | +35% | 0 | 0 | — |
case-22 | pass→pass | 12,863 | 13,706 | +7% | 1 | 1 | 0% | 2,207 | 4,474 | +103% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 19 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.