Commit Graph
2393 Commits
Author SHA1 Message Date
Abdessamad Derraz ddfac4a059 fix: label every platform that pulls all libretro
The cross-reference page read the label from the shape of cores:, so
RetroPie and RetroDECK, which name retroarch in a list, showed no
"(all libretro)". The label now comes from the resolved core set.
2026-10-21 05:07:09 +02:00
Abdessamad Derraz fe652bf508 docs: keep neutral wording on every site page
The gaps page called each platform's file a corrected list, a word the
exports page test already kept off that page. The test now reads the
text of every site generator.
2026-10-21 05:06:37 +02:00
Abdessamad Derraz a0672d4459 refactor: derive the spelling index from its table
The index of other system spellings was rebuilt only when the page
table changed length, so a table of the same size kept the previous
links. The builder now returns its table and set_system_page_map
installs it with the index derived from it.
2026-10-21 05:05:50 +02:00
Abdessamad Derraz c87c73d0a8 fix: replace the system icon cache whole
The cache was truncated and dumped in place. A concurrent build read
half a file, took it for empty, and an offline run then wrote {} over
every recorded icon. The file is now replaced through a scratch file,
merged with what another run recorded meanwhile, and left alone when
nothing new was learned.
2026-10-21 05:05:46 +02:00
Abdessamad Derraz 348c56e94c docs: put the project's working rules in the wiki
Principles, collection rules and the inverted model in architecture.md, research and citation rules in profiling.md, platform and scraper rules in their pages, tool conventions in tools.md, test and commit expectations in testing-guide.md, installer constraints in installer.md. Each rule sits where a reader looks for it, with its reason. Also fixes the stale release-job line, the suite command without -t ., and the unsourceable definition.
2026-10-21 04:03:31 +02:00
Abdessamad Derraz 392aacb207 fix: hash a large download through its own handle
On Windows the partial copy of a file of 16 MB or more is locked with msvcrt.locking, a LockFile region: the locking process cannot access that region through a second handle (Microsoft LockFile remarks). Hashing reopened the path, the read failed with a sharing violation, and every large file was reported as 'folder not writable' (issue 82). Both digests are now read in one pass through the handle that holds the lock. A read-only file already at the destination had the same misleading report: on Windows its attribute is now cleared before the verified copy replaces it, and a refusal that remains is named for what it is.
2026-10-21 03:46:14 +02:00
Abdessamad Derraz 9fd50a21fd chore: regenerate the database and README
The last pushes changed the data without regenerating them, and Deploy Site requires the committed README to match what the generator writes.
2026-10-21 03:23:57 +02:00
Abdessamad Derraz 16261b448b chore: regenerate the RetroPie manifest and export 2026-10-20 23:05:34 +02:00
Abdessamad Derraz cf54730a17 fix: lay out RetroPie standalone packages
RetroPie's YAML listed no standalone_cores, so every package was laid
out as a libretro core and the standalone files of amiberry, dolphin,
hatari, mame and ppsspp never reached the pack. Packages without the
lr- prefix (bar the retroarch frontend) are now standalone, and names
shipped both ways are dual-mode.
2026-10-20 23:04:42 +02:00
Abdessamad Derraz 027379c065 chore: regenerate the updated platform files 2026-10-20 22:38:32 +02:00
Abdessamad Derraz 6d38e597db fix: keep a RetroPie list's comma before its and
quasi88 writes its list "N88KNJ2.ROM, and N88SUB.ROM". Extended with
N88EXT0.ROM, which QUASI88kai reads, it came back as "N88SUB.ROM and
N88EXT0.ROM": every list was rewritten in one idiom. A list that puts a
comma before its final and keeps it.
2026-10-20 22:38:32 +02:00
Abdessamad Derraz c3af859621 chore: regenerate the updated platform files 2026-10-20 22:20:54 +02:00
Abdessamad Derraz e787efca22 fix: match a size-checked entry to its launcher
EmuDeck passes Complex_4627v1.03.bin as xemu's flash ROM
(emuDeckXemu.sh:60-61), and xemu's entry Complex_4627.bin states no hash,
only the sizes it maps. The layer matched entries by name or content
only, so without the alias the default name was still asked for. A
hashless entry that checks a size now takes a launcher file of a size
it accepts, when no other entry of that core accepts that size too.
2026-10-20 22:20:42 +02:00
Abdessamad Derraz 540374b40d fix: count a launcher's names as read
The removal candidates looked for a reading in the profiles only, so a
name the platform's own launch code opens, links or copies was listed
as read by no core: Batocera's DuckStation generator walks 22 names
(duckstationGenerator.py:501-515). Every name a launcher record names
is now a reading on that platform. Recalbox's unexplained entries drop
from 20 to 13, RetroBat's from 24 to 20, EmuDeck's from 25 to 22.
2026-10-20 22:20:42 +02:00
Abdessamad Derraz 8dc485dcd5 fix: move Hatari's TOS names to the launcher layer
The 43 tos.img aliases in hatari.yml and 10 in hatarib.yml were names Batocera, Recalbox and RetroBat launchers pass to Hatari (hatariGenerator.py, Hatari.Generator.cs, libretroCores.py), now recorded in each platform's launchers: records. With standalone Hatari profiled, those records attach. Measured on Batocera, RetroBat, Recalbox, ROCKNIX and RetroPie: verify statuses, manifest files, omissions and Hatari entries are identical before and after.
2026-10-20 22:03:20 +02:00
Abdessamad Derraz 40e9ed58ad feat: profile standalone Hatari
Batocera (v2.6.1, hatari.mk), RetroBat (v2.4.1 release), Recalbox and ROCKNIX run standalone Hatari, which the profile did not describe, so their launcher records had no build to attach to. Standalone Hatari reads tos.img from its data directory by default (src/configuration.c:810-812, src/paths.c:316-330), retries a missing name with .img, .rom and .tos (src/file.c:275-308, 481-520), and exits when no TOS loads (src/main.c:191-201). The profile is now standalone + libretro, with the keymap file and the window icon as standalone entries and BOOT.ST scoped to libretro.
2026-10-20 21:59:32 +02:00
Abdessamad Derraz ec1a441f4a fix: drop Recalbox launcher names from gsplus
apple2gs1.rom and apple2gs3.rom come only from Recalbox's gsplusGenerator.py:107-110, 140, a platform launcher now recorded in platforms/recalbox.yml. No platform resolves gsplus.yml (Recalbox, Batocera and RetroBat run gsplus-legacy), and verify and the manifests of Recalbox, RetroDECK, ROCKNIX and EmuDeck are identical before and after.
2026-10-20 21:48:43 +02:00
Abdessamad Derraz c445c18bdc fix: map RetroPie's standalone builds to profiles
RetroPie builds minivmac/minivmac, winterheart/quasi88 and TurtleBazooka/px68k under the package names minivmac, quasi88 and px68k (scriptmodules/emulators/minivmac.sh:12, quasi88.sh:12, px68k.sh:12). With built_by retropie and those names in cores, RetroPie resolves them to minivmac37, quasi88kai and px68k-sdl, while its libretro builds stay reached through retroarch. Measured: RetroPie keeps 532 of 532 platform files OK and gains the 14 files the standalone builds read; no other platform's resolution changes.
2026-10-20 21:46:16 +02:00
Abdessamad Derraz eaba9ce901 chore: regenerate the database and manifests 2026-10-20 21:46:10 +02:00
Abdessamad Derraz fbbc0512ac chore: drop a cgrom.dat copy named cgrom.tmp
bios/Sharp/X68000/cgrom.tmp had cgrom.dat's sha1 (8d72c5b4). px68k reads cgrom.tmp only when cgrom.dat is absent (libretro.c:915-919, SDL/SDL2/winx68k.cpp:317-331), and a real cgrom.tmp is a font mkcgrom generates on the user's machine. No platform declares it.
2026-10-20 21:46:10 +02:00
Abdessamad Derraz 3ebbcd5fc2 chore: regenerate the README and manifests 2026-10-20 21:42:45 +02:00
Abdessamad Derraz c702cdf62e fix: pack no launcher file the emulator installs
The launcher layer packed a file under the launcher's name whatever the
platform installs: ROCKNIX's xemu config reads hdd/xbox_hdd.qcow2, and
the profile marks that image installed_on rocknix, yet the pack brought
one. A place whose entry the emulator installs on that platform is now
filled by the install, as validation.deliverable has it for the pack.
2026-10-20 21:28:57 +02:00
Abdessamad Derraz 6295bf4545 refactor: drop the RetroBat LaserActive v1.02 name
RetroBat's ares launcher tries v1.05, v1.02 then v1.01 (Ares.Generator.cs:371-437), now recorded under launchers: in platforms/retrobat.yml. ares itself identifies the image by sha256. No file carries the name, so the database is unchanged.
2026-10-20 21:26:48 +02:00
Abdessamad Derraz b2b8dcd62c feat: read platform launchers in verify and packs
A names_searched list is one place the launcher fills with the first name it finds, so a core file it would never open once another name of the list is held is not reported missing. A place no declared file and no packed core file fills receives, under the launcher's name, a file the core accepts by content. The layer is applied inside find_undeclared_files, which verify and the pack builder both read, and a test reads their source to keep it there.
2026-10-20 21:26:48 +02:00
Abdessamad Derraz 8660892d60 docs: list the RetroPie and RetroDECK tests 2026-10-20 21:13:17 +02:00
Abdessamad Derraz 74a9d7beea feat: read RetroDECK launchers from components
The scraper reads each component's prepare, launcher and functions scripts at the components commit the BIOS list comes from, and the presets they copy: the fixed paths set_setting_value writes (melonDS seven, xemu three, Dolphin GBA), the folders handed over, the dir_prep links (LRPS2 pcsx2/bios back to bios/, Dolphin and PrimeHack GC regions under saves/), package copies into bios/, RetroArch core options naming a file (pcsx2_bios, DuckStation per region), XRoar romlists, the PICO-8 exec and the RPCS3 and Vita3K firmware downloads.

