Read the union's branch tier, and decide 12 of its 22 sites (E9) #267

Merged
JMR-dev merged 2 commits from docs/e9-union-branch-tier into main 2026-09-07 17:06:19 +00:00
JMR-dev commented 2026-09-07 17:01:40 +00:00 (Migrated from github.com)

E8 classified the 32 lines neither suite executes and stopped there. It never asked which arms
neither suite takes on lines both suites run — and that tier is where what is left actually lives.

Adds E9 to docs/e2e-read-findings.md. Docs only; no app/src change.

Method

Rebuilt the union rather than reusing E8's artifact: a fresh :app:jacocoTestReport merged with
E8's own API 34 .ec, against one set of current class files. Union 99.0% line (2352/2375),
90.1% branch (1206/1338)
; JVM alone 94.6% / 87.6%.

Controls, because a silently-rejected .ec looks exactly like a well-covered codebase: the device
half contributes 32 lines in FFmpegEngine, 24 in Media3Engine, 15 in ConcatEngine, 9 in
MainActivity. It applied.

Three results worth more than the count

  • E8's denominator artefact is retired. E8 warned the union's branch denominator ran 16 ahead
    of the JVM's "entirely inside MediaProbe" and said not to quote a MediaProbe branch figure raw.
    Rebuilt, both denominators are 1338 and MediaProbe:321 reads mb=0 cb=4 — fully covered.
    That one line accounts for a 16-branch difference and the denominators now agree; the other lines were not enumerated, so read it as consistent with the gap sitting there rather than proof. Either way it is a property of how the report was built, not of the code.
  • CLAUDE.md's "18" is not stale. It reproduces exactly under mi == 0 && mb > 0 (19 branches
    on 18 lines) and not under ci > 0, which admits partially-executed signature lines and gives
    139. Different metrics, not drift. Stated in E9 so the next read does not "correct" a right figure.
  • Tier 1 is 22, down from 32. #252 closed the ten getForegroundInfo lines and added none.

The tier

23 arms on 22 lines. 12 sites are decided here — compiler codegen, an F4/F6/F10 exemption
already on record, or a thread race. They are recorded inside E9 rather than as new F-entries,
following E8's precedent and because coverage-read-findings.md is being rewritten by #261; E9 says
so, so a JVM-only read looks here before re-filing them.

The other 10 sites are filed as #262–#266, each naming the mutation that must go red, or saying
the read is the ticket where it cannot yet.

In flight

FFmpegCommandBuilder:183's missed arm is VORBIS — that is #254, open as #261. The set is 21
the day it merges
, and E9 says to re-derive rather than edit the sentence.

Gate

Local gate green: assembleDebug, testDebugUnitTest, compileDebugAndroidTestKotlin,
ktlintCheck, detekt, lintDebug. The instrumented sweep is correctly skipped — no app/src
change.

🤖 Generated with Claude Code

E8 classified the 32 lines neither suite executes and stopped there. It never asked which **arms** neither suite takes on lines both suites run — and that tier is where what is left actually lives. Adds **E9** to `docs/e2e-read-findings.md`. Docs only; no `app/src` change. ## Method Rebuilt the union rather than reusing E8's artifact: a fresh `:app:jacocoTestReport` merged with E8's own API 34 `.ec`, against one set of current class files. Union **99.0% line (2352/2375), 90.1% branch (1206/1338)**; JVM alone 94.6% / 87.6%. Controls, because a silently-rejected `.ec` looks exactly like a well-covered codebase: the device half contributes 32 lines in `FFmpegEngine`, 24 in `Media3Engine`, 15 in `ConcatEngine`, 9 in `MainActivity`. It applied. ## Three results worth more than the count - **E8's denominator artefact is retired.** E8 warned the union's branch denominator ran 16 ahead of the JVM's "entirely inside `MediaProbe`" and said not to quote a MediaProbe branch figure raw. Rebuilt, both denominators are **1338** and `MediaProbe:321` reads `mb=0 cb=4` — fully covered. That one line accounts for a 16-branch difference and the denominators now agree; the other lines were not enumerated, so read it as consistent with the gap sitting there rather than proof. Either way it is a property of how the report was built, not of the code. - **`CLAUDE.md`'s "18" is not stale.** It reproduces exactly under `mi == 0 && mb > 0` (19 branches on 18 lines) and not under `ci > 0`, which admits partially-executed signature lines and gives 139. Different metrics, not drift. Stated in E9 so the next read does not "correct" a right figure. - **Tier 1 is 22, down from 32.** #252 closed the ten `getForegroundInfo` lines and added none. ## The tier **23 arms on 22 lines.** 12 sites are **decided here** — compiler codegen, an F4/F6/F10 exemption already on record, or a thread race. They are recorded inside E9 rather than as new F-entries, following E8's precedent and because `coverage-read-findings.md` is being rewritten by #261; E9 says so, so a JVM-only read looks here before re-filing them. The other 10 sites are filed as **#262–#266**, each naming the mutation that must go red, or saying the read *is* the ticket where it cannot yet. ## In flight `FFmpegCommandBuilder:183`'s missed arm is `VORBIS` — that is #254, open as #261. **The set is 21 the day it merges**, and E9 says to re-derive rather than edit the sentence. ## Gate Local gate green: `assembleDebug`, `testDebugUnitTest`, `compileDebugAndroidTestKotlin`, `ktlintCheck`, `detekt`, `lintDebug`. The instrumented sweep is correctly skipped — no `app/src` change. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign in to join this conversation.