Commit Graph
1069 Commits
Author SHA1 Message Date
Abdessamad Derraz 4603b6ec77 fix: the check names files it cannot supply
--check counted the required files the list leaves out and named none, then said all files were up to date. A Recalbox user asking why Caesar III would not start learned nothing, though the list names c3.555. The count line no longer calls a file not found unsafe.
2026-10-20 04:41:08 +02:00
Abdessamad Derraz 9e8229c07a fix: a resumed download is not counted as speed
The live line divided every byte by the run's time, a partial copy left by an earlier run included, and showed a 3 GB resume as 2.5 GB/s with nothing left.
2026-10-20 04:40:52 +02:00
Abdessamad Derraz 3f029578af fix: a scraper that cannot start says what to do
Scrapers resolve their tag or branch head in the constructor, which ran outside the try in scraper_cli: a refused GitHub call ended in a traceback. The error is now printed with the next step, setting GITHUB_TOKEN when the API refused an anonymous call.
2026-10-20 04:36:24 +02:00
Abdessamad Derraz 18e093182d docs: name the registries behind assets and dedup
The guides said files over 50 MB become release assets and that RPG Maker and ScummVM were the trees kept out of dedup. .gitignore decides the first, four committed files are over 50 MB, and NODEDUP_DIRS holds eleven trees.
2026-10-20 04:35:02 +02:00
Abdessamad Derraz 77c4857a46 fix: a site preview writes its own config
generate_site --docs-dir sent the pages elsewhere but always rewrote the tracked mkdocs.yml, outside the lock taken on that folder, with the navigation of the work in progress. Two previews into two folders both wrote it. Another folder now gets <name>.mkdocs.yml beside it, docs_dir set and its paths rebased, which mkdocs builds with -f.
2026-10-20 04:30:03 +02:00
Abdessamad Derraz 282f8d5d0a feat: watch the release page of off-forge profiles
About forty profiles describe projects published outside any forge (Altirra, ePSXe, DraStic, mednafen, xroar). profile_sync skipped them as an unsupported host and check_freshness reported the same UNKNOWN line every run, so a new release adding a firmware went unseen. A profile can now name the page announcing its releases and a pattern for the version: --check-version reads it, and check_freshness --profiles calls the profile stale when the page announces another version than core_version.
2026-10-20 04:28:27 +02:00
Abdessamad Derraz 1458f68b0d fix: test the targetless platform contract
A platform without hardware targets is now left out of a targeted --all run instead of being built unfiltered, and a run no platform can honour is refused.
2026-10-20 03:37:57 +02:00
Abdessamad Derraz 7edd438af1 fix: refuse a target no platform has
With --all, an unknown --target skipped every platform that has targets and ran the others (BizHawk, MiSTer) unfiltered, so verify, slots and the pipeline exited 0 on a typo. A platform without targets is now left out like the rest, and a target no platform has is refused.
2026-10-20 03:27:41 +02:00
Abdessamad Derraz c7c2f260f3 fix: check a forced rehash against the last one
The pipeline rebuilds the database with --force, which discarded the previous digests and wrote whatever the CPU computed, on a host that has given an incorrect SHA-1 under load. The forced run still rehashes every file, but a digest that contradicts the cache for an unchanged mtime and size is computed again, and the two readings that agree win, with a warning naming the file.
2026-10-20 03:24:55 +02:00
Abdessamad Derraz ab1f5d7eb4 fix: guard committed text against tooling names
Two test docstrings named the maintainer's private notes file, and nothing stopped it. They now state the rule itself, and test_prose_style fails on any tracked file that names the private notes or the assistant tooling.
2026-10-20 03:23:25 +02:00
Abdessamad Derraz dbf0647974 feat: find a RetroArch installed with Scoop
scoop install retroarch puts retroarch.exe under ~\scoop\apps\retroarch\current, its system folder persisted through a junction. The Windows search covered the installers' folders, Program Files, Steam, ES-DE and the Store package only, so the run offered C:\RetroArch-Win64\system, a folder that RetroArch never opens. The user and global Scoop roots are searched now, %SCOOP% and %SCOOP_GLOBAL% included.
2026-10-20 03:22:56 +02:00
Abdessamad Derraz 33091dabaf fix: list a platform's files without installing it
--list-systems, --list-cores and --list-targets read the manifest and write nothing, yet with --platform bizhawk they went through the portable-install refusal and stopped asking for --dest. Someone checking BizHawk's firmware before downloading BizHawk got an error. A listing now runs whether the platform is installed or not.
2026-10-20 03:22:05 +02:00
Abdessamad Derraz 600bb71fb1 fix: copy Azahar and Flycast files on macOS too
--standalone-copies named Linux and Windows folders for Azahar's aes_keys.txt and boot9.bin and Flycast's dc_boot.bin and dc_nvmem.bin, and nothing for macOS, where both emulators read a fixed folder: ~/Library/Application Support/Azahar/sysdata (common_paths.h:36,61) and ~/Library/Application Support/Flycast/data (osx-main.mm:83-101). A test now requires a macOS folder on every copy.
2026-10-20 03:20:01 +02:00
Abdessamad Derraz a9d384d167 fix: no install folder no platform reads
A platform named but not found fell back to a folder it never opens: ~/bios for RetroBat on Linux and for BizHawk picked from the menu, and on Windows the embedded systems' /userdata/bios, which resolves to the root of the current drive. Each run downloaded gigabytes and reported done. Where no folder on the OS is one the platform reads, a forced run now asks for --dest and the menu asks for a path with no default.
2026-10-20 03:17:42 +02:00
Abdessamad Derraz 31516c1f7c feat: read Lakka's board for the install
Lakka's image writes the board in /etc/os-release: LIBREELEC_DEVICE when built for a device, LIBREELEC_PROJECT otherwise, the very names of our Lakka targets. The installer read the board on Batocera, Recalbox and ROCKNIX only, so a Lakka RPi4 installed 5.7 GB of every board's files where its own needs 4.0.
2026-10-20 03:13:35 +02:00
Abdessamad Derraz d5560244b4 feat: list the OpenDingux, Miyoo and webOS targets
The buildbot publishes .so cores for OpenDingux (mips32, its beta and RS-90 builds), RetroFW, MiyooCFW and webOS (armv7a, aarch64), 7 to 206 cores each. None was a target, so a handheld or TV user could not narrow a pack or an install to the board. They are scraped now, with opendingux, retrofw, miyoo and webos as aliases.
2026-10-20 02:28:14 +02:00
Abdessamad Derraz 2fc0547a50 fix: check the banned vocabulary in tracked text
The project bans a short list of marketing words in what it publishes, and no test read for them: the site's platform table described Recalbox's interface with one. The line now says what Recalbox does, and test_prose_style fails on any of those words in a tracked file.
2026-10-20 02:25:12 +02:00
Abdessamad Derraz 8da4757538 fix: an unclaimed pcem ROM fails the owner test
The test skipped when slots stopped claiming pcem's ide_xt.bin. The profile declares it and the collection holds three copies, so that skip could only hide a claiming defect. It now skips only when the file is not collected and fails when it is not claimed.
2026-10-20 02:24:45 +02:00
Abdessamad Derraz b402a8b917 docs: install markdown with the test dependencies
CONTRIBUTING and the testing guide installed pyyaml and jsonschema only, while the CI test job also installs markdown. On a contributor's machine the wiki heading test skipped and the run read OK. Both name it now, and a test compares them to the packages the tests import.
2026-10-20 02:24:36 +02:00
Abdessamad Derraz 392a5d68cc fix: strict sync fails a profile it cannot check
profile_sync skipped a profile whose repository no longer answers, which carries no pin, or whose declared death the forge contradicts, with empty counts. --strict counted refs to review only, so the CI job meant to stop an unchecked new profile passed a mistyped repository. Such skips now fail a strict run. An unsupported host, a declared takedown and a profile without refs stay accepted.
2026-10-20 02:23:56 +02:00
Abdessamad Derraz 7bfe68b777 fix: an unanswered search is not a missing file
auto_fetch caught every network error in its repository and archive.org steps and reported the file as needing a community contribution. Offline or rate-limited, --create-issues asked the public for files the tool never looked for, and the errors counter stayed at 0. A 404 is still an answer. Any other failure now marks the file as not fully searched and keeps it out of issues.
2026-10-20 02:23:17 +02:00
Abdessamad Derraz 9fa1f45e92 fix: raise on a registry missing a platform file
list_registered_platforms skipped a registered platform whose YAML was missing and returned an empty list without a registry. verify --all --strict, every --all build, the CI matrix and the site then ran over fewer platforms and exited 0, and install.py kept serving the stale manifest. Both now raise and name the file.
2026-10-20 02:22:37 +02:00
Abdessamad Derraz c42c756b4a fix: group packs on everything that shapes them
group_identical_platforms fingerprinted each file by destination, sha1 and md5. Two platforms whose lists differed only in required, zipped_file, size or crc32, or in how the frontend checks a file, would have shared the representative's pack and verify result. The fingerprint now carries every field of every entry and the platform's verification_mode and hash_rule. No current platform is regrouped.
2026-10-20 02:14:14 +02:00
Abdessamad Derraz 23a999153d fix: read PR hashes the way the resolver does
load_profile_hashes and load_platform_hashes read hash fields by hand: crc32 was never indexed and a comma list of sha256 stayed one key. A contribution a profile names by crc32 alone (clk's Electron os.rom, among 626 entries) or by one of mesence's four sha256 was reported as referenced nowhere. Both indexes now read through parse_hash_list, and a crc32 counts where no stronger hash is declared, bounded by the declared size.
2026-10-20 02:12:54 +02:00
Abdessamad Derraz ac47faf7f2 fix: the pack check applies the frontend's rule
The integrity step compared a member's md5 by hand and ignored hash_rule, so under RomM's rule (size, then any of md5, sha1 and crc32) it would refuse a revision the builder rightly shipped on its sha1. The rule now lives in digest_verdict, which the path check and the pack member check both call. The member's archive digest is computed without the path cache, whose key a buffer's reused address made collide.
2026-10-20 02:11:53 +02:00
Abdessamad Derraz de66807bf3 fix: test that a removed size is reported
Locks the counter added for neocdz.zip: the platform's size with no truth size is a removal the summary names.
2026-10-20 01:25:36 +02:00
Abdessamad Derraz 19a7128ec6 fix: compare md5 when keeping Recalbox text
The attribute pattern took letters only, so md5 never entered the comparison and an element whose digest the truth corrects kept Recalbox's text. A test written before the change caught it. The RetroDECK fixture now names the core that reads its addition, as the placement rule requires.
2026-10-20 01:25:25 +02:00
Abdessamad Derraz c5fd079b78 fix: keep the text of unchanged Recalbox elements
Every <bios> element the model held was rendered again, so attribute order, alignment, a line break inside md5 and the case of a digest changed in 222 elements that stated the same thing. The diff deleted 451 lines for 136 corrections. An element whose attributes say what Recalbox wrote now keeps Recalbox's own text: 175 lines, the corrections.
2026-10-20 01:23:29 +02:00
Abdessamad Derraz cef6d943e2 fix: a Batocera note stays with its own item
Notes were keyed by file path, so a comment before one of the items reading an archive came back before every item reading it: bk's '# MAME' twelve times. A comment after the list's opening bracket matched neither rule and was dropped (enterprise's ep128emu-core). Notes are now keyed by file and archive member, written once, and a head-line comment goes with the first item.
2026-10-20 01:22:27 +02:00
Abdessamad Derraz e74d182d32 fix: a RetroDECK addition needs its component core
Additions took the component their system's entries sit in, whatever core reads them. 104 armsx2 and yaps2 files went into PCSX2's manifest, beetle_psx and rustation dumps into DuckStation's, a directxbox image into xemu's, all counted as added. An addition now lands only where a core reading it is that component's emulator: 132 additions instead of 581.
2026-10-20 01:21:38 +02:00
Abdessamad Derraz 132c69a4b2 fix: a ROCKNIX runner follows its build
ROCKNIX registers DuckStation twice, as the libretro core under retroarch and as duckstation-sa under its own emulator. The exporter looked a standalone runner up as a core name, so standalone DuckStation's 98 additions were written for users of the libretro core, PS2 images included, and standalone ARMSX2 was refused. A libretro runner now answers with the retroarch pair, a standalone with its emulator's own.
2026-10-20 01:20:45 +02:00
Abdessamad Derraz 676f322a62 fix: tag PAL and AUS files oceania
simple64 picks the PAL PIF for the European and Australian country codes, and New Zealand carts carry one of them. Citra MMJ's AUS font archives serve the region sold in Australia and New Zealand alike. Tagged australia, a leaf New Zealand is not under, --region new-zealand dropped them. They are tagged oceania, as every other PAL file is.
2026-10-20 01:19:56 +02:00
Abdessamad Derraz 8f8020f27d fix: the US Mega-CD BIOS also serves Latin America
jgenesis picks it for GenesisRegion::Americas, md-emu for boot byte 0x7a, ares for an NTSC-U disc: one code for every disc of the Americas, Brazilian Tec Toy releases included. The three tagged it north-america alone, so --region brazil dropped the BIOS those discs need. genesis_plus_gx and picodrive already carried both.
2026-10-20 01:19:16 +02:00
Abdessamad Derraz 7aa9b3fcaa fix: the gap CLI sets bundled files apart
cross_reference printed 20 runtime components bundled with their emulator as [MISSING] and counted them among the files to source. The collection leaves them out by design, as verify and the gaps page already say. They are now listed as [BUNDLED] and counted on their own line.
2026-10-20 01:18:09 +02:00
Abdessamad Derraz c6db200beb fix: the global gap report keeps standalone files
With no platform named, cross_reference passed no standalone cores, so every dual profile was laid out as libretro only. The CLI and the site's gaps page left out 133 files that Batocera and RetroBat run standalone and that no platform declares (eka2l1 90, dolphin 21, cemu 11). Both now pass the union of every platform's standalone cores.
2026-10-20 01:17:35 +02:00
Abdessamad Derraz 03a10841fb feat: collect J2ME-Loader 1.8.2-dev-1964 files
The five native libraries the reprofile added, and the assets and libraries whose copies dated from 1.8.2-open, now come from the official build of 752b93a (release continuous, CI run 39297510978, signing certificate de1bd54d as on 1.8.2). Assets match the repository blobs byte for byte. The profile carries their hashes, and the bundled-identity table now records each fall exactly.
2026-10-20 00:34:58 +02:00
Abdessamad Derraz 185529ce75 fix: pack only what BizHawk's database names
EmuHawk finds every firmware by SHA1 against FirmwareDatabase.FirmwareRecords, and its cores are its own builds. The registry and the scraper both listed libretro cores whose systems overlap BizHawk's, so the pack shipped Clock Signal, O2EM, FBNeo, VICE and Citra files into Firmware/ that EmuHawk never reads. Both lists are now empty, as MiSTer's are: the database alone decides.
2026-10-20 00:33:38 +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 aea67e998f fix: claim a partial only under its own name
Opening and locking a partial download are two steps. Between them another run could finish, rename the same file into place and release its lock. The second run then locked the installed BIOS, read its full size as a finished partial and truncated it to download again. After the lock the partial's name must still point at the locked file, or the run downloads into a private copy.
2026-10-20 00:31:00 +02:00
Abdessamad Derraz d1ff233990 fix: profile_sync reports in English
The summary line and the markdown table header were the only French strings among the project's command output.
2026-10-20 00:29:57 +02:00
Abdessamad Derraz 7eb4a36711 fix: step 5 compares the cores' share of a pack
The consistency check compared the platform's own files only. It now also compares verify's core files and game data with the builder's count of files taken from the cores.
2026-10-20 00:28:40 +02:00
Abdessamad Derraz 89050ea5d9 fix: count core files as the pack places them
The report counted claims, not files: several cores claim one path (rom.key by three Amiga cores, openbios.bin with and without a region) and the builder ships one file there. RetroArch read 1130 core files, 48 more than its pack. Game data ignored the in_pack marker, so RomM read 351 game data files in a pack that holds none. verify now takes both counts from its replay of the builder's placement, one per pack path.
2026-10-20 00:28:40 +02:00
Abdessamad Derraz 6bfd73f4f8 fix: a truncated tree does not prove a file gone
When the forge truncates the HEAD tree, the rename search cannot see every path, yet a bare filename it did not find was reported GONE. eden's fs_paths.h and path_util.cpp exist under src/common/fs/. Such a citation is now AMBIGUOUS with the reason, as the realign path already says unclear and never absent.
2026-10-20 00:15:39 +02:00
Abdessamad Derraz d62ada2e6e fix: read a citation wrapped before its colon
jgenesis, ioquake3, yquake2, playdiaemu, samcoupe, skyline and plastic wrap a citation as `path.ext` then `:N-M` on the next line. The collector only joined a line ending with a colon or comma, so these runs were never compared and a bump moved the pin past them silently. They are now read, as wrapped runs that hold the pin until rewritten.
2026-10-20 00:14:43 +02:00
Abdessamad Derraz e1c1fffdaf fix: follow the shared lookup in the judge guard
The core extras loop reaches validated_choice through ExtraResolver.resolve now, so the guard follows that call instead of counting direct calls.
2026-10-20 00:12:43 +02:00
Abdessamad Derraz 5e84244cb9 fix: a game folder copy yields to a neutral one
hypseus-singe, flycast-dojo, lindbergh-loader and vvvvvv read gamecontrollerdb.txt without naming a hash. The name step only set aside copies in other emulators' trees, so a copy in a game's folder under Game Engines/ ranked with any neutral one, and index order handed them C-Dogs' 98-line database. A game folder's copy now ranks after a neutral copy. The community SDL_GameControllerDB is collected at commit ff333823 (git blob 25146be7) as that neutral copy.
2026-10-19 23:16:38 +02:00
Abdessamad Derraz f50773a89f fix: the path step checks the size the code reads
The name step refuses a candidate outside the size an entry validates, but the path step returned any hashless file at the tail as path_exact, a proof slots arbitration trusts. A 32 KB cpc6128.rom at ZEsarUX's tail would have been served for its 48 KB composite. No profile hits it today.
2026-10-19 23:14:47 +02:00
Abdessamad Derraz adaa1eba87 fix: a shared tail is proof only in the own tree
PCSX2x6 reads bin/resources/GameIndex.yaml, an arcade database keyed by NM gameid. The shortened tail resources/GameIndex.yaml matched four files, and the resolver set aside the three in other emulators' trees before measuring ambiguity, so PCSX2's console database passed for path proof and shipped in the PCSX2x6 pack. Ambiguity is now read before that filtering. A tail indexed from an identical copy is kept even when the database records the other copy's path.

PCSX2x6's GameIndex.yaml and RedumpDatabase.yaml are collected from its repository at the pinned 583f0e90 (git blobs ed8232e3 and 8669b3af).
2026-10-19 23:14:24 +02:00
Abdessamad Derraz 843f0ddc0e fix: ares labels name ares's own dumps
ares matches its firmware by sha256 and opens no file by name, so its entry names are labels. Five reused names that other cores give to different dumps (MSX.ROM, MSX2.ROM, bios_CD_E/J/U.bin). On RetroBat that put ares's revision where the platform pins another, slots blamed the platform's declaration, and the pack dropped ares's own dump behind the platform's file. The labels now name the dumps the hashes identify.
2026-10-19 23:11:44 +02:00
Abdessamad Derraz 8fd8437351 refactor: share the core file lookup with verify
verify replayed the builder's placement of core files with a bare name lookup, without the archive index, the data directories or the core's own choice of copy. It compared other bytes than the pack's (blueMSX's MSX2P.rom from bios/ against the data tree's copy) and let an unresolved file take a path the builder leaves free. ExtraResolver now holds the builder's lookup and both call it.
2026-10-19 23:08:12 +02:00