docs: say what the unsourceable count is

This commit is contained in:
Abdessamad Derraz committed 2026-11-05 12:17:51 +01:00
1 parent e3a9d6479b
commit 832b2890d4
3 files changed
+19 -10

No files matched your search

+2 -2
View File
@@ -81,7 +81,7 @@ These are the files an emulator loads from disk instead of carrying inside itsel
Each file is checked the way your platform checks it. Most compare a checksum, the fingerprint of a file's contents, which catches a corrupt or unexpected copy. RetroArch, Lakka and RetroPie check that the file is present under its name without reading its contents (`path_is_valid` in RetroArch's `core_info.c`), and MinUI, NextUI and MyMinUI hand each core its folder without opening a file in it: the Coverage table says which applies to you. Independently of that, the collection records five fingerprints per file, and wherever an emulator's code states an expected size or hash, that value is read from its source and rechecked here.
- **1,087 files** the platforms' emulators load are still to be found, and 138 more cannot be sourced at all (per-user keys, user-filled slots, dumps nobody has made). Both are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/)
- **1,087 files** the platforms' emulators load are still to be found, and 138 more the collection does not hold and does not serve by name (retail data, per-user keys, user-filled slots), each with its reason. Both are named in the [gap analysis](https://abdess.github.io/retrobios/gaps/)
- **18 platforms** supported with platform-specific verification
- **623 emulators** profiled from source (RetroArch cores + standalone)
- **533 systems** handled by those emulators (NES, SNES, PlayStation, Saturn, Dreamcast, ...)
@@ -206,4 +206,4 @@ The scripts and tooling are released under the [MIT License](LICENSE).
The BIOS and firmware files are not covered by that license: they are third-party system software, preserved and provided for personal backup, archival, and interoperability with emulation software. [NOTICE](NOTICE) sets out their status and how to ask for a file to be removed.
The reasoning, and where it is weakest, is in [the project's legal position](https://abdess.github.io/retrobios/wiki/legal/).
*Auto-generated on 2026-11-05T10:52:39Z*
*Auto-generated on 2026-11-05T11:17:19Z*
+8 -8
View File
@@ -535,11 +535,10 @@ def generate_readme(db: dict, platforms_dir: str, db_path: str = "database.json"
emulator_count = len(profiles)
comp = compute_composition(db)
missing_total = len(set().union(*(c["missing_names"] for c in coverages.values())))
# "Not in the collection yet" implies somebody could still put it there.
# Most of this figure cannot be: per-user registration keys, slots the
# emulator expects the user to fill, dumps nobody has made. Counting those
# beside genuinely acquirable files overstates what is actionable, so the
# two are reported apart.
# The entries marked `unsourceable:` are never served by name, so a
# homonym cannot take their place: retail game data, per-user keys, slots
# the user fills. Each stays an acquisition target with its reason, and
# is counted apart from the files still to be found.
unsourceable_total = len(
set().union(*(c["unsourceable_names"] for c in coverages.values()))
)
@@ -668,9 +667,10 @@ def generate_readme(db: dict, platforms_dir: str, db_path: str = "database.json"
"",
(
f"- **{acquirable_total:,} files** the platforms' emulators load"
f" are still to be found, and {unsourceable_total:,} more cannot"
f" be sourced at all (per-user keys, user-filled slots, dumps"
f" nobody has made). Both are named in the"
f" are still to be found, and {unsourceable_total:,} more the"
f" collection does not hold and does not serve by name (retail"
f" data, per-user keys, user-filled slots), each with its reason."
f" Both are named in the"
f" [gap analysis]({SITE_URL}gaps/)"
if missing_total
else "- **Nothing missing**: every file the platforms'"
+9
View File
@@ -1710,6 +1710,15 @@ class ReadmeKeepsItsPointers(unittest.TestCase):
block = block[:block.index("\n## ", 1)]
self.assertIn("--required-only", block)
def test_unsourceable_files_are_not_said_to_exist_nowhere(self):
"""The README said 138 files 'cannot be sourced at all (... dumps
nobody has made)', while most of their reasons read 'retail data the
collection does not hold'."""
readme = (ROOT / "README.md").read_text(encoding="utf-8")
self.assertNotIn("sourced at all", readme)
self.assertNotIn("nobody has made", readme)
self.assertRegex(readme, r"more the collection does not hold and does not serve by name")
class ReportExcerptIsTheRun(unittest.TestCase):
"""reading-reports.md quoted 'From python scripts/verify.py --platform