Commit Graph
2902 Commits
Author SHA1 Message Date
Abdessamad Derraz f0289e3624 feat: record pcsx2's relative bios folder
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.
2026-11-09 17:59:09 +01:00
Abdessamad Derraz cedeee2254 refactor: one meaning for copy records
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.
2026-11-09 17:58:37 +01:00
Abdessamad Derraz 8114f48e30 feat: fill a core option default by model
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).
2026-11-09 17:53:48 +01:00
Abdessamad Derraz a6aea81c17 chore: merge integ into fix-launch-names 2026-11-09 17:47:35 +01:00
Abdessamad Derraz 21d34748e5 feat: list unsourceable launcher names apart
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.
2026-11-09 17:47:26 +01:00
Abdessamad Derraz ffad06487c feat: read the amberelec launcher layer
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.
2026-11-09 17:47:23 +01:00
Abdessamad Derraz 2c58f50a2d feat: read the knulli launcher layer
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.
2026-11-09 17:47:16 +01:00
Abdessamad Derraz 768cc9fd6f chore: merge origin/main 2026-11-09 17:43:44 +01:00
Abdessamad Derraz 6024932846 feat: read a launcher name with an added extension
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.
2026-11-09 17:42:13 +01:00
Abdessamad Derraz 2c76cc7df9 feat: read a search list as one need
A core that loads the first of several names (yabause: saturn_bios.bin,
sega_101.bin, mpr-17933.bin) needs one of them. Profiles wrote this as
required on the first name and optional on the others, so verify and
the gap report called saturn_bios.bin a missing required file while
sega_101.bin was held, and a set held only through a name marked
optional read as a need met by an optional file.

Model: an explicit group on the file entry, mirroring the platform
field. priority was not reused: it is a rank, read by slot.py, region.py
and truth.py inside a (system, region) slot, and that slot is not the
set. px68k-sdl ranks its IPL list and its font list each from 1 in one
system, pom2 ranks one list per machine model, DuckStation ranks 105
images across every region and takes any of them. A rank cannot say
where one list ends. priority stays the order inside a group.

Readers, through alternatives.settle_sets:
- verify --emulator and the emulator pack: a held member fills the
  set, the others leave the report, a set nobody holds is one gap
  under its first member naming the others.
- find_undeclared_files (verify platform, core complement of packs and
  manifests): same rule, a platform declaration or launcher counts as
  answering the set.
- cross_reference: excused members are set aside as other versions.
- slot.py: ranks compare members of one set only.
- archive members: a required set inside an archive is met by one.
- truth: a member gives no requirement of its own, one_of and
  one_of_required carry the set, and the exporters and the diff leave
  such a line's required as the platform wrote it.
- validate_schemas: members of a group share required.
2026-11-09 17:39:46 +01:00
Abdessamad Derraz 7f04ed8096 chore: merge emuelec launchers 2026-11-09 17:34:40 +01:00
Abdessamad Derraz 82a6b2f833 feat: read the emuelec launchers
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.
2026-11-09 17:34:03 +01:00
Abdessamad Derraz 979111f6f2 feat: settle launcher names the code fills
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.
2026-11-09 17:31:18 +01:00
Abdessamad Derraz 6a9700489d feat: place standalone files through links
standalone_bindings maps each subfolder of a standalone layout to the
folder of the BIOS tree a platform's links and passed directories give
it, followed through a working directory. platform_layouts applies it,
so the pack, the manifest, verify and slots read one destination.

