D398 - The hardware trip happened, and it moved seven placeholders

measured - 2026-08-30

A complete conformance suite ran on a target console - 521 checks in 28 sections - and the records came back. Most of this project is assumptions written down where they can be counted, which is only worth doing if they are actually retired when evidence arrives. This is that.

The encoding, which was the important one

Seven distinct failures were provoked across five unrelated call families, and every one came back as the same shape: the POSIX errno in the low bits under 0x8002_0000. Not owner, no entry, no such, bad descriptor, denied, busy, invalid.

Before this it rested on one value seen on an emulator - which could itself have been inferring the same rule, so it was evidence of nothing, and was recorded as a hypothesis with a baseline rather than a measurement. Seven values from five families on the machine itself is a different class of thing, and it is what makes GuestError::vendor honest: a code built from it is one somebody watched the target produce.

GuestError::Busy is gone as a result. It existed because a trylock that could not take a lock needed to be spelled differently from a caller error (D256) - the reasoning was right and the value was a placeholder. The distinction is now made with the code the machine uses.

What else it settled

What it did not settle, and one thing it exposed

sceKernelGetModuleInfo failed on hardware too, with the invalid-argument code. That is worth more than it looks: D395 stopped short of inventing the structure and said the layout had to be measured. The refusal says the call was made the wrong way rather than that the platform will not answer - almost certainly a size field the caller has to fill in first - so the next run has something specific to try instead of a layout to guess.

The tension this surfaced, which is not resolved here

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

It is recorded as guest-observed, so the flag holds the weakest link rather than overstating, and the measurement lives in an edge case with its citation. That is honest but it is not right: the entry undersells what hardware established. Whether provenance should attach to a claim rather than to a function is a change to how the whole database is shaped, so it is raised here rather than assumed.