Commit Graph
725 Commits
Author SHA1 Message Date
Abdessamad Derraz e8ee8b0954 fix: decide hash mismatch by native mode
A declared hash that the local dump contradicts is not one situation. An
existence platform never reads the bytes, so withholding the file lets an
upstream list error remove something the frontend would have loaded; a
hash platform would reject it, so shipping it is pointless.

The mode now decides, at every point that had an opinion: pack building,
core complement, emulator packs, manifests, conformance and
_intentional_hash_exclusion. verify.find_undeclared_files follows, since
verify and generate_pack must agree file for file.

Also here: resolution reports which evidence matched rather than a flat
"exact", a path or filename can no longer override a declared hash, and
safe_extract_zip treats a Windows backslash as the separator it is
instead of refusing the archive.
2026-08-10 13:36:03 +02:00
Abdessamad Derraz a5f549a1c6 fix: name rom members as their source names them
Four archives carried member names no MAME version uses. Each is decided
against MAME 0.289 at the revision the profiles cite:

  manager.zip   1 -> 01                       crvision.cpp:957
  sys573.zip    700a01(gchgchmp).22g -> ,     ksys573.cpp:3575
  cedmag.zip    Magnet-Master-VID-E03.BIN     cedar_magnet.cpp:1040
  advision.zip  b225__/b8223__ prefixes cut   advision.cpp:456,459

Content is untouched: every member keeps its crc32 and size. The
archives are rebuilt with torrentzip so their bytes depend only on their
contents, which is the repository convention (51 of 60 sampled archives)
and what two of these four already were.

Batocera, RetroBat and RetroDECK pin the older naming, so the upstream
archives stay verbatim under .variants/ and resolve_local_file serves
each layer the copy it expects.
2026-08-10 13:35:53 +02:00
Abdessamad Derraz 597a8ff919 fix: quote rom and core names in yaml
YAML 1.1 reads an unquoted 01 as the integer 1 and 81 as 81, so the
manager set stopped naming the file its driver opens and the API
published "cores": [2048] as a number where consumers match strings.

Ground truth from MAME 0.289 at the revision the profile cites:
src/mame/vtech/crvision.cpp:957 loads "01" and "23".

The root cause was the scraper: _hash_merge wrote these names through an
f-string, so quoting the profiles alone would be undone on the next
refresh. _yaml_scalar now quotes every name, archive and description it
writes.
2026-08-10 13:35:42 +02:00
Abdessamad Derraz 5d417c8229 feat: add data contract validation
JSON Schemas for the database, install and pack manifests, target
manifests, site API envelopes and stats, plus the semantic invariants a
schema cannot express: declared totals matching their lists, no
destination both installed and omitted, database keys matching their
sha1. validate_site.py checks the rendered HTML for metadata, headings,
image alternatives, duplicate ids and unresolved local links.

Pack manifests are read from inside the generated archives, where
generate_pack writes them, rather than from a dist/ glob that matches
nothing.

