Commit Graph
178 Commits
Author SHA1 Message Date
Abdessamad Derraz 0eb824c69c refactor: extract emulator archive placement 2026-10-06 07:00:22 +02:00
Abdessamad Derraz 49a4b181bf refactor: one mismatch rule for builder and verifier 2026-10-06 06:57:01 +02:00
Abdessamad Derraz 2c602596d1 refactor: pull mismatch and region steps from manifest 2026-10-06 06:45:45 +02:00
Abdessamad Derraz a1ce1d2fa0 fix: hold the data dir lock while packing it 2026-10-06 04:56:16 +02:00
Abdessamad Derraz c9f8f4b230 fix: choose regions among the files required-only keeps 2026-10-06 04:54:05 +02:00
Abdessamad Derraz ce135b788f fix: compare only the full pack to verify 2026-10-06 04:49:21 +02:00
Abdessamad Derraz e8884e4341 fix: finalize only the packs this run names 2026-10-06 04:48:32 +02:00
Abdessamad Derraz c37d7fc95a fix: apply required-only to emulator pack archives 2026-10-06 04:46:03 +02:00
Abdessamad Derraz c5566b7d06 fix: count undistributed split extras with the helper 2026-10-06 04:43:49 +02:00
Abdessamad Derraz 7498304e44 fix: give system packs their core extras 2026-10-06 04:42:35 +02:00
Abdessamad Derraz 7b62f7f702 fix: refuse every flag a quick mode does not read 2026-10-06 04:39:08 +02:00
Abdessamad Derraz ac4776b2d0 fix: withhold a file only on the frontend digest 2026-10-06 04:21:47 +02:00
Abdessamad Derraz dbc8d63318 fix: one agnostic substitute rule for pack and verify 2026-10-06 04:19:40 +02:00
Abdessamad Derraz 93f3560d19 refactor: split the all-variants flag refusals 2026-10-06 03:11:07 +02:00
Abdessamad Derraz ab75123320 refactor: move flag refusals out of the main functions 2026-10-06 03:08:35 +02:00
Abdessamad Derraz ec9bbd3424 fix: fail the run when a platform pack errors 2026-10-06 01:34:30 +02:00
Abdessamad Derraz 236d8322b0 fix: point pack guides at the path each platform reads 2026-10-06 01:33:33 +02:00
Abdessamad Derraz 1879c984f4 fix: decide slots on the region pass grouping 2026-10-06 00:26:36 +02:00
Abdessamad Derraz 64f84e7ca6 fix: verify the pack the flags name, by exact name 2026-10-06 00:13:38 +02:00
Abdessamad Derraz 8e532db6aa fix: order same-named files by their owner's copy 2026-10-05 22:22:22 +02:00
Abdessamad Derraz 8e41ddc297 fix: ship the archive every member declaration accepts 2026-10-05 22:05:10 +02:00
Abdessamad Derraz b12a3280e6 fix: give the install manifest the arbitrated file 2026-10-05 21:53:59 +02:00
Abdessamad Derraz 3177a57103 fix: emulator region report reads the pack drop set 2026-10-05 21:43:32 +02:00
Abdessamad Derraz 012bf2fec2 fix: one rule for the variant an emulator accepts 2026-10-05 21:36:14 +02:00
Abdessamad Derraz 0d7939588e fix: one size predicate, size_options retired 2026-10-05 02:51:13 +02:00
Abdessamad Derraz 79c94468a0 fix: list in the manifest what the pack ships 2026-10-04 21:08:00 +02:00
Abdessamad Derraz 52f682cdd6 feat: publish a large pack as zips, not byte ranges 2026-10-04 18:09:24 +02:00
Abdessamad Derraz 63af5167ed feat: state how many files each pack holds 2026-10-04 18:01:33 +02:00
Abdessamad Derraz 2efc37a738 feat: pack the files a directory entry names 2026-10-04 17:58:10 +02:00
Abdessamad Derraz 1ceb4b0c5a fix: split platform groups on declared emulators 2026-10-04 17:48:00 +02:00
Abdessamad Derraz 59ccb5b7d5 feat: scope a profile data directory to a build mode 2026-10-04 17:09:14 +02:00
Abdessamad Derraz 97f741bf0f fix: publish target lists as the builder resolves them 2026-10-04 16:55:30 +02:00
Abdessamad Derraz 08bce47668 fix: keep install manifests and release assets true 2026-09-14 01:17:49 +02:00
Abdessamad Derraz 1455e0423c fix: arbitrate on the evidence the builder uses 2026-09-07 07:02:39 +02:00
Abdessamad Derraz 23c4dc2aae fix: name every narrowed artifact from one list 2026-09-07 06:27:35 +02:00
Abdessamad Derraz 29fcfdef34 fix: refuse the flags a mode cannot apply 2026-09-07 06:14:24 +02:00
Abdessamad Derraz aaa1aea452 fix: put every writing mode under the output lock 2026-09-07 05:57:25 +02:00
Abdessamad Derraz 6d97fbe127 fix: stop a check that cannot answer exiting zero 2026-09-07 05:39:50 +02:00
Abdessamad Derraz 1c976390d7 fix: let a refresh failure reach the exit code 2026-09-07 05:30:56 +02:00
Abdessamad Derraz 2a4dd59bb2 fix: narrow pack conformance by hardware target 2026-09-06 23:28:27 +02:00
Abdessamad Derraz 8128b47aeb fix: skip full conformance on a targeted pack 2026-09-06 23:06:00 +02:00
Abdessamad Derraz a4455ef6a7 fix: refuse flags verify-packs cannot honour 2026-09-06 23:01:14 +02:00
Abdessamad Derraz fca005f6db fix: narrow the manifest when required-only is set 2026-09-06 22:59:18 +02:00
Abdessamad Derraz 7b93285e1d fix: read the build mode per emulator when arbitrating 2026-09-05 13:25:24 +02:00
Abdessamad Derraz adcd177e12 feat: settle contested slots in the pack and the report 2026-09-05 09:08:43 +02:00
Abdessamad Derraz 75f4542ea8 refactor: scope validation to a platform's cores 2026-09-03 17:51:34 +02:00
Abdessamad Derraz 232ef1a6b8 fix: let the constrained declaration win in manifests too
A destination can be declared by more than one system, bare in one and
hash-constrained in another. generate_pack resolves that with
_preferred_entries so the constrained sibling claims the destination;
generate_manifest never did, and named whatever answered to the name.

