Coverage-Untergrenze 85 % in tools/.coveragerc, gegen beobachtete 87,0 % (4.7.2, schließt #10, eröffnet #51)
CI / verify (push) Successful in 57s
Release / release (push) Successful in 38s

Files changed:
- .gitea/workflows/ci.yml
- CHANGES.md
- EVALS.md
- VERSION
- tools/.coveragerc
This commit is contained in:
2026-09-04 19:19:38 +02:00
parent fe55ad2a9c
commit e00eae08e8
5 changed files with 88 additions and 19 deletions
+12 -8
View File
@@ -249,15 +249,19 @@ created but not yet written reports broken links. That is the scaffold saying it
### How much of the stack the suite reaches
Coverage is measured in CI and reported, never enforced - `pytest --cov`, config in
`tools/.coveragerc`, HTML and XML uploaded as the `coverage-<run id>` artifact of every run.
Coverage is measured in CI - `pytest --cov`, config in `tools/.coveragerc`, HTML and XML
uploaded as the `coverage-<run id>` artifact of every run.
**Fetch that artifact from the run's own page, not from the API**: `upload-artifact@v3` writes
through the older artifact API, and the Actions artifact REST endpoints answer `total_count: 0`
for a run whose artifact the run page offers for download. The upload works; only the listing
does not see it. Do not re-derive this, and do not read the empty list as a failed upload.
There is no `--cov-fail-under`: a threshold is owed (Gitea #10), in its own commit, once the
number has been watched long enough to freeze the state it actually reached.
It is enforced at a floor of **85%** (`fail_under` in `tools/.coveragerc`), which is what a red
suite from this axis means: coverage actually fell, not that a wrapper was added. The floor was
set only after the number had been watched - Gitea #10 held it back for exactly that, and the
two points between 85 and the measured 87.0% are the room the taxonomy below asks for. A
threshold at the measured number goes red on the next thin Typer wrapper, and a threshold that
goes red for a non-reason gets lowered rather than earned.
**Measured 2026-09-04, stack 4.7.1: 87.0% of 6498 statements across `chemenu/`, 975 tests** -
CI run 163. The first measurement, at stack 1.8.1 on 2026-08-31, was 86.9% of 5105 statements
@@ -284,10 +288,10 @@ low, and three kinds have to be told apart before any of it turns into work:
`fetcher` parameter for exactly that, and the real network line stays uncovered on purpose.
- **Genuine gaps**, where uncovered lines are logic nobody exercises: `provenance_cmd.py`
(44%), `migrate_cmd.py` (65%), `type_resolver.py` (79%). This is the list worth reading, and
the reason step 2 of #10 is not a formality. It is also the list that has not moved while
everything around it did: `provenance_cmd.py` sits where it sat, and `migrate_cmd.py` fell
from 71% because it grew and its new lines arrived untested. A threshold freezes this; it does
not close it.
the only one of the three that has not moved while everything around it did:
`provenance_cmd.py` sits where it sat, and `migrate_cmd.py` fell from 71% because it grew and
its new lines arrived untested. The floor freezes this; it does not close it. Closing it is
Gitea #51.
## Scoring a session