549 Commits
Author SHA1 Message Date
Abdessamad Derraz c2cd085670 docs: regenerate the README 2026-10-18 16:00:44 +02:00
Abdessamad Derraz 02fcb54d9d fix: retry a file list the network cut short 2026-10-18 15:40:59 +02:00
Abdessamad Derraz cf596c92b6 fix: check --target for every platform first 2026-10-18 15:39:49 +02:00
Abdessamad Derraz a56ab2a6b7 fix: let q decline the download confirmation 2026-10-18 15:35:45 +02:00
Abdessamad Derraz eead810015 fix: skip the variants test without jsonschema 2026-10-18 15:31:28 +02:00
Abdessamad Derraz 3a29d5b56a fix: refuse a profile path into .variants 2026-10-18 15:19:51 +02:00
Abdessamad Derraz e3b17b04d2 fix: file RomM extras under their own system 2026-10-18 15:19:19 +02:00
Abdessamad Derraz 23551ba219 fix: name Azahar's real folder in the pack guide 2026-10-18 15:19:19 +02:00
Abdessamad Derraz 0f114022f3 fix: let loose ROMs complete a romset recipe 2026-10-18 15:12:35 +02:00
Abdessamad Derraz ccbc09cf98 feat: detect the RetroArch UWP package 2026-10-18 15:11:21 +02:00
Abdessamad Derraz 950e6fae30 feat: find BizHawk where EmuHawk reads 2026-10-18 15:09:52 +02:00
Abdessamad Derraz bc91790784 docs: describe detection as the installer does it 2026-10-18 15:08:25 +02:00
Abdessamad Derraz 3e5a9a18c1 fix: copy standalone files to Flatpak installs 2026-10-18 15:07:44 +02:00
Abdessamad Derraz 8f7b8c9dc9 fix: keep one case twin where case folds 2026-10-18 15:04:38 +02:00
Abdessamad Derraz 14f78ab634 feat: narrow an embedded install to its board 2026-10-18 15:03:26 +02:00
Abdessamad Derraz 51032c272b fix: catch file and folder case collisions 2026-10-18 15:00:22 +02:00
Abdessamad Derraz 52ccdb327f fix: write changed FBNeo values to the profile 2026-10-18 14:59:51 +02:00
Abdessamad Derraz 211ce0bf16 chore: install every test dependency in CI 2026-10-18 14:58:44 +02:00
Abdessamad Derraz a60951c0ca fix: say when the RetroDECK home is a guess 2026-10-18 14:58:07 +02:00
Abdessamad Derraz 213d19ed27 fix: refuse an unparseable platform original 2026-10-18 14:57:28 +02:00
Abdessamad Derraz be0443a935 fix: name a DAT the importer skips for size 2026-10-18 14:56:51 +02:00
Abdessamad Derraz 3799d4a1a4 fix: hold installer detection to the registry 2026-10-18 14:55:39 +02:00
Abdessamad Derraz ce2417ce0f refactor: read hash lists with one parser 2026-10-18 14:52:02 +02:00
Abdessamad Derraz 0c53d165c1 fix: parse member md5 lists one way 2026-10-18 14:50:26 +02:00
Abdessamad Derraz dbd47886ce fix: name release assets as GitHub serves them 2026-10-18 14:49:00 +02:00
Abdessamad Derraz a08827257d fix: tag regions by the branch the code takes
Mega CD US BIOS serves every non-EU, non-JP disc; Dolphin boots
Korean discs from the JAP directory; Beetle never opens scph5903.bin
under that name.
2026-10-18 14:48:14 +02:00
Abdessamad Derraz e7f714269a docs: regenerate the README 2026-10-18 14:38:47 +02:00
Abdessamad Derraz 3c5570f8f0 fix: regenerate the truth before a native refresh 2026-10-18 14:34:42 +02:00
Abdessamad Derraz 090369cb20 fix: refuse a truth file older than the profiles 2026-10-18 14:33:26 +02:00
Abdessamad Derraz 76d3c987d4 fix: name the corrections an export withholds 2026-10-18 14:32:30 +02:00
Abdessamad Derraz 2173db889b fix: count values the RomM export normalises 2026-10-18 14:31:52 +02:00
Abdessamad Derraz 070e90eb64 fix: count an appended RetroDECK revision apart 2026-10-18 14:31:03 +02:00
Abdessamad Derraz c254115647 fix: keep a MiSTer record whole without an md5 2026-10-18 14:30:16 +02:00
Abdessamad Derraz 6458a927d4 fix: refuse multi-md5 additions in RetroBat 2026-10-18 14:29:46 +02:00
Abdessamad Derraz 1e2f4e810b fix: never extend a RetroPie list of examples 2026-10-18 14:29:06 +02:00
Abdessamad Derraz d0bdf6d08f fix: give archive details their destination 2026-10-18 14:17:46 +02:00
Abdessamad Derraz 57e9df6e1a fix: tag the US SMS boot ROM for Europe too 2026-10-18 13:59:15 +02:00
Abdessamad Derraz 768f9b583f fix: let shared groups follow the profiles 2026-10-18 13:57:03 +02:00
Abdessamad Derraz dda057f45f fix: key cross-reference slots by the build's path 2026-10-18 13:55:06 +02:00
Abdessamad Derraz 9ea1630caa feat: install case twins where case is kept
The RetroArch list is folded for Windows and macOS. Its manifest
now carries the names a case-keeping directory also needs, and the
installer adds them after probing the BIOS directory.
2026-10-18 13:52:37 +02:00
Abdessamad Derraz df597cbe7d fix: hold data trees while packs are verified 2026-10-18 13:46:11 +02:00
Abdessamad Derraz fa34a9fe18 fix: hold docs/ while the site is generated 2026-10-18 13:45:48 +02:00
Abdessamad Derraz c597df2a32 fix: swap in the pack after adding its manifest 2026-10-18 13:45:00 +02:00
Abdessamad Derraz 1f942770d5 fix: rank only held files in a slot 2026-10-18 13:43:41 +02:00
Abdessamad Derraz 9ad19bdba6 fix: keep a slot file another core opens by name 2026-10-18 13:42:49 +02:00
Abdessamad Derraz 37633043db fix: pin ryujinx to its Gitea mirror
Gitea answers /raw/commit with an HTML proof-of-work page, so
Forgejo-family files are fetched through the API raw route.
2026-10-18 13:40:50 +02:00
Abdessamad Derraz 658c5a4959 fix: attest vitaquake2 prose at its pin 2026-10-18 13:38:36 +02:00
Abdessamad Derraz db3eba1cfc fix: find the branch in a URL into a folder
A /tree/<branch>/<dir> URL was read as one branch name, so the
repository never resolved. Each prefix is tried, shortest first.
A repository that answers nothing now says so, or reports the
declared upstream_gone.
2026-10-18 13:34:37 +02:00
Abdessamad Derraz 16c0b27213 fix: give legacy hiscore parsers their own file
The new-format hiscore.dat was served by name to cores whose parser reads
only legacy lines. Eight cores now pin the hiscore.dat their own
repository ships, four revisions newly collected.
2026-10-18 13:31:31 +02:00
Abdessamad Derraz 3bfe89c5a2 fix: read past a blank line when attributing a ref 2026-10-18 13:28:54 +02:00
Abdessamad Derraz 8605f85657 fix: never nudge a ref that cites code 2026-10-18 13:23:41 +02:00
Abdessamad Derraz de0b494ee5 fix: pin clownmdemu upstream to the vendored core 2026-10-18 13:21:33 +02:00
Abdessamad Derraz 3c856bbc10 fix: lay out both builds of a dual-mode emulator
Batocera, RetroBat, Recalbox and ROCKNIX offer some emulators both as a
libretro core and standalone. Filed as standalone only, the libretro
layout was dropped: libretro Dolphin had no dolphin-emu/Sys/GC files.
Platforms now name dual-mode emulators and each gets both layouts.
2026-10-18 13:19:53 +02:00
Abdessamad Derraz 2b535525ef fix: let a declared size contest another size
System.dat pins the 2 KiB X1 font as xmil/IPLROM.X1T, where xmil reads
a 32 KiB Turbo IPL. A held copy of the exact size a profile declares now
proves its claim against a file of another size, so the existence packs
ship the IPL. The font's duplicate under the IPL name is removed.
2026-10-18 13:08:40 +02:00
Abdessamad Derraz bfa6c51ff5 fix: report an archive another profile masks 2026-10-18 13:00:38 +02:00
Abdessamad Derraz 39237004db fix: reduce emulator alternatives as the pack does 2026-10-18 12:58:57 +02:00
Abdessamad Derraz 962f8ea5dc feat: publish the collection as a Logiqx DAT 2026-10-18 10:15:40 +02:00
Abdessamad Derraz 2679ed1ee0 feat: describe system page files for machines 2026-10-18 10:13:13 +02:00
Abdessamad Derraz c813ccbd32 feat: describe the data exports as a Dataset 2026-10-18 10:10:06 +02:00
Abdessamad Derraz bd75defb61 fix: date sitemap entries from their pages
The sitemap gave every page the build date. A page now states its own date
and a mkdocs hook passes it on, or leaves lastmod out. The values added to
the site's code spans today are also escaped: a backtick in a profile or
file name could close the span and inject markup.
2026-10-18 10:08:18 +02:00
Abdessamad Derraz f5e3404a8d fix: anchor each version on its content 2026-10-18 10:04:02 +02:00
Abdessamad Derraz b2d74b5255 feat: link emulator cards to the copy and section 2026-10-18 10:00:46 +02:00
Abdessamad Derraz c66f24f333 fix: print none, not Python's None, on the site
A null upstream, version or detail is a stated fact. It now reads as
none, and a null upstream shows the project's own source. The site's
exclusion of local working notes no longer names the tool writing them.
2026-10-18 09:58:14 +02:00
Abdessamad Derraz ba36d9586f fix: print full hashes on collection cards 2026-10-18 09:54:28 +02:00
Abdessamad Derraz cf121d028e feat: give each collection card its path and link 2026-10-18 09:51:58 +02:00
Abdessamad Derraz c0e0da03a6 fix: give the reason on an unsourceable card 2026-10-18 09:50:07 +02:00
Abdessamad Derraz 6d67a56097 fix: count untested files one way on the gaps page 2026-10-18 09:48:37 +02:00
Abdessamad Derraz 38ce395116 fix: print Adler-32 values as the downloads do 2026-10-18 09:46:45 +02:00
Abdessamad Derraz a06a742773 docs: ask contributors for the checks CI runs 2026-10-18 09:45:55 +02:00
Abdessamad Derraz 2076874c16 fix: stop listing bundled files as ones to find 2026-10-18 09:44:11 +02:00
Abdessamad Derraz 92d639253a refactor: drop sixteen unused imports 2026-10-18 08:52:19 +02:00
Abdessamad Derraz 92fb885341 fix: accept platform names as the site prints them 2026-10-18 08:49:41 +02:00
Abdessamad Derraz 02cacb1b87 fix: drop a PS2 ROM2 copy filed as ROM2.BIN
It was the SCPH-70004 v12 ROM2 under a Galaksija name, kept only because
System.dat gives Galaksija's ROM2.BIN that hash. ROCKNIX installed it as a
stray ROM2.BIN; it now gets the dump under the name its BIOS pairs with.
2026-10-18 08:47:27 +02:00
Abdessamad Derraz 61b37408f1 feat: name the folder a PR's BIOS belongs in 2026-10-18 08:44:41 +02:00
Abdessamad Derraz 7bd2579022 fix: stop calling a held file its own duplicate 2026-10-18 08:41:32 +02:00
Abdessamad Derraz fd6db086d3 fix: keep full lists in check_freshness JSON 2026-10-18 08:40:44 +02:00
Abdessamad Derraz 6dc373fcfd fix: refuse two output forms in diff_truth 2026-10-18 08:40:01 +02:00
Abdessamad Derraz b23f5b04ad fix: refuse a --bios-dir that does not exist 2026-10-18 08:39:27 +02:00
Abdessamad Derraz 4240c98359 fix: name a missing database in one error line 2026-10-18 08:34:09 +02:00
Abdessamad Derraz 9579f6c449 fix: name platforms and core misses in the summary 2026-10-18 08:31:16 +02:00
Abdessamad Derraz dd86124165 fix: name platform and folder in the sudo advice 2026-10-18 08:29:50 +02:00
Abdessamad Derraz 09e51c2f0a fix: retry the installer's file and target lists 2026-10-18 08:27:54 +02:00
Abdessamad Derraz fe35de9607 fix: name RETROBIOS_REF when a list is too old 2026-10-18 08:25:26 +02:00
Abdessamad Derraz ebf44d523b fix: make the closed-pipe test meet a full pipe 2026-10-18 08:23:38 +02:00
Abdessamad Derraz 7310f9ad54 chore: regenerate README 2026-10-18 08:22:56 +02:00
Abdessamad Derraz 2433ef30c0 fix: read verify's verdict call across lines
The source check matched the call on one line; passing the RomM hash rule
split it, and the check failed although verify still applies the rule.
2026-10-18 08:22:56 +02:00
Abdessamad Derraz e75482777d fix: leave aliases out of the fileless audit 2026-10-18 07:41:54 +02:00
Abdessamad Derraz e660022628 docs: say why openlara reads nothing it is given
OpenLara asks for the system directory to keep its own shader and cache
files under openlara/cache, which it writes and reads back itself.
2026-10-18 07:41:12 +02:00
Abdessamad Derraz 592f8fef2d fix: exit 2 when the BIOS folder cannot be made 2026-10-18 07:40:32 +02:00
Abdessamad Derraz ad3dfa6770 feat: profile and collect b2's standalone ROMs
The standalone b2 loads its machine ROMs from assets/roms; the profile
declared none because the libretro port embeds them. 44 entries from
tom-seddon/b2 e1c9b84, 31 ROMs collected, 12 already held.
2026-10-18 07:39:21 +02:00
Abdessamad Derraz dedcf32192 fix: report a failed bootstrap download plainly 2026-10-18 07:38:52 +02:00
Abdessamad Derraz 0f52c18eca fix: let every installer prompt be quit 2026-10-18 07:34:20 +02:00
Abdessamad Derraz 7531ccad8f fix: refuse a profile_sync filter matching nothing 2026-10-18 07:33:11 +02:00
Abdessamad Derraz 2362466903 fix: suggest a region for an unknown spelling 2026-10-18 07:32:46 +02:00
Abdessamad Derraz a8c23ad11d docs: number pipeline steps as the run prints them 2026-10-18 07:31:43 +02:00
Abdessamad Derraz 1305516e87 docs: say --offline cuts release asset downloads 2026-10-18 07:30:56 +02:00
Abdessamad Derraz d84f81874b docs: say why emucv and eightyone read nothing
Both cores ask for the system directory. emucv never reads the answer
back, and eightyone serves every ROM from its embedded table and only
writes zxpand-eeprom.bin there. The reasons were in their notes, not in
the exclusion_note the fileless audit accepts as an answer.
2026-10-18 07:30:25 +02:00
Abdessamad Derraz 3116a57617 docs: document every option the scripts accept
Fifty options appeared in no page. fileless_audit also gains --all, so
its example sweeps instead of naming three settled profiles, and it and
download.py --info now fail on an unknown name or an unreachable source.
2026-10-18 07:29:16 +02:00
Abdessamad Derraz 23ed3e92ab docs: mend a torn sentence in the tools page 2026-10-18 07:25:06 +02:00
Abdessamad Derraz ae3dc63bc3 fix: accept RomM files on size and any hash
RomM's verify_file_hashes compares the size, then md5, sha1 or crc. We
compared md5 alone, so a fixture entry with one mistyped hash was left out
of the pack RomM would accept it from. The rule is declared in romm.yml
and read by verify, the builder and the manifest.
2026-10-18 07:24:33 +02:00
Abdessamad Derraz 731faee6e1 docs: tie the tools page counts to their artifacts 2026-10-18 07:20:34 +02:00
Abdessamad Derraz 2977615f99 docs: list every exporter and target scraper 2026-10-18 07:19:58 +02:00
Abdessamad Derraz d6d03617db fix: exit 1 when a hash lookup finds nothing
The documented example looked up a test fixture hash, printed NOT FOUND
and exited 0. The docs now use a hash the database holds and say which
line forms a hash file accepts.
2026-10-18 07:19:01 +02:00
Abdessamad Derraz 84a144be66 docs: send RetroPie users to the RetroPie pack 2026-10-18 07:17:19 +02:00
Abdessamad Derraz 6d48d9e71e fix: report the emulator cross_reference is asked
A mistyped --emulator exited 0 with no profile found, and a correct one
with no gaps was left out of its own report, totalled across all
emulators. The name is now checked, the emulator always printed, and
--list-emulators added for the suggestion to point at.
2026-10-18 07:16:30 +02:00
Abdessamad Derraz 195fb92036 fix: name the platform a typo meant in every CLI
slots ended a mistyped --platform on a traceback; generate_truth,
refresh_data_dirs and auto_fetch exited 0 having done nothing for it.
All six now stop on require_platform before any work.
2026-10-18 07:14:38 +02:00
Abdessamad Derraz 803f9dce96 fix: hash only files that share a size
identity.py read the whole 18 GB tree on every pipeline. A file whose
size no other file shares cannot have a duplicate.
2026-10-18 07:12:59 +02:00
Abdessamad Derraz 90b39ed955 chore: regenerate install manifests
Lakka package names joined the profiles' cores, and Lakka now has a
per-device target list.
2026-10-18 07:06:33 +02:00
Abdessamad Derraz 2db83a5e01 feat: confront added profiles in CI
profile_sync --strict exits 1 when a profile has refs to review. The
validation workflow runs it on every profile a pull request or a push to
main adds, so a profile whose refs miss their value no longer lands green.
2026-10-18 06:29:14 +02:00
Abdessamad Derraz 572a2d20de feat: check a release against its record
A count of assets misses a failed upload beside a stray file and a part
re-uploaded from an older build. check_release.py holds each asset's
GitHub sha256 against SHA256SUMS.txt and release.json, and the release
process publishes the draft only on its clean exit.
2026-10-18 06:26:39 +02:00
Abdessamad Derraz 694d1defc0 fix: file truth models by each platform's target
Lakka builds an image named switch while RetroArch files switch as
nintendo-switch. One canonical name taken across the registry put
Lakka's model under RetroArch's target. generate_truth now writes each
platform under its own target name, and diff_truth --target reads it.
2026-10-18 06:24:07 +02:00
Abdessamad Derraz c3162dcd27 feat: scrape Lakka per-device core lists
Lakka builds LIBRETRO_CORES minus the exclusions each project, device
and GLES image adds. Without a list, --target refused Lakka and its RPi1
pack carried firmware for cores the image does not build.
2026-10-18 06:24:01 +02:00
Abdessamad Derraz bac91d0824 fix: stop asking for dumps the collection can make
The Wanted page listed 79 dumps the collection already produces,
such as a Kickstart's byte-swapped words or the halves of a C128
character ROM. The pipeline now records which missing dumps can be
derived, in derivable.json, and the page moves them to a section of
their own that names the held file and the transform.
2026-10-18 06:16:16 +02:00
Abdessamad Derraz fd4c118a38 fix: count a catalogued dump once across its DATs
Several DATs list the same dump, as No-Intro's three FM-7 sets do
for their system ROMs, and the provenance report counted it once per
listing: 2485 missing announced for 2284 distinct dumps, on the site
as well. Dumps are now counted by identity, each keeping the DATs
that list it.
2026-10-18 06:11:12 +02:00
Abdessamad Derraz e1b6aad51b fix: refuse abbreviated flags in every script
argparse completed a prefix into the only flag starting with it:
slots.py --emulator read profiles from a directory named after the
emulator and reported nothing, and pipeline.py --all built every pack
variant. Every parser now refuses an abbreviation.
2026-10-18 05:30:58 +02:00
Abdessamad Derraz 88a3bb8953 fix: let auto_fetch read lists and keep held files
auto_fetch stopped on any profile listing several accepted hashes,
and filed a fetched file in the first folder sharing one word of its
system, overwriting a same-named revision held there. Hash fields are
read as sets, a folder must match the whole system slug, and another
revision goes to .variants/ beside the file already held.
2026-10-18 05:30:10 +02:00
Abdessamad Derraz cc7f9fbdac docs: say what the pack installers really do
The EmuDeck pack README promised standalone keys set up
automatically, which needs --standalone-copies, and named a Citra
folder the installer never uses. The RetroArch README gave Windows
users a shell command only, and RetroPie's sent a PC to a Linux
partition it cannot open. Each guide now matches the installer.
2026-10-18 05:28:31 +02:00
Abdessamad Derraz 8d0b6d5f93 fix: find RetroArch in Steam libraries and ES-DE
The installer looked for retroarch.exe in C:\RetroArch-Win64 and
Program Files\RetroArch only, so a RetroArch under Program Files\
RetroArch-Win64, in a Steam library on another drive, or in an
installed ES-DE's Emulators folder went undetected. All three are
searched; Steam libraries come from Steam's own library list.
2026-10-18 05:26:39 +02:00
Abdessamad Derraz d0312428e4 fix: let the parity test pass a complete system
The system pack parity test guarded against an empty parse by
requiring files to stay missing, so it would fail once the MSX and
Neo Geo gaps are collected. It now requires both reports to have run
and the pack's own missing count to match the lines it parsed.
2026-10-18 05:24:10 +02:00
Abdessamad Derraz d3dd045c04 fix: let --write run the report it writes from
romset_recipes --identify --write ran only the identification, so
the reconstructions --write saves were never computed and the run
exited 0 having written nothing. --write now implies --missing.
2026-10-18 05:21:06 +02:00
Abdessamad Derraz 999a77a96a fix: refuse a data key the platform does not use
Under --key the platform restriction was not applied, so dolphin-sys
was downloaded again for RomM, which never reads it. A key whose
platforms exclude the one named is now refused.
2026-10-18 05:20:25 +02:00
Abdessamad Derraz 32d32e5718 fix: refuse validate_pr flags it would drop
Named files beside --changed were replaced by the git diff, and the
run reported no changed files about files it never read; --json
beside --markdown dropped the markdown. Both combinations are now
refused, and an empty JSON run prints an empty list.
2026-10-18 05:20:03 +02:00
Abdessamad Derraz 1df23e3f7d fix: check verify applies the flags it accepts
The mode and flag matrix only tests refusals, so a flag verify
accepted and ignored, --verbose under --json, passed it. Each mode is
now checked to change its output when that flag is given.
2026-10-18 05:19:31 +02:00
Abdessamad Derraz c28895ffdd fix: hold the scripts to stdlib and pyyaml
The build scripts are documented as needing only the standard
library and pyyaml, and the Windows downloader none of it, but CI
installs both pyyaml and jsonschema's tree, so a stray import would
pass everywhere it is tested. The suite now scans every import and
runs the downloader with yaml unavailable.
2026-10-18 05:18:56 +02:00
Abdessamad Derraz 5a32a42d25 fix: pass the installer's own lint gate
install.py held a local it never read and, since the registry path
rules, a loop variable shadowing the platform module, so the py38
ruff gate the installer is held to failed. Both are fixed, and the
suite reads the two rules from the syntax tree since CI has no ruff.
2026-10-18 05:18:08 +02:00
Abdessamad Derraz e04646d67a fix: stop the MAME scrape on a clone with no pin
A failed rev-parse in the MAME clone returned an empty commit, which
was cached for a day and let the merge advance the profile's version
and refs while its upstream pin stayed on the previous release. The
scrape now stops instead.
2026-10-18 05:15:52 +02:00
Abdessamad Derraz baf635cf4e fix: refuse to pack an archive that fails its CRC
The deterministic rebuild raises on a member whose bytes fail their
CRC, and the builder caught it and copied the damaged archive into
the pack, expecting verify to flag it, which nothing did. The run now
stops on it and names the file to restore.
2026-10-18 05:15:15 +02:00
Abdessamad Derraz cc18b4f2d6 fix: detect platforms the registry describes
The registry declares where each platform keeps its BIOS and every
manifest publishes it, but the installer detects before it fetches
any manifest and never had RetroPie, BizHawk, RetroBat's paths, or
EmuDeck's default folder. It now carries the registry's path rules,
held equal to the registry by a test.
2026-10-18 05:13:20 +02:00
Abdessamad Derraz 5af79140fd chore: regenerate manifests with copy sources 2026-10-18 05:10:08 +02:00
Abdessamad Derraz 91b378d641 fix: copy standalone files from their pack path
The registry names one path per standalone copy for every platform,
but each manifest places the file its own way, so the installer
looked where the pack had put nothing and copied nothing: EmuDeck's
aes_keys.txt for Azahar, Batocera's switch/prod.keys. Each manifest
copy now names its source, which the installer validates and reads.
2026-10-18 05:09:05 +02:00
Abdessamad Derraz 648784d875 fix: run the suite so its package setup applies
The documented command, discover tests, makes tests/ the top level,
so tests/__init__.py never ran and the variable it sets to keep tests
offline was missing from every local run. Every documented and CI
run now passes -s tests -t ., and a test requires it.
2026-10-18 05:05:09 +02:00
Abdessamad Derraz 57ee910f37 fix: isolate the miscompute test from its cache
The test simulates a miscompute on a real held file. Since the
manifest hash cache is keyed by the expected sha1, a result another
test verified for the same file is a valid hit, and in a single
process run the simulated miscompute was never hashed. The class
starts from an empty cache.
2026-10-18 04:57:25 +02:00
Abdessamad Derraz 9a4228ae81 chore: regenerate manifests and readme 2026-10-18 04:47:30 +02:00
Abdessamad Derraz 168e569b11 chore: trigger the site only on its own inputs
The site deploy still triggered on seven scripts it stopped importing
when the pack and site modules were split, and on the test suite it
never runs, so a builder-only push rebuilt the site for nothing. The
triggers now match the build's import closure in both directions.
2026-10-18 04:16:14 +02:00
Abdessamad Derraz e0bf0ee191 fix: make a patched test patch what actually runs
A test isolated the extra collection by patching
resolve_platform_cores on packextras with create=True, while the
module imported it inside the function, so the real resolver ran.
The import is now module level, the test checks its stub was called,
and no test may create the attribute it patches.
2026-10-18 04:15:05 +02:00
Abdessamad Derraz ef0023d78c fix: key the manifest hash cache by its check
The cache of manifest hashes was keyed by the database's id without
holding the database, so a freed database replaced at the same
address got another scan's verified hashes back. The key now carries
the sha1 that database expects for the path.
2026-10-18 04:13:32 +02:00
Abdessamad Derraz 5a4432742c fix: clear an export's old files before writing
An export wrote into its platform directory without removing what an
earlier run left there, so RetroPie scriptmodules and RetroDECK
manifests the current truth no longer corrects stayed beside a
report saying they were untouched. Files the run does not produce
are now removed first.
2026-10-18 04:11:54 +02:00
Abdessamad Derraz 482207264c fix: patch RomM's fixture instead of rebuilding it
The RomM export fetched known_bios_files.json and never read it: the
fixture was rebuilt in our own order, so three corrections came out
as a diff of the whole file and a key we had not transcribed was
deleted. The export now starts from RomM's file, keeps its order and
fields, and only changes the values it corrects.
2026-10-18 04:11:15 +02:00
Abdessamad Derraz b5c4e7340b fix: keep System.dat lines indented with spaces
libretro indents 39 rom lines of System.dat with spaces. The export
read tab-indented lines only, so those left the base and came back
re-rendered at the end of their section, and one our transcription
lacked would have been deleted. Any indentation is read and kept.
2026-10-18 04:10:21 +02:00
Abdessamad Derraz 23d9474f41 fix: serve BizHawk's database as BizHawk wrote it
The export only indexed firmware BizHawk leaves unhashed on purpose,
per-console dumps declared with SHA1Checksum.Dummy, and could only
apply that hash to a same-named call of another system. Every hash
the file states is BizHawk's own, so nothing is rewritten and no
correction is reported.
2026-10-18 04:09:40 +02:00
Abdessamad Derraz 9c0a430f5c fix: settle export sizes, never write None
A truth that accepts several sizes left an export with no size even
where the platform states one of them for the same dump, and RomM's
fixture then received the string None, which RomM cannot parse. A
size list now admits the platform's own size, RomM keeps its value
when nothing settles one, and validation requires a number.
2026-10-18 04:07:57 +02:00
Abdessamad Derraz c6c216ecb5 fix: untag brd.rom, chosen by content, not region
ep128emu loads brd.rom when the content name carries the TOSEC tag
[req brd-rom], whatever the user's country, as it loads hun.rom for
[req zrom]. The Germany region on brd.rom described a territory
choice the code never makes.
2026-10-18 04:06:39 +02:00
Abdessamad Derraz f5a23922bf fix: list fmgen's rhythm samples as files
NP2kai's two rhythm engines open different spellings, lowercase for
the built-in one and uppercase for fmgen, and nothing folds case,
so the uppercase names are files of their own rather than aliases.
fmgen's 2608_RYM.WAV fallback is opened without the directory and
is no longer claimed under np2kai/.
2026-10-18 04:05:35 +02:00
Abdessamad Derraz d5f40a4515 chore: drop the shared groups no platform reads
Six of the eight shared groups injected nothing: three were
included by no platform, three repeated System.dat entry for entry,
so a correction made in them reached no pack. They are removed with
their scraper wiring, and a test requires every remaining group to
contribute an entry somewhere.
2026-10-18 04:03:01 +02:00
Abdessamad Derraz b6f6798c15 fix: place a standalone build's gaps at its path
The gap report took a file's libretro path even where the platform
runs the standalone build, so it named Cemu/keys.txt for Batocera
while verify named keys.txt, and settled the declaration on a slot
the platform never fills. Both now read standalone_path there.
2026-10-18 04:01:02 +02:00
Abdessamad Derraz df288f8c33 fix: drop np2kai font.rom, a fallback of FONT.ROM
The np2kai shared group declared font.rom as a second required file
while NP2kai reads it only when FONT.ROM, which System.dat already
declares, is absent. Case-sensitive platforms packed the font twice.
A shared group may now add a second spelling only where some code
opens that spelling itself, as the two rhythm engines do.
2026-10-18 03:59:37 +02:00
Abdessamad Derraz c047b3828d fix: write a cached original and its URL together
The export cache wrote an original's bytes, then recorded the URL
that produced them under a separate lock, so two runs wanting two
revisions of one file could pair one's bytes with the other's URL.
Both now change under the one index lock.
2026-10-18 03:56:35 +02:00
Abdessamad Derraz 94ca509d3e fix: hold the data trees for the whole pipeline
The pipeline held its output directory for the run but let each step
lock the data directory trees on its own, so another session's
refresh could swap a tree between the packs and the manifests. The
trees are now held shared from right after the pipeline's own
refresh until it exits.
2026-10-18 03:55:51 +02:00
Abdessamad Derraz 383960212d fix: swap a pack in only once it is complete
Packs were opened on their final name, so a rebuild truncated the
previous one and a build that failed half way left a readable ZIP
of part of the files. Each pack is now written beside its name and
replaces it only when the write finished.
2026-10-18 03:54:59 +02:00
Abdessamad Derraz 164bc9e207 fix: ask again for a tag that was not there yet
A tag looked up before it was pushed was cached as absent for good,
so a profile pinned on that release was never recognised as frozen
on it. The absence now expires; a tag found stays cached.
2026-10-18 03:53:36 +02:00
Abdessamad Derraz 2a13e3ee11 fix: recount commits touching a path once stale
The commit list behind the triage drift score was cached for good,
so pushes upstream never moved a profile up the triage. It now
expires like the other moving answers.
2026-10-18 03:53:12 +02:00
Abdessamad Derraz 2dcb49fa4c fix: keep a held file in emulator region packs
Emulator mode reduced region groups without knowing which files the
collection holds, so a requested-region image nobody had collected
withdrew the held one and left the slot empty. Platform mode already
kept it; both emulator readers now pass the database.
2026-10-18 03:52:47 +02:00
Abdessamad Derraz a40a68c1f7 fix: group a system once whatever its spelling
The platform's files and the core extras for the Master System sat
in two region groups, sega-master-system and sega-mastersystem,
reduced apart. A US pack kept the declared Japanese BIOS. A core
extra's system group now takes the platform's spelling, in the pack,
the report and the installer's manifest fields alike.
2026-10-18 03:51:57 +02:00
Abdessamad Derraz 97c973c7e2 chore: regenerate manifests and readme 2026-10-18 03:48:26 +02:00
Abdessamad Derraz cab70e16b3 fix: skip the citation checks without jsonschema
The doubled-path tests import validate_schemas, which needs
jsonschema; without it the suite erred instead of skipping, which
the optional dependency check refuses.
2026-10-18 03:24:43 +02:00
Abdessamad Derraz e9da4d72ed fix: write one truth model per target, not alias
generate_truth named a narrowed model's directory after the target
as typed, so three aliases of one target wrote three copies, and
the pipeline rebuilt the slug by hand to diff it. One function now
names the directory from the canonical target for both.
2026-10-18 02:55:45 +02:00
Abdessamad Derraz 44d363e739 fix: name a target the way each platform files it
A target was canonicalised once for the run and kept as typed under
--all when platforms file it differently, so the --all build and a
--platform check named the same Batocera pack two ways. Each pack,
group, manifest and expected name now takes the target as its own
platform files it.
2026-10-18 02:53:33 +02:00
Abdessamad Derraz 78902ccc6a fix: name the flag one-per-slot conflicts with
--platform --system --one-per-slot was refused with a message
asking for --platform, which the command carried. The refusal now
names --system or --emulator, and every refusal in the mode matrix
is checked never to ask for a flag it was given.
2026-10-18 02:52:02 +02:00
Abdessamad Derraz 9ba63e6a54 fix: refuse a platform list where one is taken
generate_pack split --platform on commas to validate it, then used
the whole string as one platform and crashed. Every script takes a
single platform; a list is refused with a message pointing at --all.
2026-10-18 02:50:58 +02:00
Abdessamad Derraz 1bdfb8d75e fix: list passing entries in verbose verify JSON
verify accepted --verbose beside --json and dropped it in every
mode, so the output was the same with or without it. The JSON now
lists every entry with its ground truth under --verbose.
2026-10-18 02:50:18 +02:00
Abdessamad Derraz 8a9d6919d9 feat: record the pin a prose reread confirmed
A prose citation whose text lived under several pins stayed in
read again until the text changed, so fixnes, zesarux and emucorex,
exact at their pins, would have refused every later bump.
prose_written_at names the pin a reader confirmed; it settles the
readings and never overrides a history with one candidate.
2026-10-18 02:49:24 +02:00
Abdessamad Derraz a5f41511cc fix: read a semicolon as a citation separator
lynx-emu cites the mednafen upstream after a semicolon, which the
prose scanner did not treat as a list delimiter, so the citation
was charged to the fork the profile was read from.
2026-10-18 02:47:37 +02:00
Abdessamad Derraz 9802804a9a fix: tell an offline cache miss from absence
Offline, fetch_file answered None for a path the cache never
stored, the same answer as a path known to be absent, and
profile_sync reported existing files as gone. A miss now raises
NotCachedError and the profile is reported unverified.
2026-10-18 02:46:57 +02:00
Abdessamad Derraz b91449590d fix: follow an upstream the port vendors as module
libretro/TIC-80 builds nesbox/TIC-80 through its core submodule
and tic80's upstream_commit is that submodule commit. Compared to
nesbox HEAD, profile_sync reported changes the shipped core never
had, and a bump would have moved the pin past it. When an upstream
pin is a submodule pointer of the source pin, its head is the
pointer at the source HEAD.
2026-10-18 02:45:27 +02:00
Abdessamad Derraz 99d9ac12c2 fix: hold reicast on the commit Recalbox builds
reicast documents the revision Recalbox's reicast.mk pins, far
behind master. Compared to HEAD it reported refs nobody could act
on; pin_frozen now says why the pin is held.
2026-10-18 02:43:50 +02:00
Abdessamad Derraz 0450ab1b72 fix: cite primehack's Realtek loader at its pin
A comment named the Bluetooth directory twice, a path no revision
holds, and every firmware ref sat ten lines above the case it meant.
Each now cites its case and return at the pinned commit. The schema
check reads profiles as text and refuses a citation that repeats
its own directories.
2026-10-18 02:43:06 +02:00
Abdessamad Derraz 35c067fcc0 fix: collect the BAM 1.5-408 build fploader names
The profile documents BAM 1.5-408 but the collection held the
1.5-360 BAM.dll and renderingengine.dll, served by name. ravarcade
still serves BAM_v1.5-408.zip; its two DLLs become the primaries,
with hashes, and the 1.5-360 builds stay as variants.
2026-10-18 02:41:38 +02:00
Abdessamad Derraz 89b22944ef fix: collect the C-BIOS 0.29 notes msx-emu ships
The entry documents the 0.29 notes and declared no hash, so the
0.23 notes in the C-BIOS machine folder were served by name. The
file comes from MSX.emu's res/firmware at the profile's pin.
2026-10-18 02:41:38 +02:00
Abdessamad Derraz 1101c7640b fix: let a primary beat its variant across casing
Only a .variants/ copy matched IPLROM.X1 exactly, so x1 got
Recalbox's second md5 while iplrom.x1, the dump every platform
pins, sat beside it. When every exact-case match is a variant, a
primary in the same directory under its own name joins the
candidates. Another machine's font.rom or an alias pointing at a
different file does not.
2026-10-18 02:36:12 +02:00
Abdessamad Derraz fd6ae1f5c9 fix: strip only a hash suffix off variant names
slots dropped the last extension of any .variants/ name, so a
variant stored under its plain name (63 of them, aes.zip among
them) was not the family of its primary and a platform declaring
both at one path would read as a collision. The database already
stripped an eight-hex suffix only; both now read one function.
2026-10-18 02:33:10 +02:00
Abdessamad Derraz 6448a1ab3d chore: regenerate manifests and readme 2026-10-18 02:31:13 +02:00
Abdessamad Derraz 5fa3f2aebe fix: drop variants whose bytes a file holds
A copy under .variants/ exists to hold a content its primary does
not. 29 held bytes another file already carried, under a second or
third identity: msx.rom and MSX.ROM variants equal to
MSX_8020-20bios.rom, naomi2.zip.da79eca4 whose suffix named the
primary's sha1 rather than its own. dedup now removes such a copy,
keeping one when only variants hold the content. The LaserActive
PAC-S10 BIOS lived only under .variants/ while RetroBat names it
without a hash; it moves beside its siblings.
2026-10-18 02:31:13 +02:00
Abdessamad Derraz d68e5602bd fix: list the ROMs Flycast opens in each archive
naomi_roms.h opens each BIOS archive member by filename, one per
region. Without the names, a copy of hod2bios.zip lacking
epr-21329.ic27 counted as the archive and Japan games had no BIOS.
2026-10-18 02:30:57 +02:00
Abdessamad Derraz 7d1b8435bc fix: rank same-named archives by what they hold
The name step only ranked archive copies by members declared
through archive sub-entries, and the contents an archive entry lists
never reached the resolver, so the first copy indexed won. contents
now ranks copies by crc32, or by member name where the code opens
by name, and the report and both extra passes carry it. With no
layout declared, a primary holding every ROM of the others wins;
two revisions keep the index order.
2026-10-18 02:30:53 +02:00
Abdessamad Derraz da59b20aa6 fix: file the Roland ROMs under Roland
The four MT-32 and CM-32L ROMs had a second copy in the Amiga
tree, and the identity exemption that hid the crossing named a
DOSBox tree instead. The copies move next to the Munt ROMs already
under Roland, and each exemption now names the makers it covers,
so a copy under a third one is reported.
2026-10-18 01:25:50 +02:00
Abdessamad Derraz e4960dd4f8 fix: declare EmuDeck's emulators as standalone 2026-10-18 01:19:52 +02:00
Abdessamad Derraz fad4fa6d7e fix: read core files in verify as the builder does 2026-10-18 01:18:32 +02:00
Abdessamad Derraz 3766588ec1 fix: keep tree entries out of the asset store 2026-10-18 01:16:28 +02:00
Abdessamad Derraz faa8af0800 refactor: annotate every remaining signature 2026-10-18 00:44:20 +02:00
Abdessamad Derraz 5961b6bfe7 refactor: annotate the shared pack and lock api 2026-10-18 00:03:59 +02:00
Abdessamad Derraz 27d119cb7f fix: scrape targets at the pinned platform release 2026-10-18 00:01:36 +02:00
Abdessamad Derraz cdab4e7808 refactor: keep romset build digests between runs 2026-10-18 00:00:04 +02:00
Abdessamad Derraz c507aebfba refactor: index companion files by directory 2026-10-17 23:56:41 +02:00
Abdessamad Derraz 1c280b7b3f refactor: hash each zip member once per run 2026-10-17 23:55:49 +02:00
Abdessamad Derraz 5ae83ba2fa refactor: hash each manifest file once 2026-10-17 23:54:20 +02:00
Abdessamad Derraz 0a2907bd5f feat: describe emulator pages in structured data 2026-10-17 23:52:50 +02:00
Abdessamad Derraz 43af290102 feat: link and list every file on site pages 2026-10-17 23:51:02 +02:00
Abdessamad Derraz bd6617cc6a fix: describe absent claims in the manifest schema 2026-10-17 23:09:46 +02:00
Abdessamad Derraz e1510f94f8 fix: list each file to source on the gaps page 2026-10-17 23:08:40 +02:00
Abdessamad Derraz fd16764e0c fix: keep the gap report readable 2026-10-17 23:06:32 +02:00
Abdessamad Derraz 47a8c418e4 refactor: drop the unused cli mode validator 2026-10-17 23:05:57 +02:00
Abdessamad Derraz 09eb4f4ef3 fix: show exclusions and every verify-packs error 2026-10-17 23:05:48 +02:00
Abdessamad Derraz c4c87a5f7a fix: fetch data directories before CI tests 2026-10-17 23:01:49 +02:00
Abdessamad Derraz 29bb72c7ec chore: regenerate the install manifests 2026-10-17 23:00:32 +02:00
Abdessamad Derraz 0bac022c2b fix: replay absent core claims when narrowing 2026-10-17 22:21:50 +02:00
Abdessamad Derraz 20bdd381ec fix: offer every platform in the missing BIOS form 2026-10-17 21:21:56 +02:00
Abdessamad Derraz 08730575aa fix: pass the installer status through install.ps1 2026-10-17 21:21:41 +02:00
Abdessamad Derraz e089cb86e3 docs: align tools and release pages with the code 2026-10-17 21:20:26 +02:00
Abdessamad Derraz 727d1a2207 fix: derive catalog entries from romset members 2026-10-17 21:19:22 +02:00
Abdessamad Derraz 55631a2fbc fix: end listings quietly when the reader leaves 2026-10-17 20:50:22 +02:00
Abdessamad Derraz 6c0bcb64f1 chore: publish the emudeck target lists 2026-10-17 20:50:10 +02:00
Abdessamad Derraz de8e7ff02e fix: separate message parts with a colon 2026-10-17 20:47:22 +02:00
Abdessamad Derraz 0136d8a240 fix: take auto_fetch targets from verify 2026-10-17 20:45:50 +02:00
Abdessamad Derraz e93fe09a88 fix: read the buildbot system index for freshness 2026-10-17 20:44:47 +02:00
Abdessamad Derraz 33562e69aa chore: rescrape the emudeck target lists 2026-10-17 20:44:00 +02:00
Abdessamad Derraz 8375e11680 fix: check the names a single-target platform runs 2026-10-17 20:43:51 +02:00
Abdessamad Derraz d01c1b7085 fix: count romset members on the Wanted page 2026-10-17 20:31:39 +02:00
Abdessamad Derraz 5cb79bb2f7 fix: keep the test suite offline everywhere 2026-10-17 20:31:09 +02:00
Abdessamad Derraz d6c8186ccb fix: refuse pack flags with pipeline --skip-packs 2026-10-17 20:30:25 +02:00
Abdessamad Derraz e85819e0e4 fix: name the files the installer skipped 2026-10-17 20:29:55 +02:00
Abdessamad Derraz 262cb5e438 fix: list core files nobody holds as omissions 2026-10-17 20:28:31 +02:00
Abdessamad Derraz 2c61a909f7 fix: find RetroArch where Windows and macOS keep it 2026-10-17 20:26:02 +02:00
Abdessamad Derraz f0e015b60a chore: regenerate manifests and readme 2026-10-17 20:23:31 +02:00
Abdessamad Derraz 4a09412ae6 fix: fail a pack run missing its data directories 2026-10-17 19:41:35 +02:00
Abdessamad Derraz 785c5bef8c fix: give the Lakka pack its own install guide 2026-10-17 19:40:05 +02:00
Abdessamad Derraz 08f296138f fix: read target overrides as the builder does 2026-10-17 19:38:47 +02:00
Abdessamad Derraz d7f382339c chore: name the platform core in export fixtures 2026-10-17 19:38:08 +02:00
Abdessamad Derraz ba2fee0920 fix: count emulator page files by slot 2026-10-17 19:36:44 +02:00
Abdessamad Derraz 18e61fabcb refactor: read the asset registry with one parser
generate_pack kept a private .gitignore parser whose cache ignored the
root it was asked about, and generate_db a copy of the shared one. Both
now read largefiles.load_registered_paths, cached per root. Test modules
whose main block preceded their last class end with it again.
2026-10-17 19:35:42 +02:00
Abdessamad Derraz 0754d3b64f fix: name each exported addition's core
Batocera, ROCKNIX and Recalbox find a file through the core that wants
it. Additions now carry that core under the platform's own name: the
emulator/core pair checkBios reads (ROCKNIX's from its emulators
package), or Recalbox's core attribute. One with no nameable core, or
filed in a system gated on another core, is counted as not stated.
2026-10-17 19:34:30 +02:00
Abdessamad Derraz e9f9260301 fix: keep one dump per exported hash record 2026-10-17 19:26:46 +02:00
Abdessamad Derraz d165005a78 fix: lock the installer's partial downloads 2026-10-17 19:25:41 +02:00
Abdessamad Derraz 1ffc0a6937 fix: hold data directories while packs read them 2026-10-17 19:22:50 +02:00
Abdessamad Derraz d98f00cfbc fix: compare release digests, not only sizes 2026-10-17 19:20:24 +02:00
Abdessamad Derraz d600a54a6e fix: report core files as the builder declares 2026-10-17 19:19:05 +02:00
Abdessamad Derraz 02ab1556cf fix: report region fallback groups in verify 2026-10-17 19:17:41 +02:00
Abdessamad Derraz c7737d629e fix: publish target lists as the builder reads 2026-10-17 19:16:30 +02:00
Abdessamad Derraz 22eed69f9d fix: check content on a gap report name hit 2026-10-17 19:15:52 +02:00
Abdessamad Derraz af5d6e77d1 fix: place openMSX ROMs under share/systemroms 2026-10-17 19:14:00 +02:00
Abdessamad Derraz 355939d1d9 fix: align three region tags with their code 2026-10-17 19:11:51 +02:00
Abdessamad Derraz 490b95c16c chore: regenerate the libretro manifests 2026-10-17 19:11:07 +02:00
Abdessamad Derraz e6c29452f9 fix: never drop a held file for a missing region
Region filtering ranked every declared file, held or not, so a request
answered only by a missing file dropped the held fallback and emptied
the slot. Only held files now decide what gives way; the missing better
match stays reported.
2026-10-17 18:31:56 +02:00
Abdessamad Derraz 5cfcb9e746 fix: group missing regional core files by region 2026-10-17 18:28:49 +02:00
Abdessamad Derraz 7fe65936e0 fix: apply verify --strict in every mode 2026-10-17 18:26:57 +02:00
Abdessamad Derraz e319be1c19 fix: rank the triage when a forge refuses a lookup 2026-10-17 18:25:44 +02:00
Abdessamad Derraz 9992490854 fix: track citations a source_ref part drops
Annotations and text after a located head were discarded before
anchoring, so a citation written there never moved with its pin:
zesarux cited two macros four lines off. The leftover text of every
source_ref is now scanned as prose, and the two citations are fixed.
2026-10-17 18:25:03 +02:00
Abdessamad Derraz f036bce930 fix: cite profile code as path:line
Sixteen prose citations wrote "file fn() lines N-M", a form the pin
tracker never reads, and four had fallen behind their pins. Each is now
a repository path with the span read at the profile's pin, and a test
refuses the untracked form.
2026-10-17 18:23:21 +02:00
Abdessamad Derraz dce9c6e8f1 fix: hold the MAME clone step to name rules 2026-10-17 18:21:27 +02:00
Abdessamad Derraz 425a0de0e5 fix: check size and adler32 on data directory hits
A data directory copy found by name was returned without the size and
Adler-32 checks the name steps over bios/ apply. The verdict now runs
both, for the cache walk, the foreign-tree fallback and release assets.
2026-10-17 18:20:49 +02:00
Abdessamad Derraz 5a3d9bdc9d fix: resolve the DSP ROMs as a pair the code takes
Dolphin and its forks hash dsp_rom.bin and dsp_coef.bin together and
warn on any combination outside known_roms. The profiles now carry the
accepted pairs, and the resolver keeps both files inside the first pair
the collection holds whole: MMJR and Ishiiruka were served the free ROM
beside the official coefficients.
2026-10-17 18:20:00 +02:00
Abdessamad Derraz d41933cdcf fix: let agnostic profiles claim no slot
A filename-agnostic profile ships its scan candidates, never its named
entries, and the gap report skips it whole. Its entries no longer
arbitrate a destination: RetroArch keeps the GameIndex.yaml it declares
instead of the ARMSX2 copy.
2026-10-17 18:16:44 +02:00
Abdessamad Derraz a58b65754b fix: count a core file filling a declaration
In existence mode the builder packs a core's file at a destination the
platform declares and does not hold, and counts the declaration met.
verify now reads the same placement and reports it OK, so both sides
agree on the platform's count.
2026-10-17 18:14:26 +02:00
Abdessamad Derraz 2e52f06896 fix: accept every version a profile lists by name
A profile lists each version its code takes under one name. The core
extra carries the first; a held copy matching another entry of the same
profile is no longer reported as a hash discrepancy.
2026-10-17 18:11:38 +02:00
Abdessamad Derraz 490fefac97 fix: build slot overrides from the loaded profiles 2026-10-17 17:55:00 +02:00
Abdessamad Derraz d46f05699c chore: regenerate the rocknix manifest and readme 2026-10-17 17:02:33 +02:00
Abdessamad Derraz e506cbeb2f fix: identify the files daedalus and touchhle ship 2026-10-17 16:58:37 +02:00
Abdessamad Derraz bf13db93f8 chore: publish recalbox and rocknix target lists 2026-10-17 16:45:09 +02:00
Abdessamad Derraz 3080b0ad93 chore: regenerate database, manifests and readme 2026-10-17 16:45:05 +02:00
Abdessamad Derraz f749ad38ff fix: read each europe-only region tag in its code
Region tags must name the territory the code selects a file for. Each
entry tagged europe alone was read at its pin: PAL branches Australian
media reach now include oceania, and tags that follow a video standard,
a user setting or a hardcoded value are removed.
2026-10-17 16:13:31 +02:00
Abdessamad Derraz 9db68c9d52 fix: refuse a yaml mapping that repeats a key 2026-10-17 15:52:59 +02:00
Abdessamad Derraz a8bfadd4c1 feat: list recalbox cores per board
Recalbox builds seven board images with different emulators. The new
target scraper reads each board's defconfig against the package every
system.ini core names. The names that reached no profile are mapped to
the projects Recalbox builds or profiled from their source, and the
mupen64plus video plugins are set aside.
2026-10-17 15:51:39 +02:00
Abdessamad Derraz d9c74888e8 feat: list rocknix cores per device
ROCKNIX builds a different emulator set per SoC, and without a target
list an H700 handheld received the PS2, PS3 and GameCube firmware of
emulators its image lacks. The new target scraper reads the emulators
metapackage per device; seven cores ROCKNIX ships get profiles and the
Super Famicom Box ROMs one of them needs are collected.
2026-10-17 15:38:07 +02:00
Abdessamad Derraz 7fd82d452f fix: read gitlab subgroup repositories whole 2026-10-17 15:37:23 +02:00
Abdessamad Derraz b023a9fd53 feat: watch the emulatorjs release romm installs 2026-10-17 15:16:39 +02:00
Abdessamad Derraz d2a3c0bc3c feat: show who pins each variant on system pages 2026-10-17 15:12:21 +02:00
Abdessamad Derraz 0cfaf06735 fix: show where each platform file goes 2026-10-17 15:10:40 +02:00
Abdessamad Derraz de30a43441 feat: link each emulator page to its pinned commit 2026-10-17 15:10:09 +02:00
Abdessamad Derraz 13b7177c88 feat: publish one row per accepted hash 2026-10-17 15:08:22 +02:00
Abdessamad Derraz 36dda46ddd fix: resolve api catalog links from the catalog 2026-10-17 15:06:50 +02:00
Abdessamad Derraz 5cc45794f4 docs: show installer runs as they really print 2026-10-17 15:06:04 +02:00
Abdessamad Derraz 4d365ff57f fix: index each data directory once per run 2026-10-17 15:02:01 +02:00
Abdessamad Derraz 1ca37e429e fix: build only recipes whose members match 2026-10-17 15:00:35 +02:00
Abdessamad Derraz b3783e0780 feat: cache zip member hashes by archive content 2026-10-17 14:56:08 +02:00
Abdessamad Derraz 370946e1ce fix: stream each pipeline step as it runs 2026-10-17 14:53:57 +02:00
Abdessamad Derraz 3951843180 feat: collect the fm towns hr and fresh tv sets 2026-10-17 14:51:14 +02:00
Abdessamad Derraz 426d3c619d fix: let a platform's only target filter nothing 2026-10-17 14:48:35 +02:00
Abdessamad Derraz 8d39b1a270 chore: rebuild the site when derivations change 2026-10-17 14:43:47 +02:00
Abdessamad Derraz 4f8f02793a chore: regenerate database, manifests and readme 2026-10-17 14:16:34 +02:00
Abdessamad Derraz 2de8e11489 feat: list retroarch's linux arm64 and x86 targets 2026-10-17 13:41:10 +02:00
Abdessamad Derraz 1fb7b1572e feat: profile geartowns, coolbaremu and xenia_edge
The buildbot publishes four cores no profile named. Geartowns (FM
Towns) and CoolbarEmu get profiles read from their source, Xenia Edge
gains its libretro build, and pokketstation follows its repository's
rename to Pokket, re-read at HEAD.
2026-10-17 13:40:17 +02:00
Abdessamad Derraz 0fc71793a9 feat: mark catalog gaps a held dump contains 2026-10-17 13:40:05 +02:00
Abdessamad Derraz f38ecdced4 feat: collect scummvm and fbneo pinned revisions
RetroArch pins 23 ScummVM engine-data files and FBNeo's hiscore.dat at
revisions upstream history still holds; they are now collected. The
two profiles claim the revision their core is built from, so the pack
keeps serving the core its own files and the pins sit beside them.
2026-10-17 13:39:49 +02:00
Abdessamad Derraz 0ae0000ec4 feat: find a pinned file in its upstream history 2026-10-17 13:39:30 +02:00
Abdessamad Derraz 697eecfe80 fix: skip an unread zip index in verify --emulator 2026-10-17 13:29:29 +02:00
Abdessamad Derraz 8f0b992c11 fix: name each archive romset_recipes cannot build 2026-10-17 13:27:15 +02:00
Abdessamad Derraz 9a14c89abd fix: serve generaluser gs to every dosbox 2026-10-17 13:25:38 +02:00
Abdessamad Derraz 0ea8bb4e99 fix: list a short set of names in full
The declared-names test now builds its own platform: Batocera files the BK under elektronika-bk since its slug map was completed, so the real data no longer shows two ids for one name.
2026-10-17 13:21:14 +02:00
Abdessamad Derraz dbcd26d3ab fix: file every platform system under a known id
Thirty platform system ids, such as sufami, pokemini, vsmile, and
Recalbox's comma-joined msx1,msx2, matched no system any profile
names, so no core file was attributed to them and --system missed them.
The scraper maps now carry those names, and a test holds every platform
system to a profile system apart from two named folds.
2026-10-17 12:47:22 +02:00
Abdessamad Derraz 0894b67d3f feat: read recalbox system files in batches 2026-10-17 12:46:59 +02:00
Abdessamad Derraz 8d80ed9f90 feat: credit a pr file to the profiles that pin it 2026-10-17 12:45:40 +02:00
Abdessamad Derraz 43647eb781 fix: keep freshness values whole 2026-10-17 12:44:45 +02:00
Abdessamad Derraz feb3b03a39 fix: suggest the nearest system or emulator name 2026-10-17 12:44:22 +02:00
Abdessamad Derraz c1c3808e1e fix: tell the installer user what blocks a write 2026-10-17 12:41:45 +02:00
Abdessamad Derraz b151b21fcf fix: name an archive the resolver cannot read 2026-10-17 12:38:11 +02:00
Abdessamad Derraz 62a090be2f fix: list exclusion notes only when asked 2026-10-17 12:37:34 +02:00
Abdessamad Derraz f6b808b1d9 feat: let verify fail on a missing required file 2026-10-17 12:36:35 +02:00
Abdessamad Derraz 4544006aff feat: wait out a forge rate limit while scraping 2026-10-17 12:34:12 +02:00
Abdessamad Derraz ae0a918f74 fix: evaluate batocera's kconfig per board
The target scraper treated every select in Config.in as unconditional
and never set the symbols Buildroot sets, so nearly every board listed
the same 171 cores and xroar, which needs OpenGL, reached none. Selects
now fire from their own config, to a fixed point, from the flags each
board file sets, with Buildroot's arch and OpenGL provider rules read at
the commit Batocera pins. A board that builds no image is no target.
2026-10-17 12:33:44 +02:00
Abdessamad Derraz 856383136e feat: profile batocera vulkan quakes, supermodel
Batocera 43.1 ships vkQuake, vkQuake2, vkQuake3 and a Supermodel held
at 0eef09ba for the Raspberry Pi 4; none had a profile, so a targeted
pack dropped them. Each profile is read from the commit Batocera
builds. Collected with them: the Quake 1.06 id1/pak0.pak, the same file
in the shareware and registered releases, and the Games.xml that
Supermodel revision installs.
2026-10-17 12:33:33 +02:00
Abdessamad Derraz 9980a694e4 refactor: read pack counts in one branch
Also gives the platform typo test a scratch directory it removes.
2026-10-17 12:32:20 +02:00
Abdessamad Derraz b6331a765a fix: name the platform a typo was meant to be 2026-10-17 12:28:27 +02:00
Abdessamad Derraz 2645626684 feat: map raspberry pi models to batocera boards 2026-10-17 12:24:19 +02:00
Abdessamad Derraz c2ea021699 fix: file retrobat systems with batocera's slugs 2026-10-17 12:03:54 +02:00
Abdessamad Derraz e540dac996 fix: give one native system id one slug
RetroDECK filed coco as tandy-coco and Dragon as dragon-32-64, MiSTer
filed COCO3 as tandy-coco and Recalbox kept its raw ids, so none of
them met xroar's coco, coco3 and dragon64 and its ROMs reached no
system. The scraper maps now agree and a test holds every shared
native id to one system.
2026-10-17 11:59:38 +02:00
Abdessamad Derraz 27ddd47b20 fix: name one file per search chain for RetroPie 2026-10-17 11:54:56 +02:00
Abdessamad Derraz ec4a06e872 fix: name a System.dat addition by its path 2026-10-17 11:54:05 +02:00
Abdessamad Derraz db179faf82 fix: write no platform size beside a truth hash 2026-10-17 11:53:18 +02:00
Abdessamad Derraz 5f62597e6f fix: keep two cores' revisions of a name apart
The truth model merged a pathless entry into another core's entry of
the same name even when their contents disagreed, so the export wrote
one core's size next to the other core's md5.
2026-10-17 11:52:40 +02:00
Abdessamad Derraz 5a01a45d6b chore: hold every target core name to a profile 2026-10-17 11:50:21 +02:00
Abdessamad Derraz a51003499f refactor: drop imports the builder no longer uses 2026-10-17 11:50:00 +02:00
Abdessamad Derraz 6cc969e043 fix: judge path conflicts by the builder verdict 2026-10-17 11:47:42 +02:00
Abdessamad Derraz dcb25f4a48 chore: regenerate the bizhawk manifest and readme 2026-10-17 11:45:54 +02:00
Abdessamad Derraz 7ed5ed3cee fix: keep archives whole in verify's region filter 2026-10-17 10:43:54 +02:00
Abdessamad Derraz 83d8f62f68 fix: map bizhawk's ares to its n64 core only
BizHawk embeds ares as Ares64, its N64 core, whose 64DD IPL its own
FirmwareDatabase declares. Mapped to the whole ares profile, it pulled
thirty systems into the BizHawk pack and made slots accuse
FirmwareDatabase.cs of a wrong MSX.rom it never declared for ares.
2026-10-17 10:39:27 +02:00
Abdessamad Derraz af4b43d64c fix: tell a pack note by its name, not its path 2026-10-17 10:38:18 +02:00
Abdessamad Derraz ccb35b9b82 refactor: read the preferred-entry rule from packresolve 2026-10-17 10:38:18 +02:00
Abdessamad Derraz 5f47b77112 fix: judge prose of profiles pinned per build mode 2026-10-17 10:32:04 +02:00
Abdessamad Derraz 86043ed931 fix: count drift since the pin in profile triage 2026-10-17 10:31:48 +02:00
Abdessamad Derraz a9be4532af fix: report a refused forge as unread, not gone 2026-10-17 10:31:42 +02:00
Abdessamad Derraz 921de6a1a6 fix: refuse a truth pack a platform cannot fill 2026-10-17 10:31:02 +02:00
Abdessamad Derraz 7a6e494597 fix: name custom and system packs by their selection
Two --from-md5 runs with different hash lists wrote the same file, the
second replacing the first, and a pack limited to thirty systems built
a name longer than a file name may be. The custom pack now carries a
digest of its hash list, and a long system list keeps its first system,
a count and a digest, as the emulator pack does.
2026-10-17 10:28:11 +02:00
Abdessamad Derraz 3f68547dc3 chore: regenerate manifests and readme
Lakka and RetroPie keep the files that differ by case from a platform
name, core extras go to the claim that pins its content, and LRPS2
reads its own GameIndex.
2026-10-17 10:26:38 +02:00
Abdessamad Derraz da1b655262 fix: send lakka users to lakka's own pack 2026-10-17 10:23:02 +02:00
Abdessamad Derraz a03e8bf56e fix: untag vice's machine-model ROMs
VICE picks its C128 national kernals by MachineType and its Japanese
C64, VIC-20 and SCPU64 ROMs by the model the user sets; no code
selects them by territory, and the tags covered only some of the
national models.
2026-10-17 09:22:30 +02:00
Abdessamad Derraz e7e779910b fix: untag bluemsx's national MSX ROMs
blueMSX loads a national machine only when the user picks one; the
libretro core offers generic machine types and never selects MSXJ.rom
or MSXBR.rom by territory. The 27 tags made false claims and region
drops the data directory refilled anyway.
2026-10-17 09:22:30 +02:00
Abdessamad Derraz 4f43442036 fix: serve dolphin's PAL IPL for australia
Dolphin files the Australian country code under Region::PAL, whose
IPL lives in GC/EUR. Tagged europe alone, --region australia dropped
it and kept the American IPL, which Dolphin never reads for those
discs.
2026-10-17 09:20:13 +02:00
Abdessamad Derraz d0e9c4a8f0 fix: let a platform's own path answer its declaration 2026-10-17 09:17:52 +02:00
Abdessamad Derraz 1afe428e16 fix: credit any accepted version in the gap report 2026-10-17 08:55:02 +02:00
Abdessamad Derraz 45b58d2417 fix: write the truth model and clone map atomically 2026-10-17 08:54:29 +02:00
Abdessamad Derraz 53625156d6 fix: key the zip member index on all its inputs 2026-10-17 08:52:21 +02:00
Abdessamad Derraz d1807af791 fix: stop the scan on an unreadable database 2026-10-17 08:52:04 +02:00
Abdessamad Derraz e3c5d97b94 fix: free a path the builder refuses to fill
verify counted a declaration whose hash the frontend refuses as
occupying its path, while the builder leaves it out and a core file
takes the place; the report then called that core file missing from
the pack. It now reads the builder's verdict. The hidden-extras tests
move to RetroArch and RetroBat, which still fold case, and test the
same-bytes twin again instead of skipping.
2026-10-17 08:51:45 +02:00
Abdessamad Derraz 6e8f2df24f fix: keep both cases on lakka and retropie
Both run on Linux but inherited RetroArch's case folding, so a core
file differing from a platform name only by case left their packs:
MesenCE's bios.col and np2kai's lowercase 2608_*.wav, which those
cores open with that exact case. They are now case-sensitive, the
shared groups fold only where the platform does, and Lakka gets its
own pack instead of sharing RetroArch's.
2026-10-17 08:38:16 +02:00
Abdessamad Derraz 08b239f22a fix: resolve a name with its directory as a path 2026-10-17 08:29:34 +02:00
Abdessamad Derraz 51f3249a7d fix: give a shared core slot to the pinned claim
hypseus-singe asks for gamecontrollerdb.txt by name alone and, first
in profile order, took the BIOS root of Batocera, RetroBat and
RetroPie with C-Dogs' small table while Solarus pins its own by sha1.
A destination two cores claim now goes to the one naming its content.
2026-10-17 08:27:08 +02:00
Abdessamad Derraz 6810e8df9a fix: never prove a file by another emulator's tree
lrps2 names no hash for its GameIndex.yaml, and the only full-tail
copy was ARMSX2's: it counted as path proof and replaced the file
RetroArch pins on desktop targets, which have no ARMSX2. Upstream
PCSX2 took ARMSX2's patches.zip by name the same way. A copy in
another emulator's tree now proves nothing at any tail length, and
LRPS2's own GameIndex comes from the tree the buildbot publishes.
2026-10-17 08:12:24 +02:00
Abdessamad Derraz b9a65cd622 chore: list the rebuilt neocd.zip in recalbox's manifest 2026-10-17 07:18:30 +02:00
Abdessamad Derraz e355fe824b chore: drop a neo geo cd save from the bios tree 2026-10-17 06:02:47 +02:00
Abdessamad Derraz c1aeabc97b feat: rebuild the neocd.zip recalbox pins
Recalbox checks geolith/neocd.zip by the composite md5 of its members,
which is front-sp1.bin then top-sp1.bin: the Front and Top Loader
BIOS geolith reads inside neocd.zip, both already collected. The
archive is rebuilt as a TorrentZip variant and Recalbox's last
missing BIOS resolves.
2026-10-17 06:02:08 +02:00
Abdessamad Derraz 10f2b9965a chore: regenerate manifests, readme and site nav
Core lists now come from each platform's own sources: ROCKNIX gains
its standalone emulators, RetroBat drops the Batocera ports it never
ran, Recalbox reads its two MAME releases.
2026-10-17 06:00:25 +02:00
Abdessamad Derraz 0ac62bef96 fix: place core extras in packs as the builder does 2026-10-17 05:51:30 +02:00
Abdessamad Derraz 24d161604b fix: let retrodeck's components name its cores
The registry list added clk and gsplus, which RetroDECK does not ship
as components, current or archived, and overrode the list the scraper
reads from the component manifests.
2026-10-17 04:45:13 +02:00
Abdessamad Derraz 3395236966 feat: pack the standalone emulators rocknix ships
ROCKNIX was declared libretro-only although it packages duckstation,
dolphin, ppsspp and 33 other emulators standalone, and its BIOS list
was read on the next branch under the latest release's version. The
scraper now reads the release tag and lists RetroArch plus every
standalone package.
2026-10-17 04:45:13 +02:00
Abdessamad Derraz e09a37d21e feat: keep platform-built cores out of all_libretro
Recalbox compiles libretro/mame at 0.258 and 0.278 itself; typed
libretro, both profiles were resolved for every all_libretro platform
although the buildbot RetroArch installs from has neither. A profile
now names the platforms that build it (built_by), and is reached only
when a platform lists it by name.
2026-10-17 04:44:25 +02:00
Abdessamad Derraz d9ef6ad0ad feat: read retrobat's cores from its es_systems
RetroBat's platform file carried no core list, and a registry list
copied from Batocera stood in with ports RetroBat never runs and none
of its standalone emulators marked as such. The scraper now reads
es_systems.cfg at the release tag: libretro cores, and every other
emulator as standalone.
2026-10-17 03:40:09 +02:00
Abdessamad Derraz b25fef6297 fix: name the ports as retrobat names them
RetroBat starts Sonic 3 A.I.R., Sonic Mania, the RSDK v3/v4 ports,
Xash3D and SimCoupe as sonic3air, sonicmania, sonicretrocd,
sonicretro, xash3d and simcoupe; the profiles now list those names so
a RetroBat core list reaches them.
2026-10-17 03:40:09 +02:00
Abdessamad Derraz 6280f4c370 feat: read recalbox's cores from its system files
es_bios.xml names only the cores that need a BIOS, so a hand-kept
registry list stood in, with mame and mamemess that Recalbox does not
ship and without vice, ymir, vircon32 and others it does. The scraper
now reads each system.ini of recalbox-romfs2 at the scraped tag, and
the registry list is gone.
2026-10-17 03:31:11 +02:00
Abdessamad Derraz a4da6d205f feat: profile the MAME releases recalbox builds
Recalbox ships libretro/mame built at 0.258 and at 0.278, and no
profile described either release. mame_hash_scraper gains --release,
which reads the BIOS root sets at one mamedev tag and writes a profile
pinned to it; mame0258 and mame0278 are generated from it, every
source_ref anchored at its tag.
2026-10-17 03:31:11 +02:00
Abdessamad Derraz d0a4315427 chore: regenerate manifests and readme
Batocera gains the cores es_systems.yml offers, and Stella's KidVid
tapes leave every pack's BIOS root.
2026-10-17 03:22:40 +02:00
Abdessamad Derraz 6f0692aada chore: build a group's test pack under its given name 2026-10-17 02:52:49 +02:00
Abdessamad Derraz decd70b19e feat: pack every core batocera offers in es
Batocera's cores were read from configgen-defaults.yml, one per system,
and a hand-kept registry list overrode even that; DOSBox Staging,
melonDS DS and nine other cores a user can pick in ES were outside the
pack, while mamemess, which Batocera does not ship, was in. The
scraper now reads es_systems.yml, the registry list is gone, and the
target scraper names standalone emulators (amiberry, fsuae, vice)
instead of only the machines listed under them.
2026-10-17 02:26:14 +02:00
Abdessamad Derraz e5b8cede92 fix: agree on missing files in system packs
The emulator pack recorded only loose files as a path's occupant, so a
path an archive or data tree had filled was reported missing even with
the same bytes in the ZIP, and an archive several profiles ask for was
counted once per profile. verify registered neither, and credited one
profile's file at a path holding another's. Both now record archives
and tree members in pack order; --system snk-neogeo-mvs went from 113
missing in the pack and 51 in verify to 59 on both sides.
2026-10-17 02:20:25 +02:00
Abdessamad Derraz cb41a52b17 fix: skip region-dropped extras in the hidden report 2026-10-17 02:03:26 +02:00
Abdessamad Derraz 24f7ade261 fix: block a pin bump when git history is unreadable
realign_prose read a failing git log as an empty history and stopped
silently at an unreadable revision, so the stale-prose check answered
"nothing to move" and let --bump-commit through. It now reports such
citations to read again instead of passing them.
2026-10-17 02:00:39 +02:00
Abdessamad Derraz 03784eeceb fix: count instruction notes in pack_files 2026-10-17 01:59:50 +02:00
Abdessamad Derraz 42950a553c feat: refresh data trees once per online pipeline
Step 2 refreshed the data directories, then the pack build and the
manifest build refreshed them again, so a tree tracking a moving
branch could differ between the pack and the manifest. generate_pack
gains --no-refresh-data, which packs the cached trees and still
fetches release assets; the online pipeline passes it to both builds.
2026-10-17 01:59:20 +02:00
Abdessamad Derraz e26516fc0e fix: write a group's pack under the group's name
The RetroArch and Lakka pack was built under RetroArch's own name and
renamed afterwards, which overwrote then carried away a --platform
retroarch pack in the same directory, and failed on Windows where
os.rename refuses an existing target.
2026-10-17 01:58:15 +02:00
Abdessamad Derraz 29fb1a58e4 fix: name long emulator packs within a file name
--system snes joined 23 emulator names into the ZIP name and died
with ENAMETOOLONG before writing anything. The system pack now passes
its own name in, and an --emulator selection too long to join keeps
its first name, a count and a digest of the selection.
2026-10-17 01:57:53 +02:00
Abdessamad Derraz bf47d3d998 chore: run the pipeline to test its offline guard 2026-10-17 01:55:49 +02:00
Abdessamad Derraz 08761e250f chore: fail when the readme loses its contributors 2026-10-17 01:55:49 +02:00
Abdessamad Derraz 03275fe0b3 chore: fail the slots check when nothing is settled 2026-10-17 01:55:49 +02:00
Abdessamad Derraz 78162e7022 fix: write the database cache atomically 2026-10-17 01:54:35 +02:00
Abdessamad Derraz 9ea581d1d6 fix: reprofile virtualxt from its C core
The profile described an Odin edition no branch carries any more. At
the pinned commit core.c embeds VXTBIOS, VXTX and the EGA BIOS, never
asks for the system directory, and writes its FreeDOS image to the
save directory; an INI machine can load a ROM from a path it names.
2026-10-17 01:54:19 +02:00
Abdessamad Derraz 66905e2c5b fix: pin tic80's upstream and correct its lines
The libretro pin carries nesbox/TIC-80 as a submodule at ae1195a9.
Without upstream_commit the comparison read nesbox at the profiled
date, and the cited lines pointed at comments: valid_extensions and
need_fullpath are 339-340 there, serialization 1203-1243.
2026-10-17 01:54:19 +02:00
Abdessamad Derraz df5c846af4 fix: point np2kai citations at its pinned bios.c 2026-10-17 01:54:19 +02:00
Abdessamad Derraz f5e64e847d fix: untag 81's language ROMs from territories
EightyOne lists the Spanish and French Spectrum ROMs in a per-model
drop-down (Source/HW_.cpp) and the user picks one: the code never
selects them by territory, so --region france dropped the five Spanish
ROMs and --region spain the French one.
2026-10-17 01:53:31 +02:00
Abdessamad Derraz b3d931ca02 fix: drop the japan tag from bluemsx PAINT.rom
Only the "MSX2 - Arabic" machine config loads Shared Roms/PAINT.rom;
the Al Alamiah machines load their own copies and no Japanese machine
loads it at all. Tagged japan, it lost to CLK's msx-american.rom under
--region us and RetroDECK's md5 check reported it missing.
2026-10-17 01:53:31 +02:00
Abdessamad Derraz c14e3e90b1 fix: keep stella kidvid tapes out of bios packs 2026-10-17 01:51:15 +02:00
Abdessamad Derraz f22d4dfda1 fix: hold a collected directory in the gap report 2026-10-17 01:50:54 +02:00
Abdessamad Derraz 11b679252b fix: list only real systems as region fallbacks 2026-10-17 01:49:34 +02:00
Abdessamad Derraz 08aa0beb22 fix: tell a local DNS outage from a gone host 2026-10-17 01:47:26 +02:00
Abdessamad Derraz cd4a9143f7 fix: compare md5 one way in verify and packs 2026-10-17 01:47:16 +02:00
Abdessamad Derraz 20638fde93 fix: check packs with the builder's own verdict 2026-10-17 01:44:38 +02:00
Abdessamad Derraz 5c969a3651 fix: rank slots with the platform's own cores 2026-10-17 01:35:39 +02:00
Abdessamad Derraz 820d544d7d fix: resolve a file by its accepted adler32 2026-10-17 01:35:04 +02:00
Abdessamad Derraz e659228777 fix: let target installs match their target pack 2026-10-17 00:39:57 +02:00
Abdessamad Derraz 0a5e15789f fix: exit non-zero when torrentzip check fails 2026-10-16 22:09:57 +02:00
Abdessamad Derraz 61f49b7ac0 fix: report missing assets when no cache exists 2026-10-16 22:09:39 +02:00
Abdessamad Derraz 8892432866 fix: fail install --check when files are missing 2026-10-16 22:09:12 +02:00
Abdessamad Derraz a906a49643 fix: count swallowed network calls at import 2026-10-16 22:08:04 +02:00
Abdessamad Derraz 479ad7fd8c fix: arbitrate slots for the target and source 2026-10-16 22:07:48 +02:00
Abdessamad Derraz 1d7b6462e9 fix: keep a parent config intact under inheritance 2026-10-16 22:03:16 +02:00
Abdessamad Derraz de08f71c52 chore: regenerate readme 2026-10-16 21:06:55 +02:00
Abdessamad Derraz 346950156c fix: hash recalbox archives by their members 2026-10-16 21:06:55 +02:00
Abdessamad Derraz 3e14c9df1f fix: let a proven claim answer an unmatched pin 2026-10-16 20:05:54 +02:00
Abdessamad Derraz 598c930771 fix: claim the archives a core reads by members 2026-10-16 19:50:27 +02:00
Abdessamad Derraz 9faa3a3f79 feat: add the nmk004.zip fbneo reads 2026-10-16 19:33:48 +02:00
Abdessamad Derraz 1699caaca2 fix: pick the archive holding a core's members 2026-10-16 19:22:45 +02:00
Abdessamad Derraz a491d9728a chore: regenerate database in profile order 2026-10-16 19:22:40 +02:00
Abdessamad Derraz 5bbc69fab1 fix: skip the backup check without jsonschema 2026-10-16 19:22:40 +02:00
Abdessamad Derraz 12fcdd52a6 fix: keep every revision a core accepts in truth 2026-10-16 18:14:03 +02:00
Abdessamad Derraz b2e6a2b978 chore: keep jsonschema out of the build scripts 2026-10-16 18:10:45 +02:00
Abdessamad Derraz b6ff9c3eea chore: import every scraper with the network cut 2026-10-16 18:10:31 +02:00
Abdessamad Derraz d4e2e5ac8a fix: skip hash merge backups in every loader 2026-10-16 18:09:45 +02:00
Abdessamad Derraz 866f214e20 refactor: share the baseline verdict with the manifest 2026-10-16 17:09:08 +02:00
Abdessamad Derraz a91ffc0b83 fix: remove test scratch directories 2026-10-16 17:01:52 +02:00
Abdessamad Derraz 99b049fa96 fix: catch indented hashes in wiki sources 2026-10-16 16:58:43 +02:00
Abdessamad Derraz 4dc6af5a89 fix: send the token from the tag helper 2026-10-16 16:58:26 +02:00
Abdessamad Derraz 0b4e324054 fix: stop generate_db when pyyaml is missing 2026-10-16 16:07:04 +02:00
Abdessamad Derraz 0408c5d359 fix: state and check the 3.12 build floor 2026-10-16 16:05:10 +02:00
Abdessamad Derraz aeb1f73098 fix: run the installer under python 3.8 in ci 2026-10-16 16:00:49 +02:00
Abdessamad Derraz b2a13b1dda fix: require integer sizes in profile lists 2026-10-16 15:58:43 +02:00
Abdessamad Derraz c6cac0ad1b fix: read exportable through the exporter instance 2026-10-16 15:57:43 +02:00
Abdessamad Derraz 0198445ee4 fix: stop the core-info scrape on a failed fetch 2026-10-16 15:56:50 +02:00
Abdessamad Derraz 6b7d93fc9e fix: report profiles the forge failed to serve 2026-10-16 15:56:17 +02:00
Abdessamad Derraz a7af0445e3 fix: diff the truth against the platform's own list 2026-10-16 15:55:02 +02:00
Abdessamad Derraz 9a77ce4a34 fix: split multi-hash strings in the truth diff 2026-10-16 15:53:24 +02:00
Abdessamad Derraz 06bf6d7c09 fix: treat an empty platform system as named 2026-10-16 15:53:24 +02:00
Abdessamad Derraz 3719de71b1 fix: run the export count tests under main 2026-10-16 15:48:55 +02:00
Abdessamad Derraz cedf6ccbdd fix: count size and cleared hash changes 2026-10-16 15:48:33 +02:00
Abdessamad Derraz 5c75e7b971 fix: test retrobat through the shared md5 rule 2026-10-16 15:46:15 +02:00
Abdessamad Derraz 21dadfe3bf fix: count bizhawk fills only where written 2026-10-16 15:45:42 +02:00
Abdessamad Derraz ff243c9978 fix: keep each recalbox block and its comments 2026-10-16 15:45:05 +02:00
Abdessamad Derraz 42124618e9 fix: add no file under a system the platform lacks 2026-10-16 15:43:47 +02:00
Abdessamad Derraz ffeee246ff fix: keep retrodeck md5 lists as arrays 2026-10-16 15:42:18 +02:00
Abdessamad Derraz 3a0ae494d3 fix: keep one-value md5 blank when dumps differ 2026-10-16 15:40:44 +02:00
Abdessamad Derraz 7cb98f7c92 chore: regenerate manifests and readme 2026-10-16 15:39:09 +02:00
Abdessamad Derraz cb6c344228 chore: file pc-88 roms under pc-88 2026-10-16 14:40:43 +02:00
Abdessamad Derraz 606141a61d fix: link systems to the folder of their files 2026-10-16 14:31:46 +02:00
Abdessamad Derraz 53621fa689 fix: show each platform row its own hash 2026-10-16 14:30:40 +02:00
Abdessamad Derraz 3a6f2c8770 fix: key the opcode cache by content 2026-10-16 14:29:05 +02:00
Abdessamad Derraz d86215235e fix: keep scan copies out of region choices 2026-10-16 14:28:18 +02:00
Abdessamad Derraz f9a263f11c fix: index regions over the platform's own cores 2026-10-16 14:17:20 +02:00
Abdessamad Derraz be7a357999 fix: settle gaps by slot and size as verify does 2026-10-16 14:07:23 +02:00
Abdessamad Derraz b173a2a851 fix: place libretro dolphin files where it reads 2026-10-16 14:03:17 +02:00
Abdessamad Derraz 48b00730ff fix: never copy a path-null entry to a pack root 2026-10-16 14:03:09 +02:00
Abdessamad Derraz e40d63a7f4 chore: regenerate install manifests 2026-10-16 13:48:42 +02:00
Abdessamad Derraz 81b8dac434 fix: seed agnostic scans from the running build 2026-10-16 12:50:48 +02:00
Abdessamad Derraz 98c21f19f7 fix: count files the emulator pack drops 2026-10-16 12:49:41 +02:00
Abdessamad Derraz d049270515 fix: report core files the platform pack displaces 2026-10-16 12:49:34 +02:00
Abdessamad Derraz a41648292e fix: pin a source mirror on source_commit 2026-10-16 12:30:21 +02:00
Abdessamad Derraz 3c04a29d50 fix: resolve forgejo date pins by walking history 2026-10-16 12:29:34 +02:00
Abdessamad Derraz 7744c21b65 fix: compare citations written in comments 2026-10-16 12:28:12 +02:00
Abdessamad Derraz 8a5388db24 fix: read citations wrapped across lines 2026-10-16 12:26:00 +02:00
Abdessamad Derraz 9bfede39ba fix: hold the pin while a ref awaits its recale 2026-10-16 12:23:37 +02:00
Abdessamad Derraz 0ddeb2afa4 fix: keep a platform omission behind core claims 2026-10-16 12:22:26 +02:00
Abdessamad Derraz a8b9232093 fix: arbitrate slots on the file the pack ships 2026-10-16 12:06:26 +02:00
Abdessamad Derraz 99c8974ecf fix: list verify platforms from --platforms-dir 2026-10-16 11:42:28 +02:00
Abdessamad Derraz b4cca4a6b2 fix: judge packs against the run's directories 2026-10-16 11:41:51 +02:00
Abdessamad Derraz 2714368456 chore: regenerate install manifests 2026-10-16 10:48:14 +02:00
Abdessamad Derraz 9966029cf7 fix: keep the ci test job off the network 2026-10-16 10:18:53 +02:00
Abdessamad Derraz 3faf7dd1ee fix: test both sides of the manifest hash guard 2026-10-16 10:18:53 +02:00
Abdessamad Derraz 702e3f14a8 fix: pick the archive whose member matches 2026-10-16 10:18:53 +02:00
Abdessamad Derraz f84551dc5f fix: prefer a data dir to a foreign copy 2026-10-16 10:08:33 +02:00
Abdessamad Derraz 8983f9392a fix: hold a release asset to every declared hash 2026-10-16 10:03:00 +02:00
Abdessamad Derraz e42c98d176 fix: let no exclusion excuse a count mismatch 2026-10-16 09:59:58 +02:00
Abdessamad Derraz c488e0d75e fix: key verify archive slots like the pack 2026-10-16 09:58:57 +02:00
Abdessamad Derraz c5d434e7d0 fix: tag the clk western sms bios for brazil 2026-10-16 09:58:57 +02:00
Abdessamad Derraz f3395ff180 fix: cite the sameboy boot rom loader at its pin 2026-10-16 09:58:57 +02:00
Abdessamad Derraz a0a9e04e2b fix: give extracted files their pack mode 2026-10-16 09:58:57 +02:00
Abdessamad Derraz 5cfaf97173 fix: replay system drops and keep file modes 2026-10-16 09:44:23 +02:00
Abdessamad Derraz 5fbb1286d0 fix: refuse a manifest hash the scan contradicts 2026-10-16 09:43:46 +02:00
Abdessamad Derraz 936f713a82 fix: keep archive members out of root copies 2026-10-16 08:39:46 +02:00
Abdessamad Derraz 149157279e fix: copy a settled core file to its root path 2026-10-16 07:42:26 +02:00
Abdessamad Derraz 18af962cb3 feat: let a single check warn while the others refuse 2026-10-16 07:10:22 +02:00
Abdessamad Derraz ee377d2f57 fix: check altirra happy 810 roms as it detects them 2026-10-16 07:07:18 +02:00
Abdessamad Derraz 276588485a feat: refuse a profile check with no value 2026-10-16 07:05:35 +02:00
Abdessamad Derraz d3d83d0116 fix: give the apple iigs rom checks their sizes 2026-10-16 07:04:48 +02:00
Abdessamad Derraz 6289c7ebf0 fix: warn on an unknown nestopia fds bios 2026-10-16 07:03:28 +02:00
Abdessamad Derraz 7301c8605c fix: check mgba boot roms against its crc table 2026-10-16 07:02:18 +02:00
Abdessamad Derraz a2108c6a1c fix: check geargrafx cards by size, as its loader 2026-10-16 07:00:17 +02:00
Abdessamad Derraz b92189e393 fix: check gambatte boot roms from the shipped core 2026-10-16 06:54:23 +02:00
Abdessamad Derraz e100e50095 fix: check dolphin fork ipl dumps as a warning 2026-10-16 06:52:41 +02:00
Abdessamad Derraz 4027604bf9 fix: drop hypseus archive-level checks 2026-10-16 06:47:41 +02:00
Abdessamad Derraz b8049f757b fix: drop archive checks mame forks never run 2026-10-16 06:46:56 +02:00
Abdessamad Derraz 4b38e25505 fix: drop advancemame archive-level checks 2026-10-16 06:44:25 +02:00
Abdessamad Derraz ce6edf3486 fix: drop 81 rom checks the core never runs 2026-10-16 06:43:35 +02:00
Abdessamad Derraz 0d3f21529b fix: drop beetle pce hashes no code holds 2026-10-16 06:42:08 +02:00
Abdessamad Derraz 3766b1dd11 fix: accept a longer a5200 bios image 2026-10-16 06:41:08 +02:00
Abdessamad Derraz 2810b13dac fix: add the atari 5200 bios to ares 2026-10-16 06:40:30 +02:00
Abdessamad Derraz 4902a1e07d fix: check atari800 roms the way sysrom.c finds them 2026-10-16 06:39:17 +02:00
Abdessamad Derraz d021f4d6bc fix: profile the beetle gba bios from its loader 2026-10-16 06:36:15 +02:00
Abdessamad Derraz 0d78a9e074 fix: check the beetle lynx boot rom size 2026-10-16 06:35:06 +02:00
Abdessamad Derraz 5d0b36a3a7 fix: cap beebem sideways roms at 128 KB 2026-10-16 06:34:21 +02:00
Abdessamad Derraz e6960121d7 fix: let beebem system roms warn on size 2026-10-16 06:33:20 +02:00
Abdessamad Derraz 012913720c fix: check the beebem teletext font size 2026-10-16 06:32:09 +02:00
Abdessamad Derraz ff5e5145fd fix: keep recalbox and libretro entries on export 2026-10-16 05:20:09 +02:00
Abdessamad Derraz 7cb2c21dd9 chore: refresh retrobat to 8.3.0 2026-10-16 05:18:31 +02:00
Abdessamad Derraz 06ca898838 fix: keep retrobat entries the export does not model 2026-10-16 05:16:07 +02:00
Abdessamad Derraz e723a92989 chore: regenerate readme and database 2026-10-16 05:02:50 +02:00
Abdessamad Derraz fbe432ccd0 feat: install only what the installed cores read 2026-10-16 05:02:50 +02:00
Abdessamad Derraz 058ac673c4 fix: choose a variant the same way on every run 2026-10-16 00:19:55 +02:00
Abdessamad Derraz 28857da8a6 fix: lift unsourceable flags on collected paks 2026-10-15 23:38:16 +02:00
Abdessamad Derraz 2fb49d0658 fix: give no second-pass copy to unsourceable files 2026-10-15 22:45:42 +02:00
Abdessamad Derraz 12f362dfb9 fix: never follow a link at a partial download 2026-10-15 22:31:04 +02:00
Abdessamad Derraz a3941e843c feat: show installer progress and resume downloads 2026-10-15 22:24:39 +02:00
Abdessamad Derraz 7cb4b926a3 feat: let a core check warn instead of reject 2026-10-15 21:53:13 +02:00
Abdessamad Derraz 33ae27ebcf fix: count an emulator pack by slot, as verify 2026-10-15 21:20:14 +02:00
Abdessamad Derraz 527526a8e2 fix: give each dolphin fork its own dsp rom table 2026-10-10 14:05:57 +02:00
Abdessamad Derraz f5a5d6f4bd fix: judge a core file by the cores that read it 2026-10-10 14:05:57 +02:00
Abdessamad Derraz 840f9ceaf6 fix: give clk roms the machine that requests them 2026-10-10 13:20:16 +02:00
Abdessamad Derraz 40b46d1d78 fix: re-profile dosbox_pure for its sc-55 driver 2026-10-10 12:56:01 +02:00
Abdessamad Derraz 6a39264fa6 fix: send the github token on every api call 2026-10-10 12:17:21 +02:00
Abdessamad Derraz fd8db894d8 fix: test extras grouping through the real chain 2026-10-10 12:16:11 +02:00
Abdessamad Derraz 15842d6402 fix: let a hash-proven owner guard its game data 2026-10-10 12:14:21 +02:00
Abdessamad Derraz c64e146a43 fix: refuse standalone copies install can't run 2026-10-10 12:13:18 +02:00
Abdessamad Derraz 61cba2d3c1 fix: hold the installer to python 3.8 for real 2026-10-10 12:12:32 +02:00
Abdessamad Derraz 8380f63f97 fix: write one romm entry per key 2026-10-10 12:11:16 +02:00
Abdessamad Derraz c38c790945 fix: never file a multi-system rom by guess 2026-10-10 12:10:32 +02:00
Abdessamad Derraz 88d7ca4814 fix: stop a retrodeck scrape on a failed fetch 2026-10-10 12:08:52 +02:00
Abdessamad Derraz 14b32b38ba fix: verify data-dir pack members by content 2026-10-10 12:08:13 +02:00
Abdessamad Derraz 3d0170264a fix: place slot claims where the pack puts extras 2026-10-10 12:07:00 +02:00
Abdessamad Derraz 2c2f284414 fix: file a slug-platform bios under its own system 2026-10-10 11:43:08 +02:00
Abdessamad Derraz 315549a5b0 fix: decide destination winners without data dirs 2026-10-10 11:20:33 +02:00
Abdessamad Derraz 26ea5336a7 fix: list a target's cores after its overrides 2026-10-10 11:17:53 +02:00
Abdessamad Derraz de795262d7 fix: count an alias as declared in the gap report 2026-10-10 11:16:59 +02:00
Abdessamad Derraz b00352754c fix: keep retropie's list idiom when extending 2026-10-10 11:16:21 +02:00
Abdessamad Derraz e26ee44229 fix: export only what the platform declares 2026-10-10 11:15:25 +02:00
Abdessamad Derraz b5f9095633 fix: write retrodeck additions beside homonyms 2026-10-10 10:57:57 +02:00
Abdessamad Derraz 0057a82fe1 fix: write recalbox additions at the core path 2026-10-10 10:56:46 +02:00
Abdessamad Derraz 1cedc9930b fix: let search order guard regional files 2026-10-10 10:56:09 +02:00
Abdessamad Derraz c2bdef4db4 fix: pair a bare truth name by name, not suffix 2026-10-10 10:04:35 +02:00
Abdessamad Derraz 556d4a45aa fix: carry an archive in the truth, not its roms 2026-10-10 10:04:35 +02:00
Abdessamad Derraz befb23b492 fix: tag only territory-switched ace-dl roms 2026-10-10 10:00:30 +02:00
Abdessamad Derraz 65d396e996 fix: drop territory tags from msx font roms 2026-10-10 09:58:05 +02:00
Abdessamad Derraz 2a049dc9c9 fix: let a shared path only keep a system 2026-10-10 09:49:56 +02:00
Abdessamad Derraz ffa6516e09 fix: let an alias settle only where the core reads 2026-10-10 09:47:50 +02:00
Abdessamad Derraz 836c56b3fa fix: pin the jaguar model-m boot rom by hash 2026-10-10 09:17:46 +02:00
Abdessamad Derraz bbce3902dd fix: keep a system an on-target core reads 2026-10-10 09:15:22 +02:00
Abdessamad Derraz f6da2cff3a fix: settle a core file only by its size or slot 2026-10-10 09:15:11 +02:00
Abdessamad Derraz be45eda62d fix: expect the renamed system pack in its test 2026-10-10 08:48:09 +02:00
Abdessamad Derraz c3f3d16999 chore: regenerate install manifests 2026-10-10 08:30:07 +02:00
Abdessamad Derraz d7cc757d22 fix: re-profile eka2l1 on its rewritten branch 2026-10-10 08:21:26 +02:00
Abdessamad Derraz e0dab891ee fix: let a system-less extra compete with nothing 2026-10-10 08:14:57 +02:00
Abdessamad Derraz 707c81d2cf fix: name a target by its canonical name 2026-10-10 08:09:00 +02:00
Abdessamad Derraz e6905f48e7 fix: name a system pack apart from an emulator one 2026-10-10 08:04:04 +02:00
Abdessamad Derraz 9002a4a4bb fix: lay a hash pack out as its emulator does 2026-10-10 07:59:18 +02:00
Abdessamad Derraz e8bdcb405d fix: refuse an unknown emulator for a hash pack 2026-10-10 07:54:56 +02:00
Abdessamad Derraz 1cd743242f fix: report a pin the tracked history lost 2026-10-10 07:53:06 +02:00
Abdessamad Derraz e8bac256e7 chore: re-pin advancemame on its rewritten master 2026-10-10 07:53:06 +02:00
Abdessamad Derraz 884c43c109 fix: a citation in an unmoved repo needs no move 2026-10-10 07:51:09 +02:00
Abdessamad Derraz a213898c6d fix: follow dosbox-pure to codeberg 2026-10-10 07:50:07 +02:00
Abdessamad Derraz 203e75c1f4 fix: let the live, owning repository judge a ref 2026-10-10 07:49:14 +02:00
Abdessamad Derraz 7e079e789e fix: point twice-shifted refs at their code 2026-10-10 07:46:12 +02:00
Abdessamad Derraz af7b3133a4 fix: resolve profile entries with their owner 2026-10-10 07:38:33 +02:00
Abdessamad Derraz 8a661932f2 chore: regenerate database, manifests and readme 2026-10-10 07:33:39 +02:00
Abdessamad Derraz 06ad1d10d3 fix: serve armsx2 the vulkan shader it reads 2026-10-10 07:32:21 +02:00
Abdessamad Derraz c38b8f980f fix: identify each zesarux rom by its bytes 2026-10-10 07:32:21 +02:00
Abdessamad Derraz 81a989c56c fix: give the azahar key slot its own key file 2026-10-10 07:32:21 +02:00
Abdessamad Derraz 1a182a1e33 fix: write each profile path with its file name 2026-10-10 07:16:03 +02:00
Abdessamad Derraz 31e2d4235a fix: say what the core refuses in emulator mode 2026-10-10 07:11:08 +02:00
Abdessamad Derraz 22cad6ee01 fix: a core copy does not pass a hash declaration 2026-10-10 07:04:22 +02:00
Abdessamad Derraz 748562e71d fix: count a conflicting declaration by its file 2026-10-10 07:02:38 +02:00
Abdessamad Derraz d2a61b4a89 refactor: name the new exceptions as errors 2026-10-10 05:29:38 +02:00
Abdessamad Derraz 4de21e1157 chore: deploy the site when manifest fields change 2026-10-10 05:29:38 +02:00
Abdessamad Derraz 20ba21c710 fix: keep the git probe out of the repository 2026-10-10 05:29:38 +02:00
Abdessamad Derraz 8c324706c5 chore: record systems and regions in the manifests 2026-10-10 04:56:18 +02:00
Abdessamad Derraz a493111820 fix: update the native source index under a lock 2026-10-10 04:48:30 +02:00
Abdessamad Derraz 77b9abfa49 fix: read a data directory tag before its download 2026-10-10 04:45:44 +02:00
Abdessamad Derraz a00f57ad37 fix: write scraped files whole or not at all 2026-10-10 04:45:10 +02:00
Abdessamad Derraz 170b7d93ae fix: record a release only from finished packs 2026-10-10 04:43:42 +02:00
Abdessamad Derraz 6c75f5ae15 fix: keep the cache when an archive yields nothing 2026-10-10 04:42:58 +02:00
Abdessamad Derraz 6fca4149f5 feat: offer the files no platform system owns 2026-10-10 04:42:11 +02:00
Abdessamad Derraz 788a6dd4df fix: read the upstream cache from one name 2026-10-10 04:41:39 +02:00
Abdessamad Derraz 537600730c chore: refresh mame refs at the 0.289 tag 2026-10-10 04:41:39 +02:00
Abdessamad Derraz a116743471 fix: scrape the mame release that labels the data 2026-10-10 04:40:27 +02:00
Abdessamad Derraz ece2c06aaf feat: choose systems, cores and regions to install 2026-10-10 04:31:57 +02:00
Abdessamad Derraz b0bd20f403 refactor: build every manifest entry in one place 2026-10-10 04:07:04 +02:00
Abdessamad Derraz bfa741a9c9 fix: accept the slug omission in the installer 2026-10-10 03:59:23 +02:00
570 changed files with 370527 additions and 165956 deletions

