Commit Graph
901 Commits
Author SHA1 Message Date
Abdessamad Derraz b86a34933c feat: parse gamel machines and computed sizes 2026-08-12 03:15:05 +02:00
Abdessamad Derraz ac9ce4d2cc feat: realign prose refs across fourteen profiles 2026-08-12 03:11:47 +02:00
Abdessamad Derraz 6719aa415d feat: anchor prose citations beside source refs 2026-08-12 03:11:47 +02:00
Abdessamad Derraz 48a432d79c feat: collect the game genie rom in both loader forms 2026-08-12 01:43:35 +02:00
Abdessamad Derraz ef449ed12f feat: collect ten ps2 board dumps 2026-08-12 01:38:26 +02:00
Abdessamad Derraz 4b9c89466a feat: serve the cmd drive roms under the vice names 2026-08-12 01:35:12 +02:00
Abdessamad Derraz bd8fb75722 feat: collect three coh-h board dumps 2026-08-12 01:32:13 +02:00
Abdessamad Derraz 1251589940 chore: drop the unsourceable flag on collected files 2026-08-12 01:17:07 +02:00
Abdessamad Derraz 5bae72bcae feat: collect the vita patch list 2026-08-12 01:16:40 +02:00
Abdessamad Derraz a47d3a7efe feat: collect the applewin resource roms 2026-08-12 01:12:10 +02:00
Abdessamad Derraz 8c0de8f91c feat: collect the wii nand backup 2026-08-12 01:10:54 +02:00
Abdessamad Derraz eece892a73 feat: collect the ps4 system modules and the mame support data 2026-08-12 01:07:44 +02:00
Abdessamad Derraz d0395f4226 feat: collect the xbox dashboard tree and the eeprom 2026-08-12 00:55:24 +02:00
Abdessamad Derraz 2fcde58db0 feat: collect the amiibo keys and the driver libraries 2026-08-12 00:49:40 +02:00
Abdessamad Derraz b120528dd7 test: cover the native format exporters
export_native turns the profile data back into each platform's own
file, for a maintainer there to pick up and use, and none of the ten
exporters had a test. Coverage goes from 0 to 83%.

Writing them found the EmuDeck exporter rejecting its own output: its
export skips placeholder entries, its validate looked for them anyway
and reported the omission as a missing hash. Both sides apply the same
filter now.

The placeholder assertion initially passed for the wrong reason twice
over -- the fixture entry had no hash, so it was dropped as incomplete
rather than as a placeholder, and the assertion then read the name
while the exporters write the path. It is pinned on an unmistakable
destination now, and removing the guard fails two tests.
2026-08-12 00:46:04 +02:00
Abdessamad Derraz fa5b1130ec chore: drop the unsourceable flag on the vita databases 2026-08-12 00:35:14 +02:00
Abdessamad Derraz 69d0c7ad85 chore: drop a same-named file from another project 2026-08-12 00:35:06 +02:00
Abdessamad Derraz 1ea547255d feat: collect the soundfonts and the controller database 2026-08-12 00:33:51 +02:00
Abdessamad Derraz 50dd523493 chore: refresh database, manifests and readme 2026-08-11 20:42:36 +02:00
Abdessamad Derraz b24c5cdb91 feat: refine eighteen profiles and drop a duplicate
cheat.zip under mame4droid was byte-identical to the Arcade copy and
resolves by hash from there.
2026-08-11 20:30:27 +02:00
Abdessamad Derraz b5f28d7b7f chore: drop three reads whose result went nowhere
The requirement parser read core, hashMatchMandatory and note from
each bios element and discarded all three, which reads like a dropped
attribute: hashMatchMandatory decides whether a wrong hash is yellow or
red on Recalbox. It is not lost -- the config parser below captures it
for the YAML -- so these were leftovers, and they cost a look to
confirm that.

Two yaml imports left unused by the move to the shared loader go too.
2026-08-11 20:27:53 +02:00
Abdessamad Derraz e6813aaa60 feat: collect the vita compatibility data and the arcade history 2026-08-11 20:20:18 +02:00
Abdessamad Derraz 0a941acc43 refactor: split the site validator into its two passes
validate_site reached complexity 43 doing three things at once. The
per-page checks and the link resolution are now separate functions and
the caller keeps only the cross-page duplicate check, which cannot run
until every page has been seen.

The first attempt left the link pass calling a closure that had moved,
and running it against the real site did not catch that: no page there
has a broken link, so the error path never ran. The unit test covering
a deliberately broken fragment did.
2026-08-11 20:16:11 +02:00
Abdessamad Derraz 00f10b0379 refactor: extract rename matching from the truth diff
_diff_system reached complexity 42, and its hash-based rename fallback
is the part that stands alone: a platform is free to call a file
whatever it likes, so a name matching nothing is not yet a gap, and
counting one file as both missing and extra invents a discrepancy.

