Part of #108 · Phase 1 · Depends on #110, and on the CI issue
Problem
Four different coverage numbers are in circulation. None of them was the number used for planning.
| Source |
Figure |
| Issues #61, #86, #98-#106 all reason from |
"74%" — origin unknown, unreproducible |
coverage_detailed_report.txt:77 (committed, dated 2025-09-04) |
TOTAL 14524 13483 4446 33 -> 5.69% |
Measured at CI scope (pytest tests/unit/) |
TOTAL 14518 13109 4440 75 -> 8.21% (15 passed in 3.50s) |
Measured, full non-real_world suite (coverage combine) |
TOTAL 14518 6089 4440 542 -> 56.14% |
Meanwhile pyproject.toml sets fail_under = 90, a gate the project has never come close to and which is not enforced in CI anyway.
An entire epic (#98) with eight child issues was planned against a number that cannot be reproduced. This is the single clearest example of the project's core problem: measurement was assumed rather than performed.
Caveat on the 56.14% figure
It is a slight underestimate, and the reason matters: the full coverage run reproducibly hangs at 98% in a real AWS retry loop (clustrix/kubernetes/aws_provisioner.py:763,771) — the same landmine as #109. 56.14% comes from combined worker data at that point. A clean 100% figure is not obtainable until #109 lands.
Zero-coverage modules worth noting (from the stale report)
cli_credentials.py (511 stmts, 0.00%), notebook_magic_widget.py (839, 0.00%), cloud_providers/aws.py (304, 0.00%), cloud_providers/azure.py (282, 0.00%), and all four cost_providers/* (0.00%).
Note the overlap with the dead-code issue: some of these are 0% because nothing imports them. Deleting orphaned modules will move the coverage number without writing a single test — which is the correct outcome, and another reason to re-baseline after Phase 4 rather than chase the current denominator.
Acceptance criteria
Verification
pytest tests/ -m "not real_world" --cov=clustrix --cov-report=term -o addopts="" -q | tail -5
Part of #108 · Phase 1 · Depends on #110, and on the CI issue
Problem
Four different coverage numbers are in circulation. None of them was the number used for planning.
coverage_detailed_report.txt:77(committed, dated 2025-09-04)TOTAL 14524 13483 4446 33-> 5.69%pytest tests/unit/)TOTAL 14518 13109 4440 75-> 8.21% (15 passed in 3.50s)coverage combine)TOTAL 14518 6089 4440 542-> 56.14%Meanwhile
pyproject.tomlsetsfail_under = 90, a gate the project has never come close to and which is not enforced in CI anyway.An entire epic (#98) with eight child issues was planned against a number that cannot be reproduced. This is the single clearest example of the project's core problem: measurement was assumed rather than performed.
Caveat on the 56.14% figure
It is a slight underestimate, and the reason matters: the full coverage run reproducibly hangs at 98% in a real AWS retry loop (
clustrix/kubernetes/aws_provisioner.py:763,771) — the same landmine as #109. 56.14% comes from combined worker data at that point. A clean 100% figure is not obtainable until #109 lands.Zero-coverage modules worth noting (from the stale report)
cli_credentials.py(511 stmts, 0.00%),notebook_magic_widget.py(839, 0.00%),cloud_providers/aws.py(304, 0.00%),cloud_providers/azure.py(282, 0.00%), and all fourcost_providers/*(0.00%).Note the overlap with the dead-code issue: some of these are 0% because nothing imports them. Deleting orphaned modules will move the coverage number without writing a single test — which is the correct outcome, and another reason to re-baseline after Phase 4 rather than chase the current denominator.
Acceptance criteria
fail_underis set to something slightly below the real measured value, and enforced in CI (notcontinue-on-error)coverage_detailed_report.txt,coverage.json, andhtmlcov/are removed from the tree and gitignored — coverage is a CI artifact, not a committed fileVerification