ci: run source-coverage on mods/** too -- 52 enrolled bytes the gate could never see - #2046
Merged
Merged
Conversation
`src/**` is not the whole enrolled surface. config/arm9/overlays/ov002/delinks.txt:1837 enrolls mods/Player_ScaleByCharFactor.c -- 52 bytes, and it is the only non-src/ path among the 10,973 ranges enrolled tree-wide. Measured: deleting that file makes source_coverage.py exit 1 with the correct -52 delta and correct blame. But neither path filter matched `mods/`, so a PR touching only mods/ never ran the job at all -- the loss would have landed with nothing red. Same defect class as the nearmiss/** filter gap closed in #2040: a missing check reads exactly like a passing one.
✅ PR validation — Passednoverify: no source/build-data changes in this PR Each changed |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two lines of YAML. The reason it is worth a PR is in the measurement, not the diff.
The gap
source-coverage.ymlfilters onsrc/**. Butsrc/**is not the enrolled surface —the enrolled surface is whatever
config/**/delinks.txtnames, and one of those namesis not under
src/:52 bytes, and the only non-
src/path among the 10,973 ranges enrolledtree-wide. A PR touching only
mods/matched neitherpaths:block, so the job neverran. Not "ran and passed" — never ran. Same shape as the
nearmiss/**gap closed in#2040, and the reason it is worth chasing both: a check that does not run is rendered
identically to one that passed.
The tool itself is fine — I checked before assuming
I did not want to file a filter fix on a gate I had never seen fail, so I measured the
gate's failure branch first, at
859623fc0, in a wired worktree. Baseline: 2,067,148 Bsource-built across 10,973 ranges,
rombuild106/106.Deleting
mods/Player_ScaleByCharFactor.c:Correct delta, correct blame. The tool was never the problem; only its trigger was.
Why I care about this particular gate
The same probe answered a question I had not seen answered anywhere: what actually
notices when dsd stops compiling a range from source and hands it back to the retail
cartridge? The answer is that it depends on how it happens, and only one gate covers
the dangerous mode:
rombuildsource_coveragecompleteremovedThe third row is the one to look at. dsd refills from the cartridge on enrollment,
never on match outcome — so un-enrolling a range produces a byte-perfect ROM. Every
byte gate green, 64 bytes silently back on the cartridge, and
source_coverageis theonly thing in the tree that says so. That is exactly the row this PR was about to let
through unnoticed for
mods/.Full battery, 11 mutations, correct on all 11 — including a re-partition that hid a
4-byte hole (caught, −4), a re-partition with identical bytes (correctly silent), a
misspelled
complete(−64), an un-enrolled promoted TU (−1,472), and the realpromotion commit
5c0f8b85a(no false alarm).Stated gaps
config_tu/is never scanned.module_of()has explicitconfig_tu/handling thatwas never wired to the scanner. 0 enrolled bytes there today, so this is latent, not
live — filing separately rather than widening this PR.
src/files are unenumerated by any delinks entry. They contribute 0 B, so this isa coverage-ceiling gap, not a refill gap.
completein place gives exit 0 here — and 105/106 fromrombuild, which is thecorrect division of labour between the two gates.
No compiled source touched, so there is no byte claim here and none is made. Pre-push
ran green:
port_refcheck405/405,check_src_tu90/90,duplicate-sources11199stems none doubled.