Each PCSX2 fork declares how its LoadBiosVersion reads the table:
the strncmp length on RESET, the NUL test on names, EXTINFO, and what a
read past the end does, from the source at the pin or the shipped
libemucore.so for NetherSX2 and its Turnip builds. The Recalbox libretro
PCSX2 and PCEE2 check no size, so their 4 to 8 MB bounds are gone, and
the PCEE2 and ARMSX2 arcade images require the COH-H zone.
DEV9 opens eeprom.dat and flash.dat by bare name (pcsx2/DEV9/DEV9.cpp:144
at f0523f8a, AetherSX2 DEV9/flash.cpp:89, PCSX2 1.6 dev9ghzdrk/flash.cpp:73),
so the process working directory answers, never the BIOS folder. Only
yaps2 said so: the other PCSX2 profiles had the file packed into the BIOS
folder and the RetroDECK export add it there.
PCSX2 and its forks keep the first 4 to 8 MB image with a romdir in
the BIOS folder (pcsx2/ps2/BiosTools.cpp:258-282, 317-332 at f0523f8a),
and PCSX2 1.6 lists the same test in its BIOS picker
(BiosSelectorPanel.cpp:151-177). The names are labels. Without found_by
the truth model read ps2-0230a-20080220.bin as a name the core opens, and
the RetroDECK export added it as a required file.
Each standalone profile records where its version is read: the source
at its pin (clk 2026-07-23-136-g9020107, shadps4 0.20.1 WIP, eden
v0.2.0-401-g26a03d2), the APK, binary or archive read (kind package),
or, where no reading can be made, kind unverified with the reason: a
host the tools cannot read, a forge gone or not answering, no build
recorded as read, a pin on another branch. Those keep their value,
unconfirmed.
mariani, nuance and pcsx2x6 move upstream_commit to their fork base,
dolphin-mmjr2, hatari and jl-mod to upstream HEAD now that their prose
reads in the right tree, boom3 and bsnes-jg record the upstream they are
read against, and groovymame's source pin follows its fork.
The note citations hold under three source pins; read again at 583f0e9 they land on the acgame loader, the BIOS scan and the resource reads, recorded as prose_written_at. GameDatabase.cpp:39, Patch.cpp:117, SDLInputSource.cpp:24 and linux_build_qt.yml:129 read the same in the fork, the tree RetroBat ships.
Profiles that read two repositories, a libretro port and its upstream,
now prefix each citation with source or upstream, decided by which tree
carries the cited value at its pin. The emulator pages use the word to
tell libretro glue, emulator code as the port carries it, and the
upstream emulator apart.
Each platform's own packages were read at the revision our data pins, for every emulator and core it ships: Batocera, Recalbox, RetroPie, ROCKNIX, Lakka, RetroDECK, RetroBat and EmuDeck. Files a package installs where the emulator reads them are recorded with installed_on, and files a release bundles but a package leaves out with not_bundled_on, so each platform's pack brings what its users lack and nothing they already have. The standalone profiles never checked before were held against their releases the same way. Batocera's imame4all is the mame2000 core. The primary neogeo.zip was a 7.7 KB placeholder no platform pins and no pack served: removed, the real dumps stay in .variants.
Profiles, the wiki, comments, docstrings, command output and schema descriptions carried em-dashes, clause-joining semicolons, unicode arrows, box-drawing banners and check-mark glyphs. Each sentence was rewritten rather than having its character swapped. Hashes, paths, source_ref values and every cited file:line are unchanged, which a comparison of each parsed profile against the previous revision confirms.
validate_pr comments now say PASS and FAIL in words, and source_ref values in a profile's structured blocks render as code. test_prose_style fails if any of these comes back, in tracked files or in the generated site.
Upstream moved under 145 profiles: 679 refs shifted and 452 followed a
renamed file, against 6,483 that still anchor where they were written.
The recale rewrites the located ranges only, keeping the annotations and
the sentences that carry them, and 106 pins advance in the same commit
because refs and source_commit name one revision or the profile
describes two at once.
Nothing here was guessed. The 183 refs that are CHANGED, GONE or
AMBIGUOUS are untouched, and the 57 profiles holding them keep their old
pin until someone reads the diff: profile_sync refuses to recale a
profile while any of its refs needs a re-read. trident kept its pin too,
its annotated ref being one the writer will not rewrite.