D012 - What a package writer still needs, and what it does not
Writing a package means emitting fourteen entries. Reading was enough to establish which fourteen; it is not enough to fill them. Characterised by looking at what each holds - sizes, how much is printable, and whether it announces itself:
| entry | what it is | how known |
|---|---|---|
0x10, 0x20 |
the key material | used by the reader already |
0x200 |
a filename table | 92% printable, names the icon |
0x1000 |
param.sfo |
begins with the PSF magic; shadPS4 has a reader |
0x1001 |
a playgo chunk | begins plgo; shadPS4 has a reader |
0x1003 |
XML | UTF-8 BOM then <?xml version |
0x1200 |
a PNG | the icon entry 0x200 names |
0x409 |
zeros | 8192 of them in the sample |
0x1, 0x80, 0x100,
0x400, 0x401, 0x1002 |
unknown | sizes and entropy only |
So the gap is narrower than "a package is opaque" and wider than
"just write the bytes". Six entries have no established meaning, and two
of those (0x400, 0x401) are high-entropy and
plausibly digest tables - plausibly, which is not a thing to build
on.
The lawful route is a writer, and there is not one here
Identifying a PNG by its magic is reading a filename. Working out
what belongs in 0x400 by staring at 1024 bytes of entropy
is reverse-engineering, and it produces exactly the convergence the
provenance rule exists to prevent.
This is the position mkself was in before an open-source
writer turned up in the emulator kit and supplied every block a
reader never looks at. The same thing is needed here: a packaging tool
whose source states what it puts in those entries.
LibOrbisPkg is named by the extractor this project already
cites, and is not in the local kit.
Recorded as a blocked item rather than a hard one. The distinction matters: more effort against the current sources does not close it, and the honest next step is finding a citable writer rather than trying harder.
Status: decided - writing is scoped and blocked on a source, not on work.