D141 - Two loose ends closed: the generation had two inferences, and the generated censuses had no gate

Status: derived - one was a live inconsistency, the other a drift waiting to happen.

The header and the section could disagree

D110 recorded that obs_detected_generation() had no callers. What it missed is why that was worse than dead code: sysinfo.c, which draws the GEN 5 (CURRENT) in every report header, ran its own inference from different marker symbols.

previous marker current marker
005-generation sceGnmSubmitCommandBuffers, sceGnmDrawIndex sceAgcCreateShader
sysinfo.c sceGnmSubmitDone sceAgcAcbAcquireMem

Two answers to the one fact the report states in its header, from two sets of symbols, either of which a platform could resolve without the other - while the accessor built to prevent that sat unused.

Now there is one inference. generation.c owns all four markers, obs_detected_generation() computes on demand and caches, and sysinfo.c asks it. On-demand rather than section-order-dependent because the header is drawn before any section runs, so a value cached only by 005-generation would be unknown for the first part of every run - and the fix for that is not a second copy of the reasoning somewhere earlier.

It also gained an answer it could not previously give: 4+5 (both), which is what a loader that stubs everything actually reports.

The censuses could go stale silently

corpus.h and nids.h are generated from data/ and committed. Nothing checked that the committed headers still matched the data - the exact drift counts.py gates one level up, and ungated for the whole life of the corpus.

A stale census is worse than a stale README. It reports an absence for a symbol the corpus no longer claims, and an absence in this program's report means "the platform does not have this" - so the failure mode is a fabricated platform gap rather than a wrong number in prose.

Both generators now take --check, and verify.sh runs them. The check was proved able to say no before being believed when it says yes, which is this project's rule after shipping two gates that could never fail.