Every opaque binary this project depends on is listed before it ships
The project SHALL maintain a single inventory naming every binary it ships, executes during a build, or would acquire by enabling a vendor package that its chosen board configuration already sets. Each entry SHALL carry the binary's sha256, its size, and where it came from. The inventory SHALL cover binaries that are not on the current path as well as those that are, marked as such, because the cost of a blob is paid when someone enables it rather than when it is written down.
docs/blob-inventory.md is that inventory. Its MANIFEST holds 68 rows: the five stage-1 files and the two byte ranges embedded in one of them, the nine images this repository commits as evidence, the three source fetches the stage-1 nix files pin, the BootROM, the toolchain and two downloads, and the rest covering the Kendryte Linux SDK and the LilyGO RT-Smart clone by hash or by counted group. docs/evidence/blob-scan.txt records tools/blob-scan.py walking the committed tree and both vendor checkouts on 2026-09-22 — 45 422 files, 3 597 of them binary — and matching every binary to a row, with 54 rows verified against the bytes on disk. The first run of that scanner is also in the file: it found 3 080 vendor binaries and four group counts the hand-compiled inventory had wrong, which is why the inventory is a scanned artifact and not a remembered one.
Someone asks what unauditable code this board runs
- WHEN a reader wants to know what on this device they cannot read the source of
- THEN one document answers it, by name and by hash, and says which entries are on the live boot path and which are dormant in a vendor checkout
A vendor package is enabled that was previously off
- WHEN a defconfig line turns on a package that carries firmware images
- THEN those images are already described in the inventory, so enabling them is a decision rather than a discovery