D093 - The audit reports what kind of container it just agreed with, before it reports how many rows agreed

Status: decided. 2026-09-09.

selfish audit now says what kind of container it read, above the row count, because the count is meaningless without it and the count is what a reader remembers.

D092 recorded a confirmation that had to be reversed: a container matched all nine fixed header rows, and the container was fake. A file written from this table agrees with this table, so the match was a round trip. The value that would have said so - ex_info.ptype - was in the same log, thirty lines away, and nobody looked because the number at the top already read as an answer.

The tool made that easy. audit returned a generation and a list of row verdicts, and the CLI printed confirmed 9 of 9. Nothing in either said which of the two things a reader was holding.

Worse, the crate already knew. a_container_this_crate_builds_confirms_every_fixed_row_of_the_table has been in the test suite since D084, and its own comment calls the thing it asserts a round trip. The knowledge was written down in a place that runs on every commit and never reaches a person reading output.

What changed

Audit carries a declared: Declared, read at the offset the table pins for ex_info.ptype:

Declared::is_round_trip() is true only for fake. Declared::caveat() returns the sentence to print. The CLI prints both above the row count, because a caveat under a headline is a footnote and a footnote is what failed here.

Reported, not tested - and this is the whole of it

The obvious implementation is to decide "did I find ex_info" by checking whether the value is a ptype the table names, and report not located otherwise. That is what obSCEne's probe does, and it is why nine containers in one sweep came back ex_info | not located: the table names fake, npdrm, system and secure types from a PS4 writer, so an unrecognised value is at least as likely to mean this table does not know this kind as the tail is elsewhere. Folding those two into one verdict destroys the distinction and reads as a fact about the format rather than about the reader.

So the value is returned whatever it is, and known: None is a separate, quieter statement. A caller can see ptype 0x1234, not a kind this table names and decide for itself; it cannot see that through a boolean.

is_round_trip() is deliberately false for an unknown value. Not known to be fake is not known to be genuine, and a helper that returned "genuine" for anything it failed to recognise would rebuild the original mistake behind a nicer name. The caveat says so in words instead.

What it does not do

It does not refuse, warn on stderr, or change an exit code. An audit of a fake container is a completely legitimate thing to run - it is principle 4's round trip, and the test above depends on it. The defect was never that the round trip happened; it was that the output did not say which one it was. A tool that made this an error would be answering a different complaint.