diff --git a/CLAUDE.md b/CLAUDE.md index c8282ab..fd473ed 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -130,8 +130,9 @@ install for code that can never run — and on API 37 the full APK does not fit - The `model` package is excluded from `ReturnCount` and `CyclomaticComplexMethod` only. It is the decision layer, where one branch is one documented user-visible outcome and the metric counts answers rather than complexity. Every other rule still applies there. -- **Coverage is reported, not gated** — **84.9% of lines (1971/2321), 63.8% of branches**, - measured 2026-08-26 with `./gradlew :app:jacocoTestReport`, against 454 JVM tests in 67 classes. +- **Coverage is reported, not gated** — **87.1% of lines (2025/2324), 69.1% of branches + (974/1410)**, measured 2026-08-27 with `./gradlew :app:jacocoTestReport`, against 502 JVM tests + in 71 classes. **Every figure this file carried before 2026-08-24 was an artifact, roughly half the real one.** Robolectric loads classes through its own sandbox classloader with no source location, JaCoCo @@ -147,12 +148,19 @@ install for code that can never run — and on API 37 the full APK does not fit disproportionately Robolectric, so each one added denominator and no numerator — the measurement was punishing exactly the tests that were hardest to write. - Two things still hold. A floor needs a baseline that has settled, and this one has not: it moved - 39 points in a single build change on 2026-08-24, then another 16 as the #52 test push and the + Two things still hold. A floor needs a baseline that has settled, and this one has not. It moved + 39 points in a single build change on 2026-08-24; then another 16 as the #52 test push and the fixes it turned up landed — 69.2% -> 84.9% line, 53.2% -> 63.8% branch — while the denominator - grew 2194 -> 2321, because that work added production code of its own. And **re-measure before - quoting**: this entry was written quoting 81.4%, measured four hours earlier, and was already - three points stale by the time it was ready to merge. + grew 2194 -> 2321, because that work added production code of its own; then again on 2026-08-27 + as #132 and #133's ten children landed — 84.9% -> 87.1% line, 63.8% -> **69.1%** branch, 454 -> + 502 tests. **Branch moved four times as far as line that last time**, and that is the shape to + expect from this kind of work rather than a surprise: those children targeted decision code — + enum fallbacks, refusal arms, cursor shapes, a `when` over container rules — where one test + chooses a branch the suite had never taken. Line coverage barely notices; branch coverage is the + whole point. + + And **re-measure before quoting**: this entry was once written quoting 81.4%, measured four hours + earlier, and was already three points stale by the time it was ready to merge. - **Testable code is not done until it is tested.** If a piece is unit testable, it gets unit tests before it counts as done. If it is e2e testable, it gets e2e tests. Both clauses apply — a change that is both needs both.