uae4all paths are now what the emulator reads, kickstarts/<name> below
its working directory, and RetroPie still receives them in amiga/.
2026-11-09 17:28:00 +01:00
Abdessamad Derraz b270a24d7b feat: take a platform's own libretro builds
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.
2026-11-09 17:18:44 +01:00
Abdessamad Derraz fed8bdddd8 feat: read the lexaloffle launcher for batocera
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.
2026-11-09 17:06:09 +01:00
Abdessamad Derraz 244bd11075 chore: merge origin/main 2026-11-09 16:46:40 +01:00
Abdessamad Derraz 87839ea6c0 chore: merge origin/main 2026-11-09 16:37:13 +01:00
Abdessamad Derraz 6c14468862 feat: say the installer and setup pages plainly
- 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".
2026-11-09 16:33:56 +01:00
Abdessamad Derraz 7164a8c446 chore: merge launcher gap report 2026-11-09 16:16:42 +01:00
Abdessamad Derraz 8268f03269 feat: report files only a launcher reads
cross_reference and verify list the names a platform's launch code reads that the collection holds under no name. Reported apart, never scored.
2026-11-09 16:16:38 +01:00
Abdessamad Derraz d9ed966e51 chore: merge the screen test fix 2026-11-09 16:14:08 +01:00
Abdessamad Derraz 68e8ea449c chore: merge the docs branch 2026-11-09 16:14:08 +01:00
Abdessamad Derraz 40ea1cdaed fix: read a wrapped path whole in screen tests
A folder under the checkout is as long as the checkout's own path. From a deep clone the screen broke it after a separator, as it should, and eight tests looked for it on one line.
2026-11-09 16:13:33 +01:00
Abdessamad Derraz 295bb4e275 chore: merge origin/main 2026-11-09 15:52:58 +01:00
Abdessamad Derraz 99d54bcced chore: merge origin/main 2026-11-09 15:12:54 +01:00
Abdessamad Derraz a18262f184 chore: merge origin/main 2026-11-09 15:06:18 +01:00
Abdessamad Derraz c963499643 fix: wait for Confirm by its title in the tap test
The game-data tap test waited on the bare RetroBIOS: title, which the
screen before Confirm already showed, then pressed Enter only if one
settle had drawn Confirm. The runner drew it later and the install
never started. It now waits for the Confirm title and presses Enter.
2026-11-09 14:23:36 +01:00
Abdessamad Derraz 4c0c480bdd docs: tell agents how to drive the installer
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.
2026-11-09 14:23:35 +01:00
Abdessamad Derraz 92546794e2 docs: archive recipes page and README badges
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.
2026-11-09 14:23:29 +01:00
Abdessamad Derraz d8b55fc2de fix: a check sample ends on code 3
The events transcript on the installer page is a --check run that finds
files missing. Since November such a run ends on 3, as the Exit status
table says, and the sample still showed 1.
2026-11-09 14:23:21 +01:00
Abdessamad Derraz 4542bcffa8 chore: bump uv to 0.13.4 in every pin
Dependabot moved uv in pyproject.toml alone, while validate.yml and
CONTRIBUTING kept 0.12.9. Both pins move together, and a test now
fails when a package pinned in both carries two versions.
2026-11-09 14:20:12 +01:00
Abdessamad Derraz 025fd08a72 chore: merge origin/main 2026-11-09 14:02:45 +01:00
Abdessamad Derraz 10dc67b63a fix: follow the doc tests to --refresh-cache 2026-11-09 13:44:24 +01:00
Abdessamad Derraz 51aa626028 fix: fetch platform originals without exporting
--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.
2026-11-09 12:45:57 +01:00
Abdessamad Derraz 31132eb37e chore: merge origin/main 2026-11-09 12:28:14 +01:00
Abdessamad Derraz 85e81b15d5 fix: let the FM Towns ME model name through 2026-11-09 12:28:13 +01:00
Abdessamad Derraz 3368140e52 chore: merge site and docs fixes 2026-11-09 12:23:13 +01:00
Abdessamad Derraz a1a0f54572 chore: follow site tests to the rescraped data
Each change records a fact the data no longer states:

- ROCKNIX 20261101 dropped the AetherSX2 package, so the install box
  names KNULLI alone.
- RetroBat no longer pins an md5 on ar_bios.zip for the Arcadia, so no
  file is held for emerson-arcadia-2001 and its UNLINKED entry is gone.
- sega-model1 holds only the model1io and model1io2 device sets, filed
  under Arcade > Arcade and Arcade > MAME, with no section of its own.
- The Sega page gained Model 2 and new Chihiro and Hikaru files on the
  same card layout: its word ceiling is measured again at 3545.
2026-11-09 12:22:33 +01:00
Abdessamad Derraz d81a873b15 fix: allow advancemame's removed hng64 system 2026-11-09 12:16:32 +01:00
Abdessamad Derraz c6bf649a1e fix: expect the lowercase bbkemu folder 2026-11-09 12:12:18 +01:00
Abdessamad Derraz d6a0270ca7 chore: merge origin/main 2026-11-09 12:07:57 +01:00
Abdessamad Derraz df7c923fcf chore: merge origin/main 2026-11-09 12:06:30 +01:00
Abdessamad Derraz 43088a4e9e chore: merge origin/main 2026-11-09 11:45:57 +01:00
Abdessamad Derraz b9a35589a8 feat: build the PyPI package with flit_core
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.
2026-11-09 11:45:49 +01:00
Abdessamad Derraz 7da48ca56a feat: date the PyPI package by install.py commits 2026-11-09 11:40:37 +01:00
Abdessamad Derraz 2841998b60 chore: hold indexnow.py to the script rules
indexnow.py now exits through run_cli, its --dist option is documented
in tools.md, and test_site_freshness.py imports the tests package first.
2026-11-09 11:02:00 +01:00
Abdessamad Derraz 1647d0e4fb feat: send alias profile pages to their emulator
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.
2026-11-09 10:59:12 +01:00
Abdessamad Derraz 7d23d8f40b chore: merge origin/main 2026-11-09 10:57:37 +01:00
Abdessamad Derraz 045ad9e3af chore: merge origin/main 2026-11-09 10:54:08 +01:00