The excerpt quotes verify over the whole collection. The PR workflow
restores none of the release assets, so the run there printed other
counts and failed on every push since the engine batch. The test now
names how many assets are absent and skips.
Step 5 builds the --required-only, --no-game-data, --region, --target
and --system packs of every platform in memory and compares their paths
with verify run under the same narrowing. verify_platform gains
required_only, generate_pack a record mode. A run samples three regions,
targets and systems per platform (155 packs, about 3 minutes);
--full-narrowings compares all 1,150 (25 minutes). A test fails when
_narrowings() gains a dimension that is neither compared nor exempted.
The published platform contract validates against platform.schema.json, which does not carry the resolver's per-entry system key. The two inheritance tests and the alias call check read the new entry shape, and the testing guide lists test_maker_folder_names.
set5v0.972.ic507 (Katana Set5 v0.972, crc32 1a2f2a91, sha1 08df891f) entered MAME's dcdev set in 0.260. It comes from the archive.org item MAME_0.278_ROMs_non-merged_2025, whose dcdev.zip is the TorrentZip of the 0.260+ recipe. It becomes the primary dcdev.zip, and the five-member pre-0.260 set is kept as a variant.
Demul's dc set (11 rows of demul.exe's table) is built with build_torrentzip from members checked against the table's crc32 and sha1, in bios/Other/demul/. Only Demul reads dc.zip, so only its manifest entries move.
Demul 0.7 reads 44 NAOMI BIOS rows from naomi.zip, the HOTD2, F355 and Airline Pilots BIOS among them. No copy held them all. The set is built with build_torrentzip from members already in the collection, each checked against the crc32 and sha1 of demul.exe's table, and kept in bios/Other/demul/. Batocera, KNULLI and RetroBat place it at bios/naomi.zip, the file MAME cores there also open, so it carries the nine MAME members the Demul table does not list.
The resolver left another emulator's own copy out of the member and superset ranking, so Flycast and the MAME cores keep the copies they were served.
Demul 0.7 build 251220 (demul.exe sha1 e326ae66, the build RetroBat and Batocera 43.1 ship) loads its BIOS from MAME-style sets named in seven tables in the executable: dc, naomi, naomi2, segasp, awbios, hikaru, mie and segadimm, each member checked by size, crc32 and sha1. The profile lists every set with its members and cites the tables and the loader by address. dc_boot.bin, dc_flash.bin, naomigd.zip, hod2bios.zip, f355bios.zip, f355dlx.zip, airlbios.zip and jvs13551.zip are not read by this build and leave the profile.
Fourteen lists gain the data trees their cores read. AmberELEC and EmuELEC fetch the 192 blueMSX machine configs from the tree instead of holding them back, and RetroPie drops the blueMSX tree its lr-bluemsx module installs.
A platform pack carried only the trees its own systems declared, so for_platforms reached RetroArch, Lakka and RetroPie alone and every other platform running blueMSX, FBNeo or Dolphin got no tree. The pack, the install list and the pipeline's tree members now add the trees of the libretro cores the platform runs, below the system directory and build folder the core reads, unless the platform installs or never opens them. A platform entry the manifest resolved into a carried tree becomes that tree's member, which the installer can fetch: AmberELEC and EmuELEC no longer hold 192 blueMSX machine configs back. stonesoup reads its tree beside the content and pcee2 compiles its resources in, so neither tree reaches a BIOS pack.
Each registered platform running a core that reads a data directory was checked against its own image at the revision its platform YAML pins. A platform that installs the tree goes in installed_on, one that never opens it in unread_on, and one that leaves it to the user joins for_platforms. The install steps are cited beside each _data_dirs.yml entry.
segadimm.zip holds fpr23905.ic36 and fpr23905c.ic36 under the same crc32, and segasp.zip four fpr-*.ic72 images. Ranked by crc32 alone, a copy missing some of them tied with the full set and the index order chose it. A crc32 that two declared members share now also requires the member name.
AmberELEC's nec-pc-88 declares DISK.ROM with an empty md5. QUASI88 reads
that name as n88sub.rom, the 2 KB PC-88 disk ROM (libretro.c:1085), but
the name step served the 16 KB MSX disk ROM, the only primary of that
name. The quasi88 alias never reached by_name, which refuses an alias a
primary already carries.
load_platform_config now writes each entry's system as platform_system.
A platform entry with no hash and no owning emulator, whose system id
names a maker, takes no name candidate filed under another maker, in
the name step and in the hash_mismatch step after it. When nothing is
left, by_shadowed_alias, the profile aliases by_name refuses, answers
within the system's maker folder. names_manufacturer and BUCKET_FOLDERS
move to common.py, and generate_site imports them.
Across every registered platform the only resolution that moves is
AmberELEC nec-pc-88 DISK.ROM, from bios/Microsoft/MSX/DISK.ROM to
bios/NEC/PC-88/N88SUB.ROM. Manifests, truth and exports are otherwise
byte-identical.
The --skip-packs help and the validate_pr fetch error were reworded, and a batocera page with no tab bar is plain Markdown that keeps the underscore entity, read here as a browser shows it.
The emulator card read entry_target from the consumers object, which the tests stand in for with a namespace. It is a module function now, and the pairing test resolves an archive member through it as the site does.
The RetroDECK report quoted on reading-reports.md counts the two np2
FONT.ROM files, the testing guide lists test_np2_fonts, and the source
paths record follows fontv98.c and the new pcem upstream pin.
Follows dc14ccc56. No pk3 shipped at the ecwolf pin is c011b428: the
ECWolf 1.3, 1.3.1, 1.3.2 and 1.3.3 x64 zips carry 13fe8057, cc10cb70,
d312ebbe and 8f4f0387, the buildbot ECWolf.zip 653f7b37, and
src/libretro/ecwolf_pk3_data.c at 0cccd9a8 embeds a 191995-byte pk3,
1a3fd445. The bundled-identity table records the entry with that proof.
The pack suffix test of b20d65d12 missed the platform --system packs, which carry their system after it (_BIOS_Pack_Playstation.zip): their manifest was no longer injected and install.py refused them. A pack name holds _BIOS_Pack, then an optional tag, then .zip.
release-process.md listed tbblue.mmc, removed from bios/ on 2026-10-20, and left out uqm-remix-disc1.uqm. A test now reads the list against git ls-files.
reading-reports.md said the cross-reference checks whether a profile's files appear in the platform config, a rule by name. Since 2026-10-10 declaration_settles counts a declaration only at the core's slot or at a size the core accepts, and an alias only where the core reads it.
architecture.md said a file found by its name claims nothing. Since 2b535525e slots.py counts such a copy (size_exact) when it has the exact size the profile declares and the platform's file another size, as RetroDECK's sgb2.boot.rom shows.
pin_frozen was prose, and no tool read the build file it cites, so a platform building another revision left the profile holding one nobody ships. pin_build records the platform, its repository, the revision read, the file, the variable and its value. check_freshness reads the file again where the platform's YAML now stands and reports STALE when the value moved. 36 of the 46 held profiles carry it, each value read from the build file at the platform's scraped revision. The other ten name no build file and are counted on one row: six RetroBat binary packages and four holds not tied to a platform build.
Since fed03c3db _add_zip_to_pack copies every archive of the collection as is. architecture.md and tools.md still said MAME and FBNeo romsets were rebuilt deterministically, so a third party rebuilding neogeo.zip to compare would read a sound pack as corrupt.
upstream_commit 25b54e3f was dev's HEAD at the 2026-10-23 bump. dev has
been rewritten since, and the pin is on no branch (diverged 109/114), so
profile_sync reports it orphaned. libretro-pcem shares no history with
sarah-walker-pcem/pcem: it took mainline patches by hand until 2016-04-13
(c9f3593f, 223f434f). Its sound_adlibgold.c holds 10739b96, the last
upstream commit before that date, and the port has none of the 6x86 work
of 2016-04-27. The pin is held there with upstream_frozen.
pcsx1, rustation and np2kai called a project abandoned, dead or never completed. Each now gives the date of the last commit or the project's own words, and a test refuses the verdicts yabause and gearboy carried too.
"abandoned fork frozen at v2.6.0 from 2018" was a verdict, and the fork took a commit on 2026-09-04. The note now says it is archived, quotes its description and the version its src/definitions.h states.
"Upstream project is dead" was a verdict published on the emulator page. The note now gives the date of the last commit on Yabause/yabause master, 2018-07-07 (7e38821d).
The pin 87b176a0 and tag v2.0.1 sit on preview (ahead 129, behind 0) and
not on the default xenios branch, which diverged (ahead 1784, behind 24).
The preview-v2.0.1 releases carry the dmg and ipa the notes name. With no
source_branch, profile_sync called the pin orphaned and listed 19 refs to
review that only measured the branch divergence. It now reads 1.
The get pages told a reader on another setup version to run `--check` after copying, with no command and no link, to someone holding a ZIP and no installer. The line now links the setup page's How to check section.
ecwolf.pk3 carried md5 c011b428, which its note said came from the .info.
The code checks no hash (src/wl_iwad.cpp:664-672) and the pk3 is built
from wadsrc/static/ at the pin, so no shipped file is designated by it.
The entry still resolves to the same file by name, and the platform lists
that pin this md5 are untouched.