From b9abe85580b599831733c637bffeca43b51e75b1 Mon Sep 17 00:00:00 2001 From: Jason Ross Date: Mon, 24 Aug 2026 21:58:33 -0500 Subject: [PATCH] Say three where a third test joined, and stop the name claiming to be exact #80 added SafPickerRoundTripTest's rotation case to @FailsOnEmulatorApi37, because a real rotation aborts the framework on android-37.0. Three tests carry the marker now -- two in Media3EngineTest, one in SafPickerRoundTripTest -- and five statements still described two. Four were counts, and wrong: status_check.yml "notAnnotation removes the two tests that do not pass" status_check.yml "The two API 37 tests the gating row above excludes" CLAUDE.md "the gating leg runs the other 55" (59 - 3 = 56) CLAUDE.md "do not read a green run as evidence those two tests pass" The fifth was worse, because it was not a count. The advisory job's header justified its name with an invariant: "It is named for WHAT IT RUNS, deliberately. Both tests drive a full H.264 -> H.265 hardware transcode through Media3Engine" The rotation case drives no transcode. So the comment did not merely miscount -- it asserted a property of the job's contents that had stopped being true, and that property was the entire argument for the name. The name is unchanged, deliberately, and the header now says so instead of implying the question never arose. This is not a required context, it is red on every PR by design, and it is one people have learned to look for; renaming a check costs more than the imprecision does. What replaced the invariant is the honest rule: THE MARKER IS THE DEFINITION, NOT THE NAME -- this job holds the tests that cannot pass on the API 37 emulator image, whatever their subject. Two things stay as they were because they are still true. "the two Media3EngineTest cases that pass here" is correct: that class has four tests and two carry the marker. And the decoder theory is still a claim about the Media3 pair alone, so it now says so rather than being read as covering a rotation failure it has nothing to do with. Nothing about the job's behaviour changes: same name, same continue-on-error, same marker, same selection on both rows. Verified: yaml parses, five jobs, matrix still 33/34/35/36/37. The check to re-run when a test next joins or leaves the marker, which is the event that broke this twice: grep -rn "@FailsOnEmulatorApi37" app/src/androidTest --include='*.kt' | grep -v import | grep -c FailsOn It must equal the number every corrected comment states. It is 3. Closes #81. --- .github/workflows/status_check.yml | 30 +++++++++++++++++++++--------- CLAUDE.md | 20 +++++++++++++------- 2 files changed, 34 insertions(+), 16 deletions(-) diff --git a/.github/workflows/status_check.yml b/.github/workflows/status_check.yml index 5b1aaa7..b6d540a 100644 --- a/.github/workflows/status_check.yml +++ b/.github/workflows/status_check.yml @@ -266,7 +266,7 @@ jobs: # api-level must be "37.0". A bare 37 is not an SDK package and fails # during setup, which cost a run to discover. # - # notAnnotation removes the two tests that do not pass on this image; they + # notAnnotation removes the three tests that do not pass on this image; they # run in the advisory job below, off the same marker so they cannot end up # in both or neither. docs/api-37-emulator-crash.md has the measurements. - label: "37" @@ -367,7 +367,7 @@ jobs: if-no-files-found: ignore # --------------------------------------------------------------------------- - # The two API 37 tests the gating row above excludes, run on their own so they + # The three API 37 tests the gating row above excludes, run on their own so they # stay visible instead of disappearing behind a notAnnotation. # # continue-on-error: it reports, it never blocks. That is the whole reason it is @@ -375,17 +375,29 @@ jobs: # job's `E2E API