RetroDECK's bios/d2fdc.zip is the case: declared with an md5 in the
arcade system and bare under apple-ii. The pack carried the right
archive, 262 bytes reached through the MAME clone map, while the
manifest sent install.py to a 256-byte Apple II ROM. Downloading the
ZIP and running the installer gave different files.

A test now hashes every manifest entry a platform pins and compares it
against what the platform declares: 3295 entries, on the platforms whose
frontend reads the bytes. It accepts any of several declarations for one
destination, the member-composite MD5 Recalbox pins for arcade archives,
and Batocera's 29-character prefixes. Reinstating the old manifest entry
fails it.
2026-08-23 12:14:56 +02:00
Abdessamad Derraz 8b404e500f fix: keep a packed file's executable bit
Pinning every member's metadata made packs reproducible and took the
executable bit with it. The RetroDECK pack ships the two Voxatron engine
binaries, and extracted at 644 they cannot be run.

Git records the bit, so reading it from the source file keeps a pack the
same from any clone. Nothing else about the source's mode reaches the
archive: 2569 members ship at 644 and 942 at 755, which is what the
builder produced before the pinning.

Nothing caught this. The comparison that proved the pinning inert
checked member names, CRCs and sizes, and mode is none of those. A test
now builds a runnable payload and asserts it survives extraction.

RetroDECK rebuilds to the same bytes twice and passes its integrity
check, 2008/2008 baseline and 1551/1551 cores.
2026-08-23 07:58:23 +02:00
Abdessamad Derraz 593b277bc4 refactor: one place decides which profiles answer
The verifier and the builder each resolved the profiles a run names, in
thirty-five lines that differed only in how they failed: one exits, the
other returns empty-handed. An alias is the same binary under another
name and a launcher only starts an emulator, so neither has requirements
of its own, and both refusals have to say the same thing.

common raises now and each caller chooses its own ending. Six tests hold
the refusals, one of them reading both sources so a copy cannot grow
back. The manifest's core-complement phase comes out of generate_manifest
in the same pass, 60 to 34.

Verified inert: manifests identical entry for entry, and the Handy pack
rebuilds to the same bytes.
2026-08-23 07:18:41 +02:00
Abdessamad Derraz c313b32347 chore: neutral report path and plain punctuation
The markdown report wrote to a directory named after the tooling that
happened to produce it. It takes --report-dir now, defaulting to
reports/, so nothing in the tree names anything but the project.

Em-dashes replaced throughout the sources and tests, rephrased rather
than swapped for a comma where the dash carried an apposition.
2026-08-12 16:16:52 +02:00