Commit Graph
50 Commits
Author SHA1 Message Date
Abdessamad Derraz 1cd6c9ee4d feat: place save-dir files in packs and lists
load_from: save_dir entries of a libretro build were left out of every
pack. They now go below the platform's save folder (registry
save_directory: RetroArch saves/, Lakka savefiles/, by core), the
manifest marks them root: save, and verify replays the same placement.
Platforms keeping saves per system or per game list them as omitted.
2026-10-22 19:58:26 +02:00
Abdessamad Derraz d0802c5360 feat: place core files per handed system dir
A platform can hand each libretro core a system directory of its own
(core_system_dirs). platform_layouts then gives one view per directory,
so the gap report, the builder, the manifest, slots and cross_reference
place a core's files below each folder it is handed, and a core handed
none gets no file. Resolution strips the folder again and searches the
collection by the core's own path.
2026-10-22 04:04:31 +02:00
Abdessamad Derraz 56e8cbe046 feat: file mame device sets by their machines
The -listxml names, for every machine, its parent (romof), the devices of its default configuration (device_ref) and the cards its slots offer (slotoption). A machine takes the system of the first set on its romof chain a written entry lists, and passes it to each device it can instantiate. A device set reached from one system gets system:, from several the new per-entry systems:, from none neither, and keeps serving every system of the profile. The gap report, the core extras and slots read the entry's own systems, so generate_pack --system and the installer pick by them.
2026-10-21 11:33:39 +02:00
Abdessamad Derraz 052f837e69 chore: merge round 2 fixes (integrity) 2026-10-21 10:31:04 +02:00
Abdessamad Derraz 2eee7a991d fix: accept -p and -t in every tool
verify, generate_pack and cross_reference took -p and -t, slots, generate_truth, diff_truth, export_native and refresh_data_dirs refused them. A test reads every add_argument call.
2026-10-21 10:11:22 +02:00
Abdessamad Derraz 2af9509ef4 fix: resolve declarations through one function
verify resolved platform entries with common.resolve_local_file and put
the slot override first, and the region pass added a destination hint.
packresolve.resolve_declaration now serves the builder, the manifest,
verify and the region pass: release assets cached for a file absent from
bios/ count as shipped in all four, and a release asset keeps its answer
over a slot override.
2026-10-21 09:56:07 +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 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 fb639647e6 fix: resolve a loose archive entry by its members
gngeopi and neo-emu declare neogeo.zip loose and, apart, the ROMs they
open inside it. The archive pass took the copy holding them, the loose
entry resolved by name to another copy, and both verify --emulator and
the emulator pack reported the archive missing while the ZIP held it.
with_archive_members() gives the loose entry the members in verify, the
pack, slots and the gap report.
2026-10-21 05:05:54 +02:00
Abdessamad Derraz 7e23815545 fix: reports hold the data trees they read
generate_readme, generate_site and slots resolve against data/ but took no hold when run on their own, as the documented commands do. A refresh swapping a tree mid-read then gave counts from half of it. Each now holds the trees shared, like verify and the builder.
2026-10-20 00:32:26 +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 04deb95a35 docs: give every command-line option a help text 2026-10-19 04:23:34 +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 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 92fb885341 fix: accept platform names as the site prints them 2026-10-18 08:49:41 +02:00
Abdessamad Derraz 4240c98359 fix: name a missing database in one error line 2026-10-18 08:34:09 +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 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 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 faa8af0800 refactor: annotate every remaining signature 2026-10-18 00:44:20 +02:00
Abdessamad Derraz 55631a2fbc fix: end listings quietly when the reader leaves 2026-10-17 20:50:22 +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 e659228777 fix: let target installs match their target pack 2026-10-17 00:39:57 +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 866f214e20 refactor: share the baseline verdict with the manifest 2026-10-16 17:09:08 +02:00
Abdessamad Derraz a8b9232093 fix: arbitrate slots on the file the pack ships 2026-10-16 12:06:26 +02:00
Abdessamad Derraz 3d0170264a fix: place slot claims where the pack puts extras 2026-10-10 12:07:00 +02:00
Abdessamad Derraz af7b3133a4 fix: resolve profile entries with their owner 2026-10-10 07:38:33 +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 05ae30ce48 refactor: simplify pack label, hash merge, diff exit 2026-10-06 07:06:22 +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 47e267d29c chore: drop files whose bytes are not what they claim 2026-09-05 09:17:42 +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