That step is now its own function at complexity 31, with the tests it
never had: pairing on any of the three digests, case folding, non-string
values, and the case where two files simply have no hashes and so are
not evidence of anything. diff_truth output is unchanged.
2026-08-11 19:54:45 +02:00
Abdessamad Derraz 7a9e227e95 feat: collect the archiver libraries for xm6 2026-08-11 19:44:19 +02:00
Abdessamad Derraz faff5c08bd feat: collect the amstrad roms and the mame4droid data 2026-08-11 19:38:39 +02:00
Abdessamad Derraz e66a89d1be feat: collect the trs-80 rom images and the ines assets 2026-08-11 19:33:32 +02:00
Abdessamad Derraz 826e8c0c01 feat: collect the fpse plugins and the apple iie keyboard rom 2026-08-11 19:29:30 +02:00
Abdessamad Derraz fec53f7a20 chore: refresh database, manifests and readme
Regenerated with the large-file cache populated, the state CI builds
from: without it ten preserved entries resolve differently and the
counts drift by one file.
2026-08-11 19:28:08 +02:00
Abdessamad Derraz 2df67ba204 feat: collect the epsxe shader packs 2026-08-11 19:21:00 +02:00
Abdessamad Derraz 4b8d7baac5 feat: transcribe bios search orders into priority 2026-08-11 19:18:30 +02:00
Abdessamad Derraz d862de9a2e feat: collect the drastic data files 2026-08-11 19:14:34 +02:00
Abdessamad Derraz d7da2d1645 feat: rebuild the a7800 bios archives from their recipes 2026-08-11 19:12:09 +02:00
Abdessamad Derraz cffb067a59 chore: refresh database, manifests and readme 2026-08-11 19:06:19 +02:00
Abdessamad Derraz 9dfe73d37a feat: collect the schweber demo unit image 2026-08-11 19:02:57 +02:00
Abdessamad Derraz 28643bef5b feat: collect the flash player runtime and the supercharger roms 2026-08-11 18:57:09 +02:00
Abdessamad Derraz f3d912f3d3 feat: profile five more emulators and refine seven 2026-08-11 18:54:15 +02:00
Abdessamad Derraz 9af958e9f8 feat: re-extract the j2me and arcade front-end assets
Bytes taken from the shipped applications rather than a normalised copy.
2026-08-11 18:54:15 +02:00
Abdessamad Derraz d28efae88c fix: stop git normalising preserved bytes
SHA1 is the primary key of this collection and there was no
.gitattributes, so git guessed. Git for Windows sets core.autocrlf=true
by default: a clone there rewrites every file git considers text,
meaning the shaders, .ini, .txt and .dat assets under bios/ arrive with
CRLF and a different hash from the one published. Verification then
fails on files nobody touched.

bios/ and data/ are exempt from normalisation, generated artefacts are
pinned to LF so a Windows checkout does not show them modified, and the
rule order is asserted rather than assumed.
2026-08-11 18:52:10 +02:00
Abdessamad Derraz 851b9c9e50 feat: collect the bam runtime and its tracking libraries 2026-08-11 18:41:44 +02:00
Abdessamad Derraz 4ecb65b8d9 fix: keep the mame clone map across runs
A clone group is only visible while both copies are on disk, and the
run then deletes the clone, so writing only what this run saw erased
every mapping an earlier run had recorded. One real run took the map
from 69 entries to 1, and the canonical zips silently stopped answering
to the names they stand in for.

The map is merged now, the 68 lost entries are restored, and the one
whose canonical file is no longer in the collection is dropped.
2026-08-11 18:41:04 +02:00
Abdessamad Derraz 8c018849ae fix: return instead of continue in the split profile
The cross-reference loop body became its own function, but one exit
stayed a continue and left the module unparseable, which took the whole
test suite down with it. The other ten continues are inside genuine
inner loops and stand.

Output verified identical to the version before the split.
2026-08-11 18:41:04 +02:00
Abdessamad Derraz 6e5b15911f chore: drop the unsourceable flag on collected files 2026-08-11 18:12:59 +02:00
Abdessamad Derraz 837ea786b0 refactor: separate the dedup decision from the deletion
deduplicate reached complexity 50 by mixing the question of which
copies may go with the work of removing them. The decision is now its
own function: same name in two directories is a true duplicate,
different names only collapse as MAME device clones, and anywhere else
each name may be the one some emulator looks for.

Verified against the real collection: both versions plan the same 99
removals.
2026-08-11 18:12:35 +02:00
Abdessamad Derraz 58ca2689f1 test: pin the rules dedup must not get wrong
dedup.py is the only script here that deletes BIOS files and it had no
tests: the sole guard was remembering --dry-run. These cover the
protected directories where two identical copies are both load-bearing,
the canonical choice between a primary and a variant, MAME zip clones
against same-content files that must keep every name, and that a dry
run reports exactly the plan the real run executes.

Disabling the NODEDUP guard fails four of them.
2026-08-11 18:10:20 +02:00
Abdessamad Derraz 6f93624a77 feat: collect the j2me runtimes and the smaf libraries 2026-08-11 18:09:15 +02:00
Abdessamad Derraz b5e6b68263 refactor: split the per-system platform sections
generate_platform_page reached complexity 49, most of it in the block
rendering one collapsible section per system: each file shows a
different set of hashes, sizes and provenance depending on what the
platform declares. That block is now its own function and the caller
sits at 28. All 534 pages identical apart from timestamps.
2026-08-11 18:07:57 +02:00
Abdessamad Derraz ae7256f56f refactor: split the cross-reference into its two views
generate_cross_reference rendered the same relation twice in one
function, once per platform and once per upstream, and reached
complexity 53. Each view is now its own function and the caller is a
pair of calls.

Verified by generating the site with both versions against the same
data: all 533 pages identical apart from timestamps, with a control run
of the same code twice to confirm the comparison had no drift in it.
2026-08-11 17:58:11 +02:00
Abdessamad Derraz 36a284b93b fix: name and announce every narrowed pack 2026-08-11 17:54:28 +02:00
Abdessamad Derraz bdf6bf6da0 feat: collect the mfme default assets 2026-08-11 17:52:04 +02:00