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.
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.
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.
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.
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.
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.
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.
FS-UAE scans its Kickstarts directory and names a ROM by checksum
(src/fs-uae/config.c:121-140, main.c:431-470), opens kick.rom by name
only as a fallback (memory.cpp:1597-1606) and loads AROS when no ROM is
found (memory.cpp:2374-2379). required: true and the launcher's dialog
came from RetroPie's fs-uae.sh, which retropie.yml launchers: records.
The entry is now optional and found by content. kick13.rom stays as its
label, the name amiberry and uae4all give this 256 KB dump.
Step 5 built emulator packs one profile at a time, where two profiles never share a path. It now also builds each system pack that gathers several profiles and compares it with verify. The first run found five standalone MSX and ColecoVision packs where verify skipped the data tree of a profile the system filter left without files, and credited msx-emu's copies the pack never wrote. verify now places those trees too: 541 system packs, all equal.
DecideNAND (MelonDS.cs:684-706) reads the JPN, USA, EUR, AUS, CHN and KOR
bits of header byte 0x1B0. A DSi title sold in Latin America carries the
USA bit, so the USA NAND serves it. Tagged north-america alone, it fell
out of an --emulator bizhawk --region br,jp pack.
apt.cpp:128-140 picks the shared font archive by GetRegionValue: CHN, KOR
and TWN get their own, every other CFG region gets 0x00014002. The CFG
region set has USA and no Latin America value, so the USA font serves the
Americas, which the repo writes [north-america, latin-america]. With
latin-america missing, --region br,cn kept only the Chinese archive.
Without --platform, cross_reference and the site's gap report merged every
platform's standalone set, MinUI, NextUI and MyMinUI coredir: markers
included. A marker says which cores one platform hands a folder, so in the
union every core those three do not list got no layout: px68k showed 0 of
6 files and the global report lost 238 profiles and 1201 files.
merged_standalone_set drops the markers, and both readers use it.
verify_and_finalize_packs took every ZIP of the directory, so the launcher archives build_port.py writes to the same dist/ were judged as packs, failed, and were rewritten with a manifest after build_port had printed their hashes. Every name the builder gives ends in _BIOS_Pack.zip, and only those are taken.
Genesis Plus GX declares bios_U.sms and bios_E.sms with no hash. Only
.variants/ copies carried those names, so the name step served the Store
Display Unit BIOS and a 256 KB BIOS, while every platform pins v1.3 under
both. Two causes in generate_db: the v1.3 content's path was ZEsarUX's
sms.rom, which the resolver sets aside as another emulator's file, and a
name pinned by hash was refused when only variants carried it.
The scan now prefers a copy filed under its machine over one in an
emulator's own tree, and a name only variants carry can name the content
a hash pins it to.
Manifests: six contents change repo_path only (v1.3 SMS BIOS and five
ZEsarUX Spectrum ROMs, same sha1). On batocera, knulli, recalbox and
retrodeck the Genesis Plus GX bios_E.sms and bios_U.sms extras move from
the two variants to v1.3.
Raze lists three sized BLOOD.RFF versions and a fourth it takes without a check, the shareware RFF the collection holds. The Batocera pack printed two DISCREPANCY lines for it that verify never showed. A slot with an unchecked sibling now accepts any copy for that core, in the validation rules and in _matches_an_alternative. When every version refuses a copy, the message names all accepted values instead of the first.
_matching walked the reader's whole profile for each platform entry, 2,135 scans of MAME in one verify --all. Each profile is now indexed once per kind by name and by accepted hash. Over every registered platform, 10,524 lookups give the same answers as the scan, in 0.13 s instead of 2.42 s.
Both formats write every accepted md5 when the truth extends the platform's list without contradicting it, but only Batocera answered written_list, so landed_changes reported nothing for a diff the maintainer would find. Both now name the list they write when it holds several values.
NP2kai and meowPC98 read font.bmp (PC-98 bitmap) and FONT.ROM (V98) as
separate files, each through its own reader (NP2kai font/font.c:192-195,
meowPC98 font/font.c:180-181). The V98 names hung on font.bmp as aliases
let a collection without font.bmp serve the PC-88 2 KB font.rom there.
FONT.ROM is now its own entry, at least 0x46800 bytes (fontv98.c:8, 51).
Manifests: np2/FONT.ROM and np2kai/FONT.ROM are added where the platform
did not declare them, served by the V98 font bios/NEC/PC-98/font.rom.
verify --platform recalbox --system nec-pc-engine printed no Core files line while the pack held six syscard copies for geargrafx: the section returned on an empty gap report before reading packed_extras. It now prints the pack's counts whenever they are not zero.
profile_needs read every profile entry, so --missing named 43 files the emulator installs itself among 50 needs and buried the six xm7 ROMs. A bundled entry is skipped unless a platform package leaves it out (not_bundled_on). The report now lists 7 needs.
find_missing kept undeclared files reached only by bundled entries, so auto_fetch searched for and offered files the emulator installs itself, and a placed copy would fail bundled_only.py --strict. RetroPie drops from 55 to 14 missing files.
_apply_writes promoted the bumped profile, then read its prose under the new pin. A NotCachedError, RateLimitError or UpstreamError from that read left the profile written with a pin the guard would refuse. The original bytes are now put back before the error goes on.
_follow_fork_base swapped the fork merge base in as upstream HEAD even when upstream_commit was newer than that base, as for melonds and easyrpg whose upstream is the standalone build they document. melonds read its Qt refs 825 commits back and reported 4 to review. A pin that descends from the base now keeps the HEAD, melonds shows 0 to review.
drift_score ignored orphaned pins and moved repositories although triage_state says they are fixed before any ref is read: pcem ranked last at 0 with an upstream_commit on no branch. Each now weighs more than a GONE ref.
The refusal said the directory carried uncommitted changes without naming the profile, among about 375. It now lists the files git status reports, and says that --force writes over them.
--emulator mednafen_psx refused with 'use --emulator beetle_psx' although the profile names its target. The alias now selects that profile and says so on stderr, in verify, generate_pack and cross_reference alike. Launchers are still refused, and pipeline step 5 skips aliases since they compare under the profile they name.