From 9b630a39bb9c9411fa28d30abda4a1be0b0f4164 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Tue, 20 Oct 2026 08:12:03 +0200 Subject: [PATCH] fix: hold the new profiles to the shared checks BizHawk's NDS firmware slot accepts six dumps, two of which the collection holds, and the profile named one. Kega Fusion's US Mega CD BIOS covers the Americas. Sonic 3 A.I.R. data is installed by Batocera in unpacked form. izApple2 downloads its ProDOS images when a card is added, which is no install. The Lakka list now equals a case-keeping RetroArch install less what Lakka's packages install, and the profile hash contradiction count leaves out entries no pack ships. The pipeline table names step 8b. --- emulators/bizhawk.yml | 12 +++++++++--- emulators/kega-fusion.yml | 2 +- tests/test_install.py | 19 +++++++++++++++---- tests/test_shipped_content.py | 4 ++++ wiki/tools.md | 1 + 5 files changed, 30 insertions(+), 8 deletions(-) diff --git a/emulators/bizhawk.yml b/emulators/bizhawk.yml index d429f0b2..5bdb42ed 100644 --- a/emulators/bizhawk.yml +++ b/emulators/bizhawk.yml @@ -1236,11 +1236,17 @@ files: system: nintendo-ds required: false size: 262144 - sha1: "ede9add041614eaa232059c63d8613b83fe4e954" + sha1: + - "ede9add041614eaa232059c63d8613b83fe4e954" + - "2ef20b45d12cf00657d4b1bd37a5cc8506923440" + - "87dae2500e889737af51f4a5b5845770a62482f5" + - "22a7547dbc302bcbfb4005cfb5a2d426d3f85ac6" + - "ae22de59fbf3f35ccfbeacaeba6fa87ac5e7b14b" + - "1cf9e67c2c703bb9961bbcdd39cd2c7e319a803b" validation: [size, sha1] description: "NDS Firmware" - source_ref: "src/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs:388, 394, src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs:440-457, emulatorLauncher Generators/Bizhawk.Generator.cs:556" - note: "Firmware slot NDS+firmware. RetroBat names it in FirmwareUserSpecifications when firmware.bin exists in the bios folder." + source_ref: "src/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs:384-395, src/BizHawk.Emulation.Cores/Consoles/Nintendo/NDS/MelonDS.cs:440-457, emulatorLauncher Generators/Bizhawk.Generator.cs:556" + note: "Firmware slot NDS+firmware, which accepts six dumps: three likely good and three known hacks. RetroBat names it in FirmwareUserSpecifications when firmware.bin exists in the bios folder." - name: "NDS_Firmware_2.bin" system: nintendo-ds diff --git a/emulators/kega-fusion.yml b/emulators/kega-fusion.yml index 974d935a..a2c60d45 100644 --- a/emulators/kega-fusion.yml +++ b/emulators/kega-fusion.yml @@ -53,7 +53,7 @@ files: - name: us_scd1_9210.bin aliases: [bios_CD_U.bin] system: sega-megacd - region: [north-america] + region: [north-america, latin-america] required: true description: "Sega CD (USA) boot ROM" note: "Opened from SCDUSABIOS when a disc starts in the USA region and read as 128 KB. A failed open shows \"Please configure USA BIOS in OPTIONS->SET CONFIG->SEGA CD\" under the title \"BIOS Not Found\" and writes 60 FE, a branch to itself, at the reset vector, so nothing boots." diff --git a/tests/test_install.py b/tests/test_install.py index 69718fdc..2e722d69 100644 --- a/tests/test_install.py +++ b/tests/test_install.py @@ -2366,10 +2366,21 @@ class CaseVariants(unittest.TestCase): self.assertIn("bios.col", variants) lakka = json.loads((REPO_ROOT / "install" / "lakka.json").read_text()) folded = {e["dest"] for e in manifest["files"]} - self.assertEqual( - {e["dest"] for e in lakka["files"]}, folded | variants, - "a case-keeping RetroArch install equals the Lakka list", - ) + # A case-keeping RetroArch install is the Lakka list, less what + # Lakka's own core packages install (installed_on: lakka). + sys.path.insert(0, str(REPO_ROOT / "scripts")) + from common import load_emulator_profiles + + installed = { + entry.get("path") or entry.get("name") + for profile in load_emulator_profiles(str(REPO_ROOT / "emulators")).values() + for entry in profile.get("files") or [] + if isinstance(entry, dict) and "lakka" in (entry.get("installed_on") or []) + } + lakka_dests = {e["dest"] for e in lakka["files"]} + self.assertEqual(lakka_dests - (folded | variants), set()) + self.assertEqual((folded | variants) - lakka_dests - installed, set(), + "a case-keeping RetroArch install equals the Lakka list") diff --git a/tests/test_shipped_content.py b/tests/test_shipped_content.py index 99927ab4..a1229ca9 100644 --- a/tests/test_shipped_content.py +++ b/tests/test_shipped_content.py @@ -170,6 +170,10 @@ class ProfileContradictionsAreKnown(unittest.TestCase): for entry in profile.get("files", []): if not isinstance(entry, dict) or entry.get("unsourceable"): continue + # Installed with the emulator on every platform: no pack + # ships it, so the collection's copy answers nobody. + if entry.get("bundled") and not entry.get("not_bundled_on"): + continue if not _declared_digests(entry): continue path, status = common.resolve_local_file( diff --git a/wiki/tools.md b/wiki/tools.md index 2ccda805..77c7d2ee 100644 --- a/wiki/tools.md +++ b/wiki/tools.md @@ -45,6 +45,7 @@ Pipeline steps: | 6/8 | Pack integrity (extract + hash) | `--skip-packs` | | 7/8 | Generate README | `--skip-docs` | | 8/8 | Generate site | `--skip-docs` | +| 8b | Render the site with `mkdocs build --strict`, then `validate_site.py`, as the deploy does | `--skip-docs`, or no `mkdocs` installed | Pipeline flags: