D103 - The hash is confirmed against a second, independent corpus - 281 of 281. And obSCEne will not discover a symbol it has never heard of, ever

Status: derived - by comparison against an implementation written independently of this project.

PS5PCEM publishes its export tables as name and identifier together:

.{ .name = "sceVideoOutSubmitFlip", .function = ..., .expect_id = "U46NwOiJpys" },

1401 pairs, extracted and compared. 281 overlap obSCEne's surface, and all 281 identifiers match what obscene-tool nid computes. None differ.

That is worth more than the ps4libdoc agreement already recorded, for one reason: this corpus is current-generation and covers sceAgc*, which a previous-generation corpus cannot. The suffix and the truncation are now confirmed on both generations by two sources that share no code with each other or with this project.

The other half, which is less comfortable

PS5PCEM implements 1401
obSCEne knows 564 (189 called, 375 censused)
both 281
obSCEne has never heard of 1120

Across all three current-generation emulators the figure is 1444.

Nothing about running obSCEne will ever find those. It resolves by an identifier computed from a name this project supplies: a symbol absent from surface.h is not censused, a symbol absent from platform.h is not imported, and a symbol that is neither cannot appear in any report. It is a blind spot by construction and not a not-yet-encountered case, which is the opposite of how a probe usually fails.

The only thing that closes it is reading export tables and diffing - scripts/ps5-gap.py, now extended to parse the Zig tables alongside the C# attributes. That script is therefore not a convenience. It is the sole mechanism by which this program's surface grows, and a session that runs the suite without running the gap analysis has learned nothing new about what exists.