Emulator and platform schemas gain additionalProperties: false, and
cores[] plus contents[].name must be strings: an unquoted 81 or 01 in
YAML parses as a number and stops matching the upstream name.
2026-08-10 13:35:33 +02:00
Abdessamad Derraz 45f89cc6c0 feat: add region filters and profiles 2026-08-09 14:15:56 +02:00
Abdessamad Derraz 1c537c3a30 fix: keep mame refresh to profiles on mame's tree 2026-08-08 13:52:25 +02:00
Abdessamad Derraz 731096cf12 chore: refresh mame bios refs from 0.289 2026-08-08 13:50:25 +02:00
Abdessamad Derraz 89211003cb fix: refresh mame refs when a driver line moves 2026-08-08 13:48:54 +02:00
Abdessamad Derraz 1232e43e7a chore: recale refs after the parsing fixes 2026-08-08 13:44:47 +02:00
Abdessamad Derraz fa6de11133 feat: parse colon continuations and header stems 2026-08-08 13:44:03 +02:00
Abdessamad Derraz 587aefd282 fix: name the external project on every dosbox ref 2026-08-08 13:41:28 +02:00
Abdessamad Derraz dde5509a39 chore: recale refs followed to their subject 2026-08-08 13:40:37 +02:00
Abdessamad Derraz 17da2ae76f feat: follow refs to a unique declared value 2026-08-08 13:39:54 +02:00
Abdessamad Derraz c8e05013d9 feat: follow a ref when its subject moved with it 2026-08-08 13:38:30 +02:00
Abdessamad Derraz f4a8d8c54b chore: rebuild manifests and docs 2026-08-08 13:36:57 +02:00
Abdessamad Derraz 31c4bee36b fix: point amiberry kickstart refs at candidates 2026-08-08 13:36:51 +02:00
Abdessamad Derraz c42209fa96 fix: point three refs at their real locations 2026-08-08 13:35:19 +02:00
Abdessamad Derraz 82b510de0d fix: relocate gear family bios refs 2026-08-08 13:23:06 +02:00
Abdessamad Derraz 642e9ea9ca fix: mark ecwolf data as standalone only 2026-08-08 13:20:54 +02:00
Abdessamad Derraz 7755367787 docs: document tag-pinned profile handling 2026-08-08 13:17:52 +02:00
Abdessamad Derraz b00ca4d237 docs: state only what the data supports 2026-08-08 13:16:17 +02:00
Abdessamad Derraz 4c5ca17682 feat: judge tag-pinned profiles on their own revision 2026-08-08 13:12:35 +02:00
Abdessamad Derraz 088caef45e docs: use one plain vocabulary across surfaces 2026-08-08 12:59:46 +02:00
Abdessamad Derraz 89fe022196 chore: recale reviewed refs for three cores 2026-08-08 12:54:03 +02:00
Abdessamad Derraz c94771459c chore: rebuild manifests and docs 2026-08-08 12:51:42 +02:00
Abdessamad Derraz 1fda81fb52 feat: record ares laseractive firmware hashes 2026-08-08 12:47:41 +02:00
Abdessamad Derraz 09d586e387 docs: document the ref anchoring strategies 2026-08-08 12:42:29 +02:00
Abdessamad Derraz 38e39af561 docs: say what each platform actually checks 2026-08-08 12:42:06 +02:00
Abdessamad Derraz b65ff255cb chore: recale reviewed refs for two cores 2026-08-08 12:38:47 +02:00
Abdessamad Derraz 7c8958e02b chore: recale refs with their annotations kept 2026-08-08 12:36:00 +02:00
Abdessamad Derraz 763c159a9f feat: rewrite annotated refs keeping their prose 2026-08-08 12:35:02 +02:00
Abdessamad Derraz 16331a1712 feat: report external citations as unverifiable 2026-08-08 12:30:37 +02:00
Abdessamad Derraz ba898063c6 chore: recale refs settled by the new anchors 2026-08-08 12:25:42 +02:00
Abdessamad Derraz dc4b23a883 feat: anchor on declared values when refs miss 2026-08-08 12:24:31 +02:00
Abdessamad Derraz 6b0306b43d feat: settle ambiguity by file line shift 2026-08-08 12:21:13 +02:00
Abdessamad Derraz 9982748e49 fix: realign refs with their pinned revision 2026-08-08 12:17:11 +02:00
Abdessamad Derraz 34876ba610 fix: keep refs and pin on the same revision 2026-08-08 12:16:01 +02:00
Abdessamad Derraz de19473f2c docs: document upstream and exporter base modules 2026-08-08 12:15:48 +02:00
Abdessamad Derraz ace32054f5 chore: recale profile refs onto upstream head 2026-08-08 12:12:29 +02:00
Abdessamad Derraz c585452d46 feat: resolve bare and annotated ref paths 2026-08-08 12:05:59 +02:00
Abdessamad Derraz 344599f7ef docs: name the wanted list for what it is 2026-08-08 11:57:22 +02:00
Abdessamad Derraz 4d34cac45f chore: anchor profile refs to source commits 2026-08-08 11:52:28 +02:00
Abdessamad Derraz e39a6c5894 chore: wrap long test lines 2026-08-08 11:52:28 +02:00
Abdessamad Derraz 8ffe30efc8 feat: parse annotated and mode-keyed refs 2026-08-08 11:50:25 +02:00
Abdessamad Derraz b82b64472a chore: anchor profile refs to source commits 2026-08-08 11:47:37 +02:00
Abdessamad Derraz 3abeb77a48 fix: match the scoped provenance headline 2026-08-08 11:47:31 +02:00
Abdessamad Derraz a17945ec66 fix: match source_ref lines by value 2026-08-08 11:47:21 +02:00
Abdessamad Derraz 87c39c877e fix: scope the provenance ratio to system files 2026-08-08 11:43:50 +02:00
Abdessamad Derraz 7f8a277721 fix: retry transient network failures 2026-08-08 11:37:15 +02:00
Abdessamad Derraz af52c7ed24 chore: rebuild manifests and docs 2026-08-08 11:31:05 +02:00