Re-derive the API 37 carrier counts, and correct what #226 left behind #251

Merged
JMR-dev merged 2 commits from docs/api37-carrier-count-drift into main 2026-09-06 19:13:56 +00:00
JMR-dev commented 2026-09-06 16:16:43 +00:00 (Migrated from github.com)

The 2026-09-06 re-check of the instrumented suite, asked after the last e2e-read
ticket landed. Every drifted line it found came from #226 — the read's own last PR.

What the machine says, and it all agrees

70 instrumented tests in 14 classes, 6 carrying @FailsOnEmulatorApi37, gating leg 64.
FAILS_ON_EMULATOR_API37_BASELINE = 6, and the advisory job reports baseline: matches. All five
gating legs green on main; API 34 runs the 70 in 73.3 s.

What the prose said

Four places still said five carriers of 69 — CLAUDE.md (three sites), the marker's own KDoc,
and two comments in status_check.yml.

The gating figure is what hid it. 69 − 5 and 70 − 6 are both 64, so the one number a reader
would check against a run had not moved. CLAUDE.md's instruction to derive these rather than
remember them is what caught it.

Two KDoc claims described a draft rather than the code

aSaveWritesToTheDocumentTheSystemPickerCreated says MP3 was chosen "because the router sends it
to FFmpeg unconditionally at every API level, so the setup cannot depend on the device's codecs"
.
The code converts at the screen's default MP4_H265 / FAST, which reaches canEncode(H265) — so
the negation of the stated reason is true. The format moved during #226 for a different
constraint (the fixture root advertises video/mp4, so MP3's audio/mpeg destination filtered the
root out of the save dialog); the helper's KDoc records that and the test's KDoc was never updated.

That is E1 and E3's failure mode, committed by the wave that found it, so it is written down as
such rather than quietly corrected.

Neither picker test has ever reported on the advisory leg

The marker KDoc said the picker test fails there, behind the rotation test — measured when four
tests carried the marker. With six, the rotation test truncates the run before both picker tests:
runs 34042397320 and 34043502322 each report expected: 6, received: 4, the four being the
three Media3 tests plus the rotation.

So the save test is marked by inheritance, not measurement, and both KDocs now say that instead
of implying it was observed. The baseline comparison is unaffected — failed is only compared on a
run that finished — but the explanation was wrong.

One substantive gap, filed as #250

FixtureDocumentsProvider.deletedDocumentIds() has no callers. #226 proved D4's premise — SAF
hands back a document of exactly zero bytes — but drove only the success path, so
deletePartialOutput against a real DocumentsProvider is still asserted nowhere but
FakeSafProvider under Robolectric.

The accessor is kept with a KDoc naming #250 rather than removed and re-added; #250 carries the
forcing condition (openDestination is protected open for exactly this), the mutation that must
go red, and the cost (another marked picker test, baseline 6 → 7).

Verification

ktlintCheck + detekt + lintDebug + compileDebugAndroidTestKotlin green; pinned actionlint
clean. No production or test code changes — KDoc, comments and docs only — so the instrumented
suite is unchanged and the counts above are the ones CI will report.

The 2026-09-06 re-check of the instrumented suite, asked after the last e2e-read ticket landed. **Every drifted line it found came from #226 — the read's own last PR.** ## What the machine says, and it all agrees 70 instrumented tests in 14 classes, **6** carrying `@FailsOnEmulatorApi37`, gating leg **64**. `FAILS_ON_EMULATOR_API37_BASELINE = 6`, and the advisory job reports `baseline: matches`. All five gating legs green on `main`; API 34 runs the 70 in 73.3 s. ## What the prose said Four places still said **five carriers of 69** — `CLAUDE.md` (three sites), the marker's own KDoc, and two comments in `status_check.yml`. **The gating figure is what hid it.** 69 − 5 and 70 − 6 are both 64, so the one number a reader would check against a run had not moved. CLAUDE.md's instruction to derive these rather than remember them is what caught it. ## Two KDoc claims described a draft rather than the code `aSaveWritesToTheDocumentTheSystemPickerCreated` says MP3 was chosen *"because the router sends it to FFmpeg unconditionally at every API level, so the setup cannot depend on the device's codecs"*. The code converts at the screen's default `MP4_H265` / `FAST`, which reaches `canEncode(H265)` — so the **negation** of the stated reason is true. The format moved during #226 for a different constraint (the fixture root advertises `video/mp4`, so MP3's `audio/mpeg` destination filtered the root out of the save dialog); the helper's KDoc records that and the test's KDoc was never updated. That is **E1 and E3's failure mode, committed by the wave that found it**, so it is written down as such rather than quietly corrected. ## Neither picker test has ever reported on the advisory leg The marker KDoc said the picker test *fails* there, behind the rotation test — measured when four tests carried the marker. With six, the rotation test truncates the run before both picker tests: runs **34042397320** and **34043502322** each report `expected: 6, received: 4`, the four being the three Media3 tests plus the rotation. So the save test is marked by **inheritance, not measurement**, and both KDocs now say that instead of implying it was observed. The baseline comparison is unaffected — `failed` is only compared on a run that finished — but the explanation was wrong. ## One substantive gap, filed as #250 `FixtureDocumentsProvider.deletedDocumentIds()` has **no callers**. #226 proved D4's *premise* — SAF hands back a document of exactly zero bytes — but drove only the success path, so `deletePartialOutput` against a real `DocumentsProvider` is still asserted nowhere but `FakeSafProvider` under Robolectric. The accessor is **kept with a KDoc naming #250** rather than removed and re-added; #250 carries the forcing condition (`openDestination` is `protected open` for exactly this), the mutation that must go red, and the cost (another marked picker test, baseline 6 → 7). ## Verification `ktlintCheck` + `detekt` + `lintDebug` + `compileDebugAndroidTestKotlin` green; pinned `actionlint` clean. No production or test *code* changes — KDoc, comments and docs only — so the instrumented suite is unchanged and the counts above are the ones CI will report.
Sign in to join this conversation.