[Feature] Show whether the ratchets and coverage are actually improving #538

Closed
opened 2026-07-22 11:21:23 +00:00 by brenno · 1 comment
Owner

Problem / motivation

The gates measure whether something works. They do not measure whether they are getting better.

There are now eight or so baselines and ratchets — catchUnderscoreBaseline, rawColorBaseline, debugPrintBaseline, controlByteBaseline, serviceUiImportBaseline, fileSizeBaseline, filePickerPathBaseline, nosemgrepBaseline, plus the coverage floor. Each is allowed to shrink and forbidden to grow. Nothing shows whether any of them has actually shrunk, and a ratchet that stands still for a year is a debt that has been made comfortable.

Coverage has the same shape: 86% is green, but green says nothing about whether the covered lines are the ones that matter. A file can sit at 90% with every branch of its error handling untested.

From the CRA position decision (#519): the borrowed principle is "apply effective regular tests" — effective being the load-bearing word.

Proposed solution

A periodic, advisory report rather than a gate:

  • each ratchet's current value against its value N commits ago, so movement is visible;
  • which baselined entries have been there longest;
  • coverage by directory rather than in one number, so a weak area cannot hide behind a strong one;
  • optionally, a mutation-testing run over one subsystem per report (make mutate exists) — the only measure that says whether a test would catch anything.

Advisory on purpose. Turning "the ratchet has not moved" into a build failure punishes a quiet month.

Marp / file-format impact

None.

Alternatives considered

Tightening each baseline by hand when someone remembers — that is the current state, and it is why this issue exists.

**Problem / motivation** The gates measure whether something *works*. They do not measure whether they are getting better. There are now eight or so baselines and ratchets — `catchUnderscoreBaseline`, `rawColorBaseline`, `debugPrintBaseline`, `controlByteBaseline`, `serviceUiImportBaseline`, `fileSizeBaseline`, `filePickerPathBaseline`, `nosemgrepBaseline`, plus the coverage floor. Each is allowed to shrink and forbidden to grow. Nothing shows whether any of them has *actually* shrunk, and a ratchet that stands still for a year is a debt that has been made comfortable. Coverage has the same shape: 86% is green, but green says nothing about whether the covered lines are the ones that matter. A file can sit at 90% with every branch of its error handling untested. From the CRA position decision (#519): the borrowed principle is "apply effective regular tests" — *effective* being the load-bearing word. **Proposed solution** A periodic, advisory report rather than a gate: - each ratchet's current value against its value N commits ago, so movement is visible; - which baselined entries have been there longest; - coverage by directory rather than in one number, so a weak area cannot hide behind a strong one; - optionally, a mutation-testing run over one subsystem per report (`make mutate` exists) — the only measure that says whether a test would catch anything. Advisory on purpose. Turning "the ratchet has not moved" into a build failure punishes a quiet month. **Marp / file-format impact** None. **Alternatives considered** Tightening each baseline by hand when someone remembers — that is the current state, and it is why this issue exists.
Author
Owner

Part of the solution should also be that this information is available through the project Wiki and regularly is updated (for instance once per month). Also with information how the project evolves (functionality and new code).

Part of the solution should also be that this information is available through the project Wiki and regularly is updated (for instance once per month). Also with information how the project evolves (functionality and new code).
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#538
No description provided.