platforms/retrodeck.yml is regenerated at fcd0d729: only the launchers section is new.
2026-10-20 21:13:09 +02:00
Abdessamad Derraz 15ffeddfe3 feat: read RetroPie launchers from scriptmodules
The scraper walks each package's functions the way RetroPie runs them in one shell (assignments, arrays, for loops, brace expansion, $md_id, calls into other packages) and records every link, copy, move and setting that names $biosdir, the addEmulator flags (sdltrs -romfile3), the BIOS read outside $biosdir (basilisk --rom, gngeopi -B) and the launch scripts that exit without their file (fs-uae kick13.rom, reicast dc_boot.bin).

Each package also gets a package record with its rp_module_repo and the systems it registers, which maps a package to the build it compiles. The schema gains package, repo, systems and the moves and package kinds. platforms/retropie.yml is regenerated at 46128cd2: only the launchers section is new.
2026-10-20 21:13:09 +02:00
Abdessamad Derraz 1c23d4daaa chore: regenerate the Recalbox platform file
Scraped at 10.1.1. Only the launchers section is new: 85 records read from configgen.
2026-10-20 20:59:51 +02:00
Abdessamad Derraz fe9a081cfb feat: read Recalbox launchers from configgen
The scraper now records, from configgen at the pinned tag, the names each Recalbox launcher tries and where it hands them: the Hatari TOS cascades (standalone, hatari and hatarib cores), GSplus, Amiberry kickstarts, the PCSX2 region choice, the Dolphin IPL presence test, xemu, the mupen64plus 64DD IPL, the Mini vMac boot disk and the o2em_bios option. The system_directory libretroRetroarch gives each core, and the per-system overrides after it, are passes_path records.
2026-10-20 20:59:51 +02:00
Abdessamad Derraz 4465edcd0a refactor: import launchers from the shared reader 2026-10-20 20:59:41 +02:00
Abdessamad Derraz 98aebed900 refactor: share the configgen launcher reader
Recalbox starts its emulators from a Python configgen too. The parsed source, the record and the ast helpers move to configgen_launchers so both readers use them. Batocera's extractors are unchanged.
2026-10-20 20:59:35 +02:00
Abdessamad Derraz a9881caaf8 docs: list the ROCKNIX and EmuDeck launcher tests 2026-10-20 20:45:19 +02:00
Abdessamad Derraz 01ddbe5509 chore: regenerate the ROCKNIX and EmuDeck files 2026-10-20 20:45:19 +02:00
Abdessamad Derraz 3837d6f097 feat: read EmuDeck launchers from EmuScripts
The scraper reads the EmuScripts at the commit checkBIOS.sh is pinned to: the BIOS paths changeLine, iniFieldUpdate and RetroArch_setConfigOverride write, the ares and melonDS configs whose paths sed rewrites, and the bios/ directories linked to Flycast, Azahar, the Switch emulators and shadPS4. The script to emulator mapping moves beside the extractors so both read one table.
2026-10-20 20:45:19 +02:00
Abdessamad Derraz 57af8e4921 feat: read ROCKNIX launchers from its packages
The scraper reads the start scripts and the configs each package installs at the tag the BIOS list is pinned to: configs that name a BIOS path, the yabasanshiro search, directories handed to DuckStation and the PCSX2 builds, and the ln -s commands that put bios/ where an emulator reads. A package that ships one config per device gets a device field only where the values differ, as melonDS does on AMD64.
2026-10-20 20:45:19 +02:00
Abdessamad Derraz a9c175d322 chore: regenerate the updated platform files 2026-10-20 20:44:42 +02:00
Abdessamad Derraz afc2ce3268 docs: list the RetroBat launcher test module 2026-10-20 20:15:04 +02:00
Abdessamad Derraz ef68cc6615 chore: regenerate the RetroBat platform file
Scraped at emulatorLauncher 48cdc616, the revision already pinned: only the launchers section is new.
2026-10-20 20:14:52 +02:00
Abdessamad Derraz 419d68d1f2 feat: read RetroBat launcher records
The scraper reads emulatorLauncher's generators and es_features.cfg at the commit the BIOS list is pinned to: Ares, Hatari, Mesen, Amiberry, WinUAE, PCSX2, the PSX BIOS cascades, Xemu, openMSX and DuckStation. Each extractor raises when its construct is gone.
2026-10-20 20:14:52 +02:00
Abdessamad Derraz 897fe17ab2 feat: read Batocera launchers from configgen
The scraper parses the configgen generators with ast at the pinned tag: DuckStation and its legacy build, Hatari, xemu, melonDS, mupen64plus 64DD, x16emu, GSplus, and the o2em and neocd core options. An extractor that no longer recognises its code raises instead of writing an empty list.
2026-10-20 20:14:30 +02:00
Abdessamad Derraz 2556a03ed3 feat: describe platform launchers in the schema
A launcher record says what a platform's own launch code looks for and hands to an emulator, read from that code at the pinned revision.
2026-10-20 20:14:30 +02:00
Abdessamad Derraz 7151ea212c chore: regenerate the updated platform files 2026-10-20 20:14:22 +02:00
Abdessamad Derraz 479ada29fe docs: word removal candidates by what was searched
"No core opens it" claimed more than the search shows: what was
checked is that no profile of a core the platform runs names the
entry by name, path or hash. The reason and the page sentence now
say that.
2026-10-20 20:00:54 +02:00
Abdessamad Derraz 545e3f3ba1 feat: record each export change before and after
The page named the entries a change touched and never the values, so
a maintainer could not check a correction. The report now carries
changes, one object per change with kind, entry, field, old and new,
read from the platform entry and from the value the render writes
(written() per format: record value for System.dat and RomM, one md5
where a single one is checked). The existing label lists are derived
from it. The page writes "md5 X becomes Y" and names each required
flag with its new value. A test parses the original and updated
System.dat and es_bios.xml and checks the list equals the diff.
2026-10-20 20:00:54 +02:00
Abdessamad Derraz 5cba005d67 fix: keep the platform's hash order when unchanged
Where the truth names no value the platform lacks, hashes() still put
the truth's values first and rewrote the list in another order:
Recalbox's msx/CARTS.SHA md5 attribute came out with its two values
swapped, a diff line that changes nothing the frontend checks. The
platform's own list now stands when it already holds every value.
2026-10-20 20:00:54 +02:00
Abdessamad Derraz 0b4f98ce79 feat: report entries no examined core opens
The export keeps every entry a platform declares. An entry the truth
does not pair was still read in 1189 of 2776 cases (alias, hash, a
type: directory tree, a core outside the resolved set), so absence of
a pairing proves nothing. Each report now lists, under
removal_candidates, the unpaired entries that no profile of the cores
the platform runs answers by name, path tail, hash, directory or data
directory, with the cores examined and a reason. A core the platform
names without a profile, or a ROM set under a core that opens sets by
name, leaves the verdict undetermined. The exports page states the
count and lists the entries per platform.
2026-10-20 20:00:54 +02:00
Abdessamad Derraz 7e0b3a08b9 fix: keep System.dat lines whose values agree
The rom line renderer upper-cased every crc, so Dinothawr.zip's
683ed4ad, the one lower-case crc libretro writes, changed with no
correction behind it. A line whose values match ours now keeps its
bytes, a corrected crc follows the case of its own line, and an added
line keeps the file's upper case. An empty truth hands System.dat back
byte for byte for RetroArch and Lakka.
2026-10-20 19:39:36 +02:00
Abdessamad Derraz 546c1ac871 chore: regenerate the updated platform files 2026-10-20 19:39:36 +02:00
Abdessamad Derraz 506154744c chore: regenerate the README 2026-10-20 19:38:49 +02:00
Abdessamad Derraz eba5f1dd62 fix: patch Recalbox's attributes, not its elements
A changed element was rendered again, losing its alignment and the
place of its attributes, and an element whose md5 list was only
reordered (neogeo.zip, the same 24 digests) was rewritten too: Recalbox
accepts any digest of the list (Bios.cpp:109-130), so the order is not
content. A changed attribute is now replaced where it stands, one
dropped goes with its space, one added goes before />, and each system's
opening tag keeps its own indentation. An empty truth gives back the
cached es_bios.xml byte for byte.
2026-10-20 19:36:09 +02:00