No files matched your search

+5
View File
@@ -39,6 +39,11 @@ body:
- EmuDeck - EmuDeck
- Lakka - Lakka
- RetroPie - RetroPie
- RetroDECK
- RomM
- ROCKNIX
- BizHawk
- MiSTer FPGA
- Other - Other
validations: validations:
required: true required: true
+5 -8
View File
@@ -8,26 +8,24 @@ on:
- "emulators/**" - "emulators/**"
- "provenance/**" - "provenance/**"
- "wiki/**" - "wiki/**"
# Every script the build runs or imports (tests/test_workflow_paths.py). # Every script the build runs or imports, and no other
# (tests/test_workflow_paths.py).
- "scripts/artifacts.py" - "scripts/artifacts.py"
- "scripts/auto_fetch.py"
- "scripts/common.py" - "scripts/common.py"
- "scripts/cross_reference.py" - "scripts/cross_reference.py"
- "scripts/crypto_verify.py" - "scripts/crypto_verify.py"
- "scripts/deterministic_zip.py" - "scripts/derivations.py"
- "scripts/dumpcatalog.py" - "scripts/dumpcatalog.py"
- "scripts/generate_pack.py"
- "scripts/generate_readme.py" - "scripts/generate_readme.py"
- "scripts/generate_site.py" - "scripts/generate_site.py"
- "scripts/hashing.py" - "scripts/hashing.py"
- "scripts/largefiles.py" - "scripts/largefiles.py"
- "scripts/list_platforms.py" - "scripts/mkdocs_hooks.py"
- "scripts/nativemode.py" - "scripts/nativemode.py"
- "scripts/packextras.py" - "scripts/packextras.py"
- "scripts/packpaths.py" - "scripts/packpaths.py"
- "scripts/packreadme.py" - "scripts/packreadme.py"
- "scripts/packresolve.py" - "scripts/packresolve.py"
- "scripts/packverify.py"
- "scripts/profile_sync.py" - "scripts/profile_sync.py"
- "scripts/provenance_report.py" - "scripts/provenance_report.py"
- "scripts/refresh_data_dirs.py" - "scripts/refresh_data_dirs.py"
@@ -39,7 +37,6 @@ on:
- "scripts/siterender.py" - "scripts/siterender.py"
- "scripts/sitesources.py" - "scripts/sitesources.py"
- "scripts/sitewrite.py" - "scripts/sitewrite.py"
- "scripts/slot.py"
- "scripts/slots.py" - "scripts/slots.py"
- "scripts/split_pack.py" - "scripts/split_pack.py"
- "scripts/truth.py" - "scripts/truth.py"
@@ -50,12 +47,12 @@ on:
- "scripts/verify.py" - "scripts/verify.py"
- "scripts/ziptools.py" - "scripts/ziptools.py"
- "schemas/**" - "schemas/**"
- "tests/**"
- "docs_assets/**" - "docs_assets/**"
- "install/**" - "install/**"
- "install.py" - "install.py"
- "database.json" - "database.json"
- "release.json" - "release.json"
- "derivable.json"
- "mkdocs.yml" - "mkdocs.yml"
- ".github/workflows/deploy-site.yml" - ".github/workflows/deploy-site.yml"
workflow_dispatch: workflow_dispatch:
+65 -3
View File
@@ -117,17 +117,66 @@ jobs:
- name: Validate platform configs and emulator profiles - name: Validate platform configs and emulator profiles
run: python scripts/validate_schemas.py --source-only run: python scripts/validate_schemas.py --source-only
run-tests: # A profile written from a clone can cite lines that do not hold the value
# it declares; schemas and tests pass it. Each profile a change adds is
# confronted with its upstream, both roads into main. An edited profile is
# not held to it: the backlog of older refs is reviewed by hand.
check-new-profiles:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
with:
fetch-depth: 0
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with: with:
python-version: "3.12" python-version: "3.12"
- name: Install dependencies - name: Install dependencies
run: pip install pyyaml "jsonschema[format-nongpl]==4.26.0" run: pip install pyyaml
- name: Confront added profiles with their upstream
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BEFORE: ${{ github.event.before }}
run: |
# A pull request is checked out as a merge commit whose first
# parent is the base; a push names the commit it moved main from.
if [ "$GITHUB_EVENT_NAME" = "pull_request" ]; then
base=HEAD^1
elif [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then
echo "first push of the branch: no base to diff against"
exit 0
else
base=$BEFORE
fi
status=0
for file in $(git diff --name-only --diff-filter=A "$base" HEAD -- 'emulators/*.yml'); do
name=$(basename "$file" .yml)
echo "::group::$name"
python scripts/profile_sync.py --emulator "$name" --strict || status=1
echo "::endgroup::"
done
exit $status
run-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
# install.py stays on Python 3.8: the suite runs it end to end under a
# real 3.8 interpreter, which import-only and grammar checks miss. The
# last version listed is the default python.
- uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7
with:
python-version: |
3.8
3.12
# markdown: the site validation test renders a wiki line to prove the
# heading guard's premise, and skipped on every run without it.
- name: Install dependencies
run: pip install pyyaml "jsonschema[format-nongpl]==4.26.0" "markdown==3.10.2"
# The exporter fidelity cases compare what we hand back against the # The exporter fidelity cases compare what we hand back against the
# file each platform publishes, so they need those files. They skip # file each platform publishes, so they need those files. They skip
@@ -137,8 +186,21 @@ jobs:
continue-on-error: true continue-on-error: true
run: python scripts/export_native.py --all --fetch --output-dir "$RUNNER_TEMP/native" run: python scripts/export_native.py --all --fetch --output-dir "$RUNNER_TEMP/native"
# A pack built without its data directories exits non-zero: it is not
# the pack a user gets. Tests that build packs need the same trees a
# release build has, as deploy-site.yml fetches them.
- name: Fetch the data directories
run: python scripts/refresh_data_dirs.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Run test suite - name: Run test suite
run: python -m unittest discover tests -v # No test downloads a release asset: 252 MB files fetched into the
# shared cache filled the runner's disk and changed what later tests
# resolved. The download tests mock the network and clear it.
env:
RETROBIOS_OFFLINE: "1"
run: python -m unittest discover -s tests -t . -v
label-pr: label-pr:
runs-on: ubuntu-latest runs-on: ubuntu-latest
+11 -2
View File
@@ -41,11 +41,20 @@ Full walkthrough: [profiling guide](https://abdess.github.io/retrobios/wiki/prof
## Before opening a PR ## Before opening a PR
The checks CI runs on a pull request (Python 3.12 or newer):
```bash ```bash
python -m unittest discover tests pip install pyyaml "jsonschema[format-nongpl]"
python scripts/pipeline.py --offline python scripts/validate_pr.py --changed # the BIOS files the branch adds
python scripts/validate_schemas.py --source-only # profiles and platform files
python -m unittest discover -s tests -t .
``` ```
The full pipeline is not needed for a contribution: it rebuilds every pack
(about 35 GB in `dist/`) and needs the data directories fetched first
(`python scripts/refresh_data_dirs.py`), which is why maintainers run it
before a release.
## PR validation ## PR validation
CI computes SHA1/MD5/CRC32 for every new file, checks them against the platform CI computes SHA1/MD5/CRC32 for every new file, checks them against the platform
+22 -22
View File
@@ -32,7 +32,7 @@ The script auto-detects your platform, downloads only missing files, and verifie
## Download BIOS packs ## Download BIOS packs
One pack per platform, and it holds everything the platform runs: its own BIOS list plus every file its emulator cores load. Pick your platform, download the ZIP, extract to the BIOS path. The installer above does the same file by file, and `--target` narrows it to one machine; for a region or a bare minimum, build your own pack below. One pack per platform, and it holds everything the platform runs: its own BIOS list plus every file its emulator cores load. Pick your platform, download the ZIP, extract to the BIOS path. The installer above does the same file by file. At a terminal it asks whether to install everything or to choose systems, cores and regions, and `--system`, `--core`, `--region` and `--target` make the same choice without questions; for a bare minimum, build your own pack below.
Files is how many the pack holds once extracted, the figure a file manager shows for the folder. It differs from one platform to the next because a pack carries only what that platform's emulators load. The size is what the files occupy once extracted; the ZIP itself downloads smaller. Files is how many the pack holds once extracted, the figure a file manager shows for the folder. It differs from one platform to the next because a pack carries only what that platform's emulators load. The size is what the files occupy once extracted; the ZIP itself downloads smaller.
A pack over 2 GB comes in several parts, and every part is needed. How to open them depends on their name: A pack over 2 GB comes in several parts, and every part is needed. How to open them depends on their name:
@@ -68,17 +68,17 @@ These are the files an emulator loads from disk instead of carrying inside itsel
Each file is checked the way your platform checks it. Most compare a checksum, the fingerprint of a file's contents, which catches a corrupt or unexpected copy. RetroArch, Lakka and RetroPie only look for the filename, because that is all their code does: the Coverage table says which applies to you. Independently of that, the collection records five fingerprints per file, and wherever an emulator's code states an expected size or hash, that value is read from its source and rechecked here. Each file is checked the way your platform checks it. Most compare a checksum, the fingerprint of a file's contents, which catches a corrupt or unexpected copy. RetroArch, Lakka and RetroPie only look for the filename, because that is all their code does: the Coverage table says which applies to you. Independently of that, the collection records five fingerprints per file, and wherever an emulator's code states an expected size or hash, that value is read from its source and rechecked here.
- **392 files** the platforms' emulators load are still to be found, and 51 more cannot be sourced at all (per-user keys, user-filled slots, dumps nobody has made); both are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/) - **425 files** the platforms' emulators load are still to be found, and 55 more cannot be sourced at all (per-user keys, user-filled slots, dumps nobody has made); both are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/)
- **12 platforms** supported with platform-specific verification - **12 platforms** supported with platform-specific verification
- **506 emulators** profiled from source (RetroArch cores + standalone) - **530 emulators** profiled from source (RetroArch cores + standalone)
- **546 systems** handled by those emulators (NES, SNES, PlayStation, Saturn, Dreamcast, ...) - **550 systems** handled by those emulators (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
- **19,002 files in the collection**, each with its SHA1, MD5, SHA256, CRC32 and Adler-32 fingerprints: 5,266 system files, 2,808 arcade ROM sets, 10,928 game and engine data files. That is every platform and emulator together, so no pack holds them all: each carries what its own emulators load, counted in the download table - **19,079 files in the collection**, each with its SHA1, MD5, SHA256, CRC32 and Adler-32 fingerprints: 5,337 system files, 2,813 arcade ROM sets, 10,929 game and engine data files. That is every platform and emulator together, so no pack holds them all: each carries what its own emulators load, counted in the download table
- **562 of 5,266 system files** matched to dump-preservation catalogs (No-Intro, Redump, TOSEC); arcade sets and engine data fall outside what those catalogs index - **562 of 5,337 system files** matched to dump-preservation catalogs (No-Intro, Redump, TOSEC); arcade sets and engine data fall outside what those catalogs index
- **16687 MB** total collection size - **16755 MB** total collection size
## Supported systems ## Supported systems
NES, SNES, Nintendo 64, GameCube, Wii, Game Boy, Game Boy Advance, Nintendo DS, Nintendo 3DS, Switch, PlayStation, PlayStation 2, PlayStation 3, PSP, PS Vita, Mega Drive, Saturn, Dreamcast, Game Gear, Master System, Neo Geo, Atari 2600, Atari 7800, Atari Lynx, Atari ST, MSX, PC Engine, TurboGrafx-16, ColecoVision, Intellivision, Commodore 64, Amiga, ZX Spectrum, Arcade (MAME), and 512+ more. NES, SNES, Nintendo 64, GameCube, Wii, Game Boy, Game Boy Advance, Nintendo DS, Nintendo 3DS, Switch, PlayStation, PlayStation 2, PlayStation 3, PSP, PS Vita, Mega Drive, Saturn, Dreamcast, Game Gear, Master System, Neo Geo, Atari 2600, Atari 7800, Atari Lynx, Atari ST, MSX, PC Engine, TurboGrafx-16, ColecoVision, Intellivision, Commodore 64, Amiga, ZX Spectrum, Arcade (MAME), and 516+ more.
Full list with per-file details: **[https://abdess.github.io/retrobios/](https://abdess.github.io/retrobios/)** Full list with per-file details: **[https://abdess.github.io/retrobios/](https://abdess.github.io/retrobios/)**
@@ -86,18 +86,18 @@ Full list with per-file details: **[https://abdess.github.io/retrobios/](https:/
| Platform | On its BIOS list | Files its emulators load | Checked by | | Platform | On its BIOS list | Files its emulators load | Checked by |
|----------|-----------------:|-------------------------:|------------| |----------|-----------------:|-------------------------:|------------|
| Batocera | 353/353 | 12,287/12,718 | MD5 hash | | Batocera | 353/353 | 12,353/12,787 | MD5 hash |
| BizHawk | 118/118 | 800/801 | SHA1 hash | | BizHawk | 118/118 | 754/755 | SHA1 hash |
| EmuDeck | 168/168 | 430/432 | MD5 hash | | EmuDeck | 168/168 | 451/453 | MD5 hash |
| Lakka | 526/526 | 5,256/5,286 | file presence | | Lakka | 532/532 | 5,266/5,296 | file presence |
| MiSTer FPGA | 81/81 | - | MD5 hash | | MiSTer FPGA | 81/81 | - | MD5 hash |
| ROCKNIX | 38/38 | 5,695/5,725 | MD5 hash | | ROCKNIX | 38/38 | 5,925/6,002 | MD5 hash |
| Recalbox | 351/351 | 2,721/2,729 | MD5 hash | | Recalbox | 351/351 | 2,787/2,805 | MD5 hash |
| RetroArch | 526/526 | 5,256/5,286 | file presence | | RetroArch | 526/526 | 5,278/5,308 | file presence |
| RetroBat | 348/348 | 11,875/12,305 | MD5 hash | | RetroBat | 348/348 | 7,260/7,419 | MD5 hash |
| RetroDECK | 2,008/2,008 | 5,387/5,437 | MD5 hash | | RetroDECK | 2,008/2,008 | 5,326/5,376 | MD5 hash |
| RetroPie * | 526/526 | 9,171/9,313 | file presence | | RetroPie * | 532/532 | 9,196/9,338 | file presence |
| RomM | 381/381 | 746/752 | MD5 hash | | RomM | 383/383 | 773/780 | MD5 hash |
Each fraction is what the pack has over what is needed, counting required and optional files alike since both ship. The first column is the BIOS list the platform publishes. The second counts files its emulators load that this list never mentions, found by reading their source code, and it is routinely several times larger. A short fraction means files are still missing, and they are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/). Each fraction is what the pack has over what is needed, counting required and optional files alike since both ship. The first column is the BIOS list the platform publishes. The second counts files its emulators load that this list never mentions, found by reading their source code, and it is routinely several times larger. A short fraction means files are still missing, and they are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/).
That second number is a floor, not a ceiling: an emulator that accepts any file handed to it names none in its code, so nothing there can be counted. That second number is a floor, not a ceiling: an emulator that accepts any file handed to it names none in its code, so nothing there can be counted.
@@ -131,7 +131,7 @@ python scripts/verify.py --emulator flycast
python scripts/verify.py --platform retroarch --verbose # emulator ground truth python scripts/verify.py --platform retroarch --verbose # emulator ground truth
``` ```
Only dependency: Python 3 + `pyyaml`. Requires Python 3.12 and `pyyaml`. The one-line installer alone runs on Python 3.8.
## Documentation site ## Documentation site
@@ -141,7 +141,7 @@ The [documentation site](https://abdess.github.io/retrobios/) provides:
- **Per-emulator profiles** with source code references for every file - **Per-emulator profiles** with source code references for every file
- **Per-system pages** showing which emulators and platforms cover each console - **Per-system pages** showing which emulators and platforms cover each console
- **Gap analysis** identifying missing files and undeclared core requirements - **Gap analysis** identifying missing files and undeclared core requirements
- **Cross-reference** mapping files across 12 platforms and 506 emulators - **Cross-reference** mapping files across 12 platforms and 530 emulators
- **Versioned data access** through JSON, CSV and SQLite exports with published SHA-256 checksums - **Versioned data access** through JSON, CSV and SQLite exports with published SHA-256 checksums
## How it works ## How it works
@@ -180,4 +180,4 @@ The scripts and tooling are released under the [MIT License](LICENSE).
The BIOS and firmware files are not covered by that license: they are third-party system software, preserved and provided for personal backup, archival, and interoperability with emulation software. [NOTICE](NOTICE) sets out their status and how to ask for a file to be removed. The BIOS and firmware files are not covered by that license: they are third-party system software, preserved and provided for personal backup, archival, and interoperability with emulation software. [NOTICE](NOTICE) sets out their status and how to ask for a file to be removed.
The reasoning, and where it is weakest, is in the [FAQ](https://abdess.github.io/retrobios/wiki/faq/#is-this-legal). The reasoning, and where it is weakest, is in the [FAQ](https://abdess.github.io/retrobios/wiki/faq/#is-this-legal).
*Auto-generated on 2026-10-09T23:59:06Z* *Auto-generated on 2026-10-18T13:59:53Z*
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large. Load diff
Binary file not shown.
Binary file not shown.
File renamed without changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loaded 100 of 570 files, more files were not shown because too many files have changed in this diff. Show more