Summary
ci.yml treats pytest exit code 5 ("no tests collected") as success. That was a scaffold-era guard; now that 32 tests exist, a broken test-collection would turn CI green instead of failing.
Why it matters
The whole point of CI is to catch breakage. A silent "no tests ran → pass" defeats that — e.g. an import error in a conftest or a packaging change that hides tests/ would go unnoticed.
Current behavior
.github/workflows/ci.yml:43-51:
set +e
pytest
code=$?
if [ "$code" -eq 5 ]; then
echo "::notice::pytest collected no tests (exit 5) — treating as success"
exit 0
fi
exit $code
Proposed change
- Remove the exit-5 tolerance (fail the job if zero tests are collected).
- Add coverage reporting (
pytest --cov), optionally with a minimum threshold.
- Consider adding a Windows runner to the matrix — the tool explicitly targets Windows users (the CLI has Windows-console handling) yet CI is Linux-only.
Acceptance criteria
Identified during a code review of the repo.
Summary
ci.ymltreats pytest exit code 5 ("no tests collected") as success. That was a scaffold-era guard; now that 32 tests exist, a broken test-collection would turn CI green instead of failing.Why it matters
The whole point of CI is to catch breakage. A silent "no tests ran → pass" defeats that — e.g. an import error in a conftest or a packaging change that hides
tests/would go unnoticed.Current behavior
.github/workflows/ci.yml:43-51:Proposed change
pytest --cov), optionally with a minimum threshold.Acceptance criteria
Identified during a code review of the repo.