feat(engine)!: SKIP stops outranking OK, coverage gets its own axis

A repo's `status` is now the worst JUDGED finding, and `SKIP` only when
nothing was judged. `SKIP` used to rank between `OK` and `WARN`, so one
un-runnable check spoke for every check that ran: 0 ERROR, 0 WARN and a
dozen OK headlined as "skipped". Five repos in org-ops census 05, `okr`
among them with the most OK in the org, reading as unread.

"`SKIP` is never a pass" survives in the half of the rule that carries
it — an unregistered repo, or an empty finding set, still says SKIP,
because there is nothing else to be worst of.

Fixing the status alone would have traded "clean repos look skipped" for
"skipped checks look clean". So `notChecked` rides beside it: in --json,
and as a `· N not checked` qualifier on the summary line. Absent means an
older engine, not zero.

Measured across all 21 local clones from ONE saved sweep, so before and
after come from the same findings rather than two sweeps of a moving org:
343 findings before, 343 after. 8 repos moved, every one SKIP -> OK.
1 ERROR and 3 WARN before, 1 ERROR and 3 WARN after — the counts that
decide whether a repo needs work did not move.

BREAKING: consumers reading `.status` see a changed value domain.

147 -> 154 tests.
This commit is contained in:
Kjell Tore Guttormsen 2026-08-09 21:29:08 +02:00
commit 10ad1254ab
7 changed files with 162 additions and 14 deletions

View file

@ -4,6 +4,45 @@ All notable changes to this project are documented here.
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/);
versioning is [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [0.7.0] — 2026-08-09
### Changed
- **A repo's `status` is the worst *judged* finding, and `SKIP` only when
nothing was judged.** `SKIP` used to rank between `OK` and `WARN`, so one
un-runnable check spoke for every check that ran: a repo with 0 ERROR, 0 WARN
and a dozen `OK` headlined as "skipped". Reported by org-ops against five
repos in census 05 — `ktg-plugin-marketplace`, `okr`,
`playground-design-system`, `portfolio-optimiser`, `commons` — with `okr`
holding the most `OK` in the org and reading as unread. A skip is not a
severity; it is the absence of a verdict, and it cannot be the worst of a set
that contains real ones. "`SKIP` is never a pass" survives intact in the half
of the rule that keeps it: an unregistered repo, or an empty finding set,
still says `SKIP`, because there is nothing else to be worst of.
Measured across all 21 local clones from one saved sweep, so before and after
are computed from the *same* findings rather than from two sweeps of a moving
org: 343 findings before, 343 after, none added or removed. 8 repos moved,
every one `SKIP``OK`. The counts that decide whether a repo needs work did
not move at all — 1 `ERROR` before and after, 3 `WARN` before and after.
Consumers reading `.status` see a changed value domain: a repo that reported
`SKIP` in censuses 0307 may report `OK` from 08 on with an identical finding
set. Raw census files already carry `engineVersion` and `engineCommit`, which
is what distinguishes the two readings.
### Added
- `notChecked` beside `status`, in `--json` and as a `· N not checked` qualifier
on the summary line. Fixing the status alone would have traded "clean repos
look skipped" for "skipped checks look clean", which is the worse direction —
so coverage gets its own axis rather than being folded into the verdict, the
same split the engine already makes between a finding's level and its bucket.
The count is the number of `SKIP` findings, which is what the existing
`NOT CHECKED — these are not passes` section has always listed. An **absent**
`notChecked` means an older engine and prints the pre-0.7.0 line; it is not
zero.
## [0.6.0] — 2026-08-09
### Added