Rules
Sixteen rules in five families, each with its measured status.
Every rule runs on every check. How far to trust a finding explains which ones
you see by default. None fails the build until you say so.
| Rule | Family | Tier | True / decided |
|---|---|---|---|
| absence-anchor | Weak tests | advisory | 16 / 20 |
| fail-closed-setup | Merge gate | advisory | 19 / 19 |
| dead-skip | Merge gate | advisory | 18 / 18 |
| duplicate-test | Unused tests | advisory | 15 / 18 |
| gate-truth | Merge gate | experimental | 12 / 18 |
| unused-mock | Unused tests | experimental | none |
| flake-candidate | Flaky | experimental | 3 / 6 |
| untested-hotspot | Health | experimental | 5 / 16 |
| weak-assertion | Weak tests | hidden | 12 / 34 |
| handler-drift | Weak tests | hidden | none |
| data-layer-mock | Weak tests | hidden | none |
| generator-walk | Weak tests | hidden | none |
| redundant-test | Unused tests | hidden | 0 / 12 |
| orphan-test | Unused tests | hidden | 4 / 14 |
| stale-snapshot | Unused tests | hidden | none |
| flake-observed | Flaky | hidden | 39 / 52 |
Weak tests
Would this test notice if the code were wrong? absence-anchor,
weak-assertion, handler-drift,
data-layer-mock, generator-walk.
spirolo audit runs only these.
Merge gate
Does a broken test actually block the merge? fail-closed-setup,
dead-skip, gate-truth. spirolo gate runs only
these.
Unused tests
Which tests add nothing? duplicate-test,
redundant-test, unused-mock,
orphan-test, stale-snapshot. spirolo hygiene runs only these. They accept warn at most: error is
a config error.
Flaky
Which tests can pass on one run and fail on the next?
flake-candidate reads the code;
flake-observed reads your recorded runs. spirolo flake runs only
these.
Health
Where does a new test pay first? untested-hotspot ranks source modules by churn, complexity and test weakness.