D024 - The NID chain is pinned by a published test vector, not by prose
decided ยท 2026-08-19
nid.py selftest checks a published (name, identifier)
pair:
sceKernelLoadStartModule -> wzvqT4UqKX8
Hashing that published name with the committed suffix and encoding the result reproduces that published identifier. The byte order is little-endian.
Written because the same mistake was made twice in one
session, in both directions. nid.py was first
written little-endian on reasoning. It was then changed to big-endian
because hash-suffix.toml said so in a confident comment
claiming verification against a real executable. It was then changed
back, because a published pair settled it in seconds and matched only
little-endian.
The lesson is not about endianness. Four independent things - suffix, byte order, alphabet, bit packing - are each individually plausible when wrong, and each produces eleven ordinary-looking characters that resolve to nothing. No amount of reading distinguishes a correct chain from a wrong one; one real pair distinguishes all four at once. Prose describing a transform is not evidence about the transform.
It also makes the constant's provenance self-supporting. Anyone can re-derive the check from a published name, a published identifier, and SHA-1, with nothing from a console involved - which is a stronger position than a citation to a forum post, and does not depend on that post still existing.
One pair is enough to catch this class of error and is not enough to be comfortable. A second, from a different library, would turn a strong signal into a redundant one.