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.
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)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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; noapp/srcchange.Method
Rebuilt the union rather than reusing E8's artifact: a fresh
:app:jacocoTestReportmerged withE8'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
.eclooks exactly like a well-covered codebase: the devicehalf contributes 32 lines in
FFmpegEngine, 24 inMedia3Engine, 15 inConcatEngine, 9 inMainActivity. It applied.Three results worth more than the count
of the JVM's "entirely inside
MediaProbe" and said not to quote a MediaProbe branch figure raw.Rebuilt, both denominators are 1338 and
MediaProbe:321readsmb=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 undermi == 0 && mb > 0(19 brancheson 18 lines) and not under
ci > 0, which admits partially-executed signature lines and gives139. Different metrics, not drift. Stated in E9 so the next read does not "correct" a right figure.
getForegroundInfolines 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.mdis being rewritten by #261; E9 saysso, 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 isVORBIS— that is #254, open as #261. The set is 21the 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 — noapp/srcchange.
🤖 Generated with Claude Code