D028 - The tag derivation is a command that runs on every build, not a paragraph
Status: decided.
The fourteen vendor tag values were worked out by arithmetic on a
reference module's layout: the tables sit end to end, so an offset plus
its size lands on the next offset, and only one assignment of the
fourteen makes every sum come out. That reasoning was written down in
MODULE-FORMAT.md, and prose rots - D023 stated a byte order
as fact that a later test disproved.
obscene-tool derive runs it. mkmodule calls
it on what it has just written, so a constant that drifts from the
layout fails the build rather than producing a module that loads and
resolves nothing.
It needs no reference module, which matters because
the reference is gone - it was a toolchain we consulted and deleted (see
ACKNOWLEDGEMENTS.md). mkmodule lays our own
tables out in the same order, so the same five sums close on our own
output. The last one closes on the segment's own size, which is the only
length that comes from outside the dynamic table - so a self-consistent
chain of wrong values still fails.
What it does not establish:
DT_SCE_SYMENT and DT_SCE_RELAENT both hold
0x18 and neither appears in a sum. Arithmetic cannot
separate them. The command says so rather than leaving the claim
implied.