Commit Graph
91 Commits
Author SHA1 Message Date
Abdessamad Derraz aaffcdcb63 fix: patch Batocera's values, not its entries
An entry with one md5 to correct was written again whole: atarist lost
its eight blank lines, every '"x"},' became '"x" },', and most of the
819 lines Batocera's export changed were layout. Each item now keeps
its own text and only the md5 inside it changes; an addition follows
the last item in its indentation and spacing. The patched entry must
read as the one that would have been written, or that one is written.
Batocera's diff to the original drops to 273 lines, ROCKNIX's to 3.
2026-10-20 19:22:58 +02:00
Abdessamad Derraz 659e9b591f fix: keep RetroBat's blank line between systems
RetroBat separates every system after the first with a blank line.
json.dumps dropped all 100 of them: 100 hunks of noise in a diff meant
to show corrections. The separator is written again where the original
has it, and an added system takes it too where the original separates
them all. An empty truth gives back the cached file byte for byte.
2026-10-20 19:07:46 +02:00
Abdessamad Derraz 804534397f fix: write the MiSTer database on one line
The BiosDB is published as a single line of JSON without a final
newline. Written with indent=2 it came out as 1499 changed lines for a
database whose content had not changed, which would bury any real
correction. It is now written in MiSTer's own form: an empty truth
gives back the cached database byte for byte.
2026-10-20 18:54:28 +02:00
Abdessamad Derraz 3ed5f68b82 fix: hand RetroDECK manifests back as written
With nothing to correct, nine of ten manifests still changed: a final
newline was added where the original ends without one, "md5": null was
written 39 times where no md5 key was, and PPSSPP's single bios object
became a list rebuilt from our data. A manifest now ends as the
original does, keeps no key it did not have, and a single object stays
one while nothing is added. An empty truth gives back every cached
manifest byte for byte.
2026-10-20 18:41:26 +02:00
Abdessamad Derraz 85c2433c98 fix: write each export as its bytes and mode
write_text translated line ends on Windows, so FirmwareDatabase.cs's
CRLF would have come out CR CR LF; it replaced the published file in
place, so a run stopped mid-write left it truncated; and it dropped the
mode, while rocknix-systems is 100755 in ROCKNIX's tree. Files are
written atomically as UTF-8 bytes, and an exporter states the mode of
any file the platform does not publish as 0644.
2026-10-20 18:27:22 +02:00
Abdessamad Derraz cbe769e74c fix: read all RetroPie helps, propose only its own
Eight scriptmodules write "bios" in lower case (xm7, np2pi, quasi88,
minivmac, px68k...) and none was examined. A module reported "left as
is" for a name no profile documents was written all the same: the skip
had no continue. The cap of six names came from that case-sensitive
reading, where xm7 writes thirteen: a sentence now grows no longer than
the longest RetroPie writes. lr- was stripped whatever the build, so the
standalone minivmac package matched the libretro profile, which reads
another file. A file of a system RetroPie lacks is proposed to no
package: lr-geargrafx adds pcengine only (lr-geargrafx.sh:41-42) and
was given the LaserActive's pac-n1.bin and pac-n10.bin.
2026-10-20 18:12:56 +02:00
Abdessamad Derraz a5d7a6572d fix: ask for no file the emulator installs
The pack leaves out what an emulator installs itself
(validation.deliverable); the truth did not. RetroPie's gngeopi help
asked users to copy gngeo_data.zip, which make install puts in the
package's data directory, and amiberry's whdboot tree, scummvm's extra
data and dosbox-x's FREECG98.BMP went into platform lists as files to
bring.

