Commit Graph
989 Commits
Author SHA1 Message Date
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 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 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 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 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 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 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 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 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 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 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