D286 - container-structure: a raw measured dump of a real gen-5 container

048-selfaudit had two checks: confirm-table (do the nine fixed header constants still hold at this generation) and metadata-differential (what does the installed-title population look like). Neither reports the thing a packager most needs - the shape of a real current-generation container - so building a gen-5 package means inferring header_size, the segment table and the ex_info/npdrm blocks from the previous generation and hoping the layout held.

Added 048-selfaudit/container-structure. It locates a real container the same way confirm-table does (vendor roots first, /app0 last), reads a 4 KiB window of it, and reports as raw measured values:

It does not decode. What a segment flag bit or an ex_info.ptype value means lives in selfish's self-format.tsv; re-encoding it here would give a shared judgement a second home, which is the thing that moved the format tables to selfish in the first place (D200/D201). So the report carries the number and the reader turns it back into meaning against that one table. This is the project's own division applied to a new datum: a measurement stays with the measurer, the format is shared.

Two honest limits are built in, not papered over:

What it cannot reach, by construction, belongs elsewhere. From an installed title's vantage the PFS superblock, the pkg entry table and the key/EKPFS blobs are gone - consumed at install - so they are not on-console-probeable and are confirmed instead by selfish against a real .pkg as an oracle on a dev machine. That is a boundary of the payload vantage, not a gap in this check.

Provenance OBS_FROM_DERIVED, no new imports (it reuses sceKernelOpen/Read/Close/Getdents, already declared and imported by the sibling checks). Verified: selfaudit.c compiles clean in the host and target shapes under the full flag set (-Werror -Wconversion -Wsign-conversion -Wshadow -Wstrict-prototypes). Not run end to end - make host still fails in another session's src/probe/runtime.c on undeclared module-enumeration calls, unrelated to this file. Formatting: the new code exceeds the 88-column limit in places, as the neighbouring metadata-differential code already does; clang-format is not installed in this environment so scripts/format.sh cannot run, and a whole-file reformat would collide with the concurrent edits. Left for a format sweep.