The truth applies deliverable per platform and per build: an entry
nobody has to bring is kept and marked bundled, never added, still
corrected where the platform declares it. A rebuilt archive is
installed only when every member is. The runner written beside an
addition is the build that needs the file (_brought_by), and the
RetroPie sentence names only what its package's core must be given.
2026-10-20 17:39:21 +02:00
Abdessamad Derraz f957b5f893 fix: open no System.dat section libretro lacks
libretro titles each section with the system as it spells it,
"Commodore - Amiga". An addition for a system it has no section for
opened one under our slug: 21 sections came out as commodore-c64,
quake, laseractive or xrick, which no libretro DAT carries. An addition
now lands only in a section the original holds and is otherwise counted
as left out, so the export keeps the original's 66 sections. A platform
entry is always written, under its own section.
2026-10-20 17:21:16 +02:00
Abdessamad Derraz e5174a07bf feat: mark files a core finds by content
DuckStation identifies its BIOS by MD5 in a folder it scans
(bios.cpp:208), so its entries' names are labels. The export wrote them
into Batocera's and ROCKNIX's lists as files to hold: a user with only
scph5501.bin read 104 missing BIOS where DuckStation boots. Labels also
lent their md5 to a name another core opens, and paired by name they
replaced System.dat's scph5000.bin hashes.

found_by: name | content, on a profile or a file and keyed by build like
load_from. The truth records which cores open each name (_named_by). A
label pairs with a platform entry by hash only, is never added, merges
with an opened name only on a shared hash, and is counted in the export
report rather than listed as missing.
2026-10-20 16:32:22 +02:00
Abdessamad Derraz 7a65a2cf83 fix: refuse an export without its original
System.dat, RomM, Recalbox and RetroBat were rebuilt from our data when
their file was not cached: libretro's quoted names, Recalbox's comments
and one of its two zxspectrum blocks were lost, and the run said OK.
needs_original now follows native_sources, so every format we patch
fails without the file it patches and writes nothing.
2026-10-20 15:09:16 +02:00
Abdessamad Derraz e81c63804a fix: correct no hash the code does not check
validation: names what the code verifies. dosbox checks
MT32_CONTROL.ROM against nine sha1 and size; the truth's one md5 and
crc32 describe one of those revisions, and the export wrote them beside
System.dat's own sha1, a rom line no file satisfies, and replaced
Batocera's md5. pcsx_rearmed and DuckStation check scph1001.bin by size,
and the v2.0 md5 platforms name was replaced by v4.1's.

checked_hashes keeps a hash the code does not name only where a checked
hash pins one content. Otherwise it still pairs a renamed file but never
corrects or fills a value the platform wrote. Additions keep every hash.
diff_truth reads the same rule.
2026-10-20 14:40:10 +02:00
Abdessamad Derraz 181ad0c630 fix: pair truth entries hash-consistent first
Each truth entry claimed its platform line in turn, so the first one to
arrive won. dosbox-x's system.rom (alias bios.rom, no path) took
Batocera's np2kai/BIOS.ROM by name before np2kai's own np2kai/bios.rom
was tried, and the export wrote an IBM PCjr md5 on it. A path also
outranked a contradicting hash: the truth's MSX.rom joins bluemsx's path
and fmsx's md5, which replaced the blueMSX dump on Recalbox's and
System.dat's Machines/Shared Roms/MSX.rom while fmsx's own line held it.

