A record naming several files of one config lists their keys in the
same order (describe_keys). Each launcher place now carries its own
key, so AmberELEC's 5200a.rom receives the ROM_5200_A file.
MAME and libretro MAME pass /userdata/bios/<bootdisk>.img with -flop1
when the option is in the generator's list, else <bootdisk>.chd with
-hard. Each branch is a {bootdisk} template: the list the code tests
for the floppy, and for the hard disk the choices es_features.yml
offers that the list does not take. The menu offers macos3 while the
code tests macos30, so System 3.0 is passed as macos3.chd.
configureINI writes [Folders] Bios = ../../../bios/ps2 into
inis/PCSX2.ini, which PCSX2 and AetherSX2 resolve against the config
folder configgen hands it. relative_folders reads the call, the ini
path and the value, and records the resolved /userdata/bios/ps2 as a
passes_path for pcsx2 and aethersx2.
A copies record names its files under search_dir, the folder the code
copies from, and passes_to is the target, as the schema and RetroPie,
RetroDECK and AmberELEC already write it. KNULLI listed patches.zip
under the BIOS folder it is copied into, and KNULLI and RetroBat wrote
the target as prose with the condition. The condition of a copy now
goes in depends_on_option. Only launcher records change in knulli.yml
and retrobat.yml.
RetroDECK sets LRPS2's pcsx2_bios to scph10000.bin. The record names
the frontend, so the core is the one whose entry reads that setting.
Its entry is a placeholder, and the name spells a model: the held dump
the catalogues describe as SCPH-10000 goes in under that name in the
entry's directory, primaries first, then the earliest Redump revision
(ps2-0100j-20000117).
A launcher name that a reader's profile entry declares unsourceable is
no file left to find. Its row carries the reason and both reports
print it under its own count, never mixed with the names to acquire.
amberelec_launchers reads runemu.py with ast and, at the commit the
scraper pins, the scripts its standalone table runs and the configs
their packages install: RetroArch and retrorun directories, the MAME
-rp path, atari800.cfg, Hatari's default TOS, amiberry's kickstarts
link and defaults, yabasanshiro, PICO-8, piemu, scummvm, freej2me and
easyrpg. 17 records.
The freej2me-lr.jar and pico8_64 notes now name the file in a sentence
about the emulator, as test_launcher_aliases asks once a launcher
records it.
knulli_launchers reads KNULLI's configgen and the PICO-8 installer at
the tag the scraper pins: Batocera's extractors where the generator is
still Batocera's code, KNULLI's own for lexaloffle, libretroOptions and
knulli-install-pico8, and one AST reader for the BIOS paths the other
generators pass on a command line, in a config key or the environment,
copy or test for. 52 records.
Configgen takes the configgen package path and whether the importer has
a legacy map, so KNULLI's copy at package/system/knulli-configgen reads
with the same extractors. hatari accepts the bare filename KNULLI builds
and joins to BIOS, and options read by subscript or isOptSet. melonds
accepts a console type read by subscript. Batocera's records are
unchanged at batocera-43.1.
ROCKNIX's Amiberry configs pass kick34005.A500.rom and
kick40068.A1200.rom, Amiberry's names for Kickstart 1.3 and 3.1 with
.rom appended. Amiberry opens the path as given and boots AROS without
it, so the pack now ships the held ROM under the launcher's name.
emuelec_launchers.py reads emuelecRunEmu.sh and the scripts and
configs it starts at the tag batocera-systems is read at (v4.8): 36
records for RetroArch, retrorun, freej2me, MAME, PICO-8, Flycast,
Amiberry, DuckStation, Yabasanshiro, jzIntv, Mupen64Plus, Hatari,
AdvanceMAME, ScummVM, Dolphin and the MIDI synths.
A search a launcher stops at the first held name of is filled, and a
copy from the platform's own package or script brings its own file:
neither is a name the collection lacks. A launcher that writes its
file into the setting a profile entry is read from (config_key) now
receives that entry's held file under its own name, in the report and
in the pack.
A list naming retroarch now takes the libretro profiles whose built_by names the platform: ROCKNIX ships yabadabadoo with its RetroArch and named it nowhere, so its files never reached the ROCKNIX pack. Only change across the registry: rocknix + yabadabadoo. Also quotes the installer's current unproven-drive message.
Batocera's lexaloffleGenerator runs bios/pico-8/pico8 and
bios/voxatron/vox, raises when the binary is missing or not
executable, and puts each folder on LD_LIBRARY_PATH. The new
extractor records both per system from the AST, with the lines
of batocera-43.1 that say it.
lwmp.zip from the project's downloads (sha1 1145464c), 2308 files read by path. Equal files sit in one folder per rotation, so the tree is kept out of dedup.
- The installer speaks without "you": the first screen asks "Where
to install?", rows read "Copy the BIOS files from an old card or a
folder", a close match reads "Close matches: ...". The handheld
launchers and their port text follow, and the pronoun guard no
longer lists any installer message.
- A setup that runs as an app opens on its one-line command, the
folder table after it; a setup that runs on its own device keeps
the network folder first, which its ZIP route needs.
- The home steps say what to do: "Its page gives one line to copy",
"Paste it, press Enter".
llms.txt now gives the package commands, the plan as JSON events from
--dry-run --events, the exit codes and the plan, consent, act pattern
with --yes. Tests hold each fact to install.py and to the exit code table
of the installer page.
Every archive has a recipe in recipes/archives.json, and no page a user
reads said so. A short reference page says what a recipe is, how to
rebuild one archive and what exact and canonical mean. Its counts and the
README line are counted from the recipe file at each build.
The README gains a row of four badges: PyPI version, Python versions,
the Validation workflow on main and the license. Tests hold the badges,
the counts and the page's command.
--fetch also exported and stopped on the absent dist/truth before any
download, so CI skipped every exporter fidelity case and tolerated the
step. --refresh-cache only downloads: the step can no longer fail
unseen.
build_pypi.py stages install.py, the launcher, __main__.py, README and
LICENSE, then runs uv build with flit_core 3.12.0 pinned and
SOURCE_DATE_EPOCH set from install.py's commit. Adds python -m retrobios,
the PyPA classifiers, keywords and project URLs. CI installs uv.
Search Console reported emulators/vba_m/ as not found: an alias
profile has no page, and only the names in a profile's cores: list
were redirected. Each of the 21 alias profiles now redirects to the
page of the profile it names.
- The installer says "Every file on the list is in place." where it
said "Everything is in place.": a check covers the files the
collection holds, and the required ones it lacks follow.
- The FAQ, first install, legal and home pages state only what the
code shows (PlayStation 1 and Saturn run without a BIOS on some
emulators, save files are never touched, records are added).
- MinUI and MyMinUI show their own boot logos, and the Android,
Linux handheld and iPhone tiles show the Android robot, Tux and a
plain device icon, each credited in sources.json.
- Each Markdown copy, llms.txt and llms-full.txt name the commit
they were built from, version.json the current one, and the
answering rules tell assistants to fetch a stale copy again.
- The deploy lists the pages whose words changed (digests.json) and
posts them to IndexNow once the site is live.
Each claim in the README and the wiki now matches the code or data it
describes: line citations counted as such (93%), closed-source profiles
named, severity tied to the check mode, installs limited to files the
collection holds, and the demo labelled as a demonstration card.