The 26-A audit named difficulty's 136-entry BINARIES dict as the exact root cause corpus.py:9
describes (a hand-maintained allowlist over a filesystem that already answers the question), and
exemplar_miner's registered_addrs() as a ~60%-wrong proxy for "is this still work?". T7 onboards
new overlays, so these are migrated FIRST or the new binaries silently miss make report.
- exemplar_miner.py: "still a residual?" now = corpus.stubs(source) membership (the INCLUDE_ASM
invariant, R33), not dp.registered_addrs() (config/dedup.us.yaml — a matched-but-unregistered
fn, e.g. banked inline or matched-but-local, stayed wrongly in the residual pool).
- difficulty.py: the 136-entry hand-dict -> cfg_for(alias), deriving the mechanical layout
(src/<a> + asm/<a>/nonmatchings; main/resident the two specials). Validated against the tree
(src/<a> must exist -> a typo is a clean error, R32), not a hand-list. A newly-onboarded overlay
now needs zero difficulty registration.
- new_overlay.sh: DROPPED difficulty from the sentinel-insertion set (T6 made it obsolete; leaving
it would insert a dead dict entry into a file that no longer has a dict). The other 3 tools
(diff_settings/progress/dup_report) keep their hand-lists — migrated one-at-a-time, byte-gated,
per the audit's cadence; NOT dup_report.BINARIES, which corpus depends on as the binary list.
VERIFIED:
- difficulty derivation is BYTE-EXACT vs the old dict for all 136 aliases (0 mismatches), and
old-tool vs new-tool output is byte-identical (.md AND .csv) on the same tree — the diff vs the
committed docs was pure staleness (committed 2026-06-20, tree at 2026-07-15), NOT my change (R14).
- unknown alias -> clean error, not silent-empty output.
- exemplar_miner runs -> 223 residual stubs (corrected; it's a manual tool, not in make report).
- new_overlay.sh: bash + embedded-python both parse; difficulty absent from the insertion set.