MAME 0.289 reads intv.zip (exec.bin, src/mame/mattel/intv.cpp:549-552)
and videopac.zip (o2bios.rom, src/mame/philips/odyssey2.cpp:902-905).
The collection held both ROMs loose, INTV_EROM.bin and o2rom.bin, with
the crc32 and sha1 MAME declares. The two archives are built from them
with build_torrentzip and filed beside them: bios/Mattel/Intellivision/
and bios/Philips/Videopac/.
odyssey2 is a clone of videopac declaring the same o2bios.rom, which a
ROM search along the parent chain finds in videopac.zip. Its archive
would be a byte-identical copy, so the profile entry is dropped and the
videopac entry says so.
database.json gains the two archives (the name index also follows the
profiles' current aliases), and recipes/archives.json their recipes,
both rebuild: exact, sources profile:mame and collection.
Manifests: intv.zip and videopac.zip reach mame/bios on every platform
running MAME, and roms/intellivision and roms/videopac on EmuDeck and
RetroDECK. Each platform has 2 to 6 fewer omissions.
Online pipeline at 169776790, generated twice with identical output: database, recipes, install manifests and games index, native exports, README, installer and report excerpts.
recipes/archives.json records each of the 2,222 archives database.json lists, .variants/ copies included: members in order with size, crc32 and sha1, the container sha1, md5 and size, exact when the TorrentZip build gives its bytes (1,790) and canonical otherwise (432), the profile and DAT recipes agreeing on its members, and the platforms or profiles pinning its bytes.
romset_recipes.py --capture writes it (pipeline step 1c), --build and --build-all rebuild from held members, loose first, then another archive, then its own copy, read back and checked before the move into place. Under zlib-ng nothing is claimed exact. A test fails when an archive has no recipe or a member is held nowhere.
The importer keeps the archive names the collection holds and every set whose member list equals an archive the collection keeps under another name (aga.zip is isa_aga), under the collection's name with the upstream one in set. All 113 MAME listxml releases (0.177 to 0.289) are imported, not one in five, and FBNeo is read again at its tip: 2,936 MAME recipes and 145 FBNeo ones, compacted as before.
fccpu20.zip, fcisio1.zip and interpod.zip now have recipes and carry slot ROMs beside their own set. Trimmed, each equals the archive under the newer MAME name, so they are kept as they are until the storage decision.
251 sets that profiles or platforms now name were imported from MAME 0.289 only. Replaying the 22 cached listxml releases adds their older recipes (a2pic 0.220 carries 341-0057.bin) and loses none of the 2148 existing ones.
The recipe snapshot kept only the archives a profile or platform names,
so provenance_report --missing named no set for dumps a public romset
carries (fm7740sx holds the FM77AV40SX DICROM, EXTSUB and KANJI2 ROMs).
The importer now also keeps the sets holding a catalog entry the
collection lacks. Reimported from mame0289 and the cached FBNeo DATs:
MAME 1726 to 2148 recipes, FBNeo 104 to 111, none dropped.
A profile's contents: block and a DAT both state, per set, the members
one emulator version expects. Torrentzip makes archive bytes a function
of that list alone, so a recipe plus the roms reproduces the archive
exactly.
MAME ships its -listxml as a release asset and FBNeo keeps its dats in
its repository, so neither needs a browser. The importer streams the
311 MB document with a sliding window, resolves romof parents in two
passes, drops undumped members, and accumulates versions instead of
replacing them. Identical recipes shared across versions are stored once
with dats listing every version that agrees: 22 MAME versions give 23679
entries for 1726 distinct recipes, 18 MB down to 2.2 MB.
Snapshots live in recipes/ because load_provenance_snapshots reads every
provenance/*.json as a dump catalogue, and a recipe is not one.
1113 archives now reproduce byte for byte, against 175 from profiles
alone, and spec128.zip is rebuilt from roms already held.