Commit Graph
47 Commits
Author SHA1 Message Date
Abdessamad Derraz 84cffe3f8d chore: merge origin/main 2026-11-06 16:42:16 +01:00
Abdessamad Derraz 057fd2d0f6 fix: isolate every test module however it runs
tests/__init__.py keeps a run offline, its scratch under tmp/ and its
installer cache its own, but only discover -s tests -t . imported it.
discover tests ran with RETROBIOS_OFFLINE unset, scratch on the /tmp
tmpfs and the user's real installer cache, the setting in which e2e
fixtures had written into the shared .cache/large. Every test module now
imports the package first, and a test fails on a module that does not.
test_verify_listing.py took its line with the previous commit.
2026-11-06 15:14:05 +01:00
Abdessamad Derraz 74a4a036ea fix: read crc32 past a copier header in slots
Geargrafx drops a 512-byte header before its crc32 (src/media.cpp:754-773
at 7c447b0b), and its profile lists both sizes. slots compared the crc32
of the whole file, so EmuELEC's headered syscard3.pce read as contested.
2026-11-06 15:04:26 +01:00
Abdessamad Derraz 4d3f589ef4 refactor: drop the archived platform status
RetroPie was the only platform with status: archived, which kept it out
of verify --all, slots, the pipeline and list_platforms unless
--include-archived was typed. release_pack already decides which packs a
release publishes and the installer serves every platform, so the status
set nothing apart. The field, its schema entry and the flag are gone, and
RetroPie is covered by every full run like any other platform.
2026-11-06 11:52:34 +01:00
Abdessamad Derraz c0e4bd8379 chore: merge resolver fixes, fourth pass 2026-11-06 10:28:27 +01:00
Abdessamad Derraz 21f4122c83 fix: collisions keep the platform's order
Walking the systems sorted reordered the declarations doubled.py
reports from, so the export report named the CoCo reader first. The
declarations keep the platform's order again, and the packed file is
picked from the sorted walk the builder makes.
2026-11-06 09:43:06 +01:00
Abdessamad Derraz bf206d5b42 feat: slots names who declares a collided path
A collision line named two files and neither the system declaring each
nor the one the pack ships, so the reader went back to the platform
file. find_collisions walks the systems in the builder's sorted order,
takes the builder's preferred declaration, and the line and the JSON
now name each system and the file packed. RetroDECK's bios/disk.rom
reads as the CoCo ROM packed, the PC-88 one left out, as its manifest
holds.
2026-11-06 08:55:26 +01:00
Abdessamad Derraz 6695efeebe fix: scope slot labels to system and region
slots reads content_alternatives too, so a content-found label is settled only by a dump of its own system and region slot.
2026-11-06 08:16:08 +01:00
Abdessamad Derraz b550b9780c fix: judge content-found cores by any dump
A core with found_by: content reads no file by the destination's name. Any dump its profile accepts for the system settles the slot: Batocera, KNULLI and ROCKNIX ship scph1001.bin v2.0, which DuckStation and rustation accept under scph1001_v20.bin.
2026-11-06 08:12:25 +01:00
Abdessamad Derraz 19898cb6ea chore: merge site and docs fixes, third pass 2026-11-06 06:38:47 +01:00
Abdessamad Derraz 35ad19ff02 fix: same bytes under two paths agree in slots
A data directory cache and a bios/ copy of one file were judged by path, so 56 bluemsx destinations on AmberELEC and EmuELEC read as contradicted.
2026-11-06 03:19:18 +01:00
Abdessamad Derraz 55ac3162f5 docs: name the slot function the pack reads
architecture.md said the pack and verify decide through slots.arbitrate(),
while a test forbids them to call it: they read slot_choices() through
pack_overrides(). build_claim_index, the name-keyed index the module
docstring described, had no caller outside its own tests.
2026-11-06 03:13:57 +01:00
Abdessamad Derraz 25b5523024 fix: name the file each emulator reads in slots
A keep line gave every emulator the file of the first profile claim:
Recalbox's neocdz.zip line said geolith reads the archive fbneo reads.
The JSON 'expected' lists each file with its emulators (finding 4).
2026-11-05 11:53:58 +01:00
Abdessamad Derraz 378a9e4da5 chore: merge audit fixes (integrity)
# Conflicts:
#	install/batocera.json
#	install/emudeck.json
#	install/lakka.json
#	install/recalbox.json
#	install/retroarch.json
#	install/retrobat.json
#	install/retrodeck.json
#	install/retropie.json
#	install/rocknix.json
#	install/romm.json
#	scripts/generate_pack.py
#	wiki/tools.md
2026-10-21 06:48:42 +02:00
Abdessamad Derraz 184c822e6e fix: name the file each layer reads in slots.py
Each content-checked line ended with a verdict on the platform's list,
printed at pipeline step 3b. The line now says which emulators read the
other file, and the closing count says the rest follow the platform's
list. The module source carries no such verdict, a test reads it.
2026-10-21 05:33:50 +02:00
Abdessamad Derraz 5e95574143 fix: the strongest proof takes a shared core path
A destination no platform declares went to the first claimant in profile
order whatever the proof: fbalpha2012 asks for hiscore.dat by name and
took the root of six packs over cores that pin it by sha1. Claims on a
contested path are now ranked by what the collection holds for each (a
held declared hash, then a path or every required archive member, then a
name, then a contradicted hash), and profile order only breaks ties.
Measured: 14 slots change file across the platforms, among them
hiscore.dat, kick13.rom on RetroPie, cgb_boot.bin and dmg_boot.bin on
EmuDeck, and ROCKNIX neogeo.zip and neocdz.zip.
2026-10-21 05:28:10 +02:00
Abdessamad Derraz 8eda797562 fix: a hashless entry is a path in any mode
Whether the frontend compares content was decided per platform. EmuDeck
(md5) declares neocdz.zip with no hash and checkBIOS.sh never names it,
yet the proven claims of geolith and FBNeo were dropped and the pack
shipped a neocdz.zip without 000-lo.lo. checked_by_path() decides per
entry: no hash of the kind the frontend compares (any of md5, sha1,
crc32 under RomM's rule) and no zipped_file means a path. Measured: the
EmuDeck neocdz.zip slot and three RetroBat DS slots (dsi_bios7.bin,
dsi_bios9.bin, firmware.bin) now take the file the cores prove.
2026-10-21 05:24:19 +02:00
Abdessamad Derraz 7095aa61e7 fix: make maintainer tool output actionable
--emulator accepts a buildbot core name from a profile's cores:, and a
mistyped target gets the closest names instead of every target. diff_truth
shows destinations and reports unpaired entries as evidence, not removals.
The verify summary counts discrepancies, a shared destination names both
systems, a truth hash conflict names both cores, and pipeline steps carry
their place in the real run instead of N/8. Every GitHub API caller takes
the token from github_token(), which falls back to gh auth token.
2026-10-21 04:42:01 +02:00
Abdessamad Derraz 4231902a6c docs: write prose without dashes or semicolons
Profiles, the wiki, comments, docstrings, command output and schema descriptions carried em-dashes, clause-joining semicolons, unicode arrows, box-drawing banners and check-mark glyphs. Each sentence was rewritten rather than having its character swapped. Hashes, paths, source_ref values and every cited file:line are unchanged, which a comparison of each parsed profile against the previous revision confirms.

validate_pr comments now say PASS and FAIL in words, and source_ref values in a profile's structured blocks render as code. test_prose_style fails if any of these comes back, in tracked files or in the generated site.
2026-10-19 06:47:31 +02:00
Abdessamad Derraz 41e33032f7 fix: close the slots report on its totals 2026-10-19 04:30:15 +02:00
Abdessamad Derraz 4e21469b3a refactor: index records by path in slots 2026-10-19 04:12:57 +02:00
Abdessamad Derraz 5d6ab396e4 fix: pass archived and target flags to slots 2026-10-18 16:09:15 +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 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 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 03275fe0b3 chore: fail the slots check when nothing is settled 2026-10-17 01:55:49 +02:00
Abdessamad Derraz 479ad7fd8c fix: arbitrate slots for the target and source 2026-10-16 22:07:48 +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 3d0170264a fix: place slot claims where the pack puts extras 2026-10-10 12:07:00 +02:00
Abdessamad Derraz c13d5c5368 fix: slots read the one gap scope rule 2026-10-09 22:57:15 +02:00
Abdessamad Derraz 8944486597 fix: a listed hash the other layer holds is agreement 2026-10-09 21:59:38 +02:00
Abdessamad Derraz 74bc75fb7c fix: anchor the slot mode test on the override lookup 2026-10-06 08:53:58 +02:00
Abdessamad Derraz 226a5df74a refactor: hoist test imports, rank pairs at module level 2026-10-06 06:38:35 +02:00
Abdessamad Derraz a5f3a5db25 fix: name only pinned claims as left unserved 2026-10-06 06:33:36 +02:00
Abdessamad Derraz 619c282477 fix: arbitrate slots on the strongest profile proof 2026-10-06 04:32:19 +02:00
Abdessamad Derraz f625039190 fix: no collision where one file passes every declaration 2026-10-05 22:12:23 +02:00
Abdessamad Derraz c61d35c41e fix: judge a slot on the declaration the pack ships 2026-10-05 22:10:48 +02:00
Abdessamad Derraz b12a3280e6 fix: give the install manifest the arbitrated file 2026-10-05 21:53:59 +02:00
Abdessamad Derraz 887fc34bf6 feat: lay out standalone files by build mode 2026-10-04 16:35:59 +02:00
Abdessamad Derraz 1455e0423c fix: arbitrate on the evidence the builder uses 2026-09-07 07:02:39 +02:00
Abdessamad Derraz c99e292a4d fix: stop a romset member claiming a bios slot 2026-09-07 06:50:56 +02:00
Abdessamad Derraz 7b93285e1d fix: read the build mode per emulator when arbitrating 2026-09-05 13:25:24 +02:00
Abdessamad Derraz da04df6d6f feat: report a destination a platform fills two ways 2026-09-05 10:51:17 +02:00
Abdessamad Derraz adcd177e12 feat: settle contested slots in the pack and the report 2026-09-05 09:08:43 +02:00
Abdessamad Derraz c3d9e96d61 feat: arbitrate a contested slot by who the pack serves 2026-09-05 08:53:47 +02:00
Abdessamad Derraz 77929f8c82 feat: report slots where a profile contradicts the pack 2026-09-05 08:41:30 +02:00