pair_entries runs each test over every entry before the next, tests that
contradict no hash first. export_native and diff_truth both read it.
2026-10-20 14:24:00 +02:00
Abdessamad Derraz 048334cc82 docs: offer the platform files as peers would
The page called the original "their file" and listed hashes "corrected" and additions "left out", a verdict on work the page only proposes to extend. It now says what each updated file changes in neutral terms built from the report's numbers, gives the reason a file is not added, credits the effort a list takes to keep current, and invites an issue when a change does not fit a platform. A test keeps the judging words off the page.
2026-10-20 13:20:34 +02:00
Abdessamad Derraz b6a1304893 feat: commit the corrected file of each platform
exports/ now holds the twelve platforms' own files, corrected, with a
report of every change, read by the site's corrected files page. Two
summaries are reworded for the page: an addition the format cannot
carry is counted as left out, and RetroPie names each skipped package
by sentence instead of joining reasons with semicolons. Its parser no
longer reads "e.g" as a file name.
2026-10-20 09:26:12 +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 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 fc47ac9f1f refactor: pair truth and platform entries one way
diff_truth matched by name with a rank, export_native by path, guarded name and hash: on current data each named files the other did not. Both now read one matcher, which also accepts aliases and sha256.
2026-10-18 20:48:29 +02:00
Abdessamad Derraz 66caa0e363 fix: read batocera entries as literals
A comment after an entry swallowed the closing brace, so gba was rewritten with its emulator gate lost. The entry is now read with literal_eval, which also stops executing the platform's text.
2026-10-18 20:37:38 +02:00
Abdessamad Derraz eac2eaec83 fix: count only the hash changes an export writes
RomM kept hashes the truth contradicts beside the corrected one, RetroDECK kept a cleared md5, Recalbox counted changes on an element it writes back whole, and two record formats counted fills no record could hold.
2026-10-18 20:36:47 +02:00
Abdessamad Derraz 213d19ed27 fix: refuse an unparseable platform original 2026-10-18 14:57:28 +02:00
Abdessamad Derraz 76d3c987d4 fix: name the corrections an export withholds 2026-10-18 14:32:30 +02:00
Abdessamad Derraz 2173db889b fix: count values the RomM export normalises 2026-10-18 14:31:52 +02:00
Abdessamad Derraz 070e90eb64 fix: count an appended RetroDECK revision apart 2026-10-18 14:31:03 +02:00
Abdessamad Derraz c254115647 fix: keep a MiSTer record whole without an md5 2026-10-18 14:30:16 +02:00
Abdessamad Derraz 6458a927d4 fix: refuse multi-md5 additions in RetroBat 2026-10-18 14:29:46 +02:00
Abdessamad Derraz 1e2f4e810b fix: never extend a RetroPie list of examples 2026-10-18 14:29:06 +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 faa8af0800 refactor: annotate every remaining signature 2026-10-18 00:44:20 +02:00
Abdessamad Derraz 0754d3b64f fix: name each exported addition's core
Batocera, ROCKNIX and Recalbox find a file through the core that wants
it. Additions now carry that core under the platform's own name: the
emulator/core pair checkBios reads (ROCKNIX's from its emulators
package), or Recalbox's core attribute. One with no nameable core, or
filed in a system gated on another core, is counted as not stated.
2026-10-17 19:34:30 +02:00
Abdessamad Derraz e9f9260301 fix: keep one dump per exported hash record 2026-10-17 19:26:46 +02:00
Abdessamad Derraz 27ddd47b20 fix: name one file per search chain for RetroPie 2026-10-17 11:54:56 +02:00
Abdessamad Derraz ec4a06e872 fix: name a System.dat addition by its path 2026-10-17 11:54:05 +02:00
Abdessamad Derraz db179faf82 fix: write no platform size beside a truth hash 2026-10-17 11:53:18 +02:00
Abdessamad Derraz c6cac0ad1b fix: read exportable through the exporter instance 2026-10-16 15:57:43 +02:00
Abdessamad Derraz 06bf6d7c09 fix: treat an empty platform system as named 2026-10-16 15:53:24 +02:00
Abdessamad Derraz 21dadfe3bf fix: count bizhawk fills only where written 2026-10-16 15:45:42 +02:00
Abdessamad Derraz ff243c9978 fix: keep each recalbox block and its comments 2026-10-16 15:45:05 +02:00
Abdessamad Derraz 42124618e9 fix: add no file under a system the platform lacks 2026-10-16 15:43:47 +02:00
Abdessamad Derraz ffeee246ff fix: keep retrodeck md5 lists as arrays 2026-10-16 15:42:18 +02:00
Abdessamad Derraz 3a0ae494d3 fix: keep one-value md5 blank when dumps differ 2026-10-16 15:40:44 +02:00
Abdessamad Derraz ff5e5145fd fix: keep recalbox and libretro entries on export 2026-10-16 05:20:09 +02:00
Abdessamad Derraz 06ca898838 fix: keep retrobat entries the export does not model 2026-10-16 05:16:07 +02:00
Abdessamad Derraz 8380f63f97 fix: write one romm entry per key 2026-10-10 12:11:16 +02:00