Measures an existing test suite's current state on four axes: per-file tier classification (unit / integration / E2E, first match wins), pyramid ratio against whatever target the team already committed to, per-layer flake rate, and defects-caught-per-run-minute ROI per tier, then reduces them to one categorical verdict (Healthy, Needs pruning, Needs refactor, Cannot assess). Reports severity against a target ratio but never prescribes one: choosing the target unit:integration:E2E mix and the rebalancing plan belongs to a pyramid-balancing capability such as `test-pyramid-balancer`. Use when a suite has grown for a year or more without review and someone needs a defensible read on whether it is healthy, over-grown, or structurally inverted before deciding what to delete or rewrite.
70
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Illustrative runs and failure modes for test-suite-health-audit. The five
steps, the severity bands, and the verdict rules live in SKILL.md.
A suite of 50 unit, 100 integration, and 200 E2E files. No CI history available. Team documented a 70/20/10 target.
not assessed, no run history.not assessed, no defect-fix history in the window.A suite of 350 unit, 80 integration, and 30 E2E files against a documented 70/20/10 target, with 200 runs of history.
A flat directory of 60 test files with no tier convention, no runner markers, and imports that mix a database client and a component renderer in the same files.
| Anti-pattern | Why it fails | Fix |
|---|---|---|
| Reporting a ratio without its classification confidence | The reader treats an estimate as a count, and argues about a 3-point delta that is inside the error bar | Print confidence next to the ratio, always |
| Prescribing a new target ratio in the same report | Two capabilities then own the same decision and drift apart | Report distance from the given target; hand the target decision on |
Presenting not assessed as Healthy | A blank flake column reads as a clean one | Emit the literal string not assessed plus the missing input |
Softening Cannot assess into a hedged verdict | The hedge gets dropped when the number is quoted downstream | Abstain, and name the one input that would unlock the audit |
| Treating the flake bands or the 10% ROI cut as standards | They are conventions; presenting them as published thresholds forecloses a legitimate argument | Print the band and the reasoning together, as above |
| Deleting tests on a small ROI gap | The defect proxy under-counts, so a small gap is noise | Flag only an order-of-magnitude gap |
| Auditing a single framework or a single file with whole-suite ratios | Ratios say nothing about one framework's internal architecture | Route to the review whose input is that scope |
| Re-deriving the change-shape distribution inside this audit | The suite and the change stream are different measurements with different inputs | Consume a change-shape classification; do not recompute it |