2026-08-30 - Seven placeholders, retired by one file

A complete conformance suite ran on a target console and the capture landed in the sibling repository. 521 checks, 28 sections, and - this is the part that mattered - value-bearing records rather than pass and fail: measure, bytes, size, region, err, sysinfo.

This project keeps its guesses in a field with a controlled vocabulary specifically so they can be counted and retired. That is only worth the ceremony if it actually happens when evidence arrives, so this was the test of the whole arrangement. Six entries now say measured, where none did before. D398 lists what moved.

The encoding was the one worth having. Seven distinct failures provoked across five unrelated call families, every one coming back as the errno under 0x8002_0000. It had been resting on a single value seen on an emulator that could itself have been inferring the same rule - evidence of nothing, and correctly recorded as a hypothesis. GuestError::Busy is gone because of it: the reasoning that gave trylock its own code was right and the number was a placeholder, and the distinction is now made with what the machine uses.

Two things were wrong here in ways no amount of reasoning would have found. Direct memory is five gibibytes and not the eight assumed - not a power of two, so unreachable by guessing. And a buffer smaller than the query structure was being refused, on this project's own argument that a caller passing less wanted a different layout; the console accepts every size from 1 to 256. That refusal was invented here and had been sitting behind a confident comment.

The surprise

sceKernelGetModuleInfo failed on hardware too, with the invalid-argument code - and that is better news than it sounds. D395 refused to invent the structure and said the layout had to be measured. A refusal of the call rather than the request points at a size field the caller fills in first, which is a specific thing to try instead of a layout to guess.

And the run answered a question nobody asked it. sceKernelLoadStartModule returned 0x2001 for a system module - the exact constant elfldr and pldmgr have been dying on, which had been established as invariant to every handoff variation and never identified. It is a module handle. Those two payloads are not failing with an error; they are succeeding and doing something with the result.

What it exposed about the accounting itself

known_by is one value per entry and evidence arrives per claim. GetProcessTime now has a measured unit and an unmeasured origin, and the guard refuses measured alongside an open question - correctly, since the queue would otherwise re-ask something settled.

The temptation was to weaken the guard so the new data fit. That is the failure principle 3 warns about one level up, so instead the entry holds the weakest link and the measurement lives in a cited edge case. It is honest and it undersells the evidence, and whether provenance should attach to a claim rather than a function is raised in D398 rather than decided.

docs/HANDOVER-OBSCENE.md is new: the residue, aimed. Seven asks, each saying what to call and what it unblocks here, because a probe that costs a hardware run deserves to be pointed at something.