feat: publish source-backed coverage ratio

This commit is contained in:
Abdessamad Derraz committed 2026-08-07 16:23:15 +02:00
1 parent 8bd2083e80
commit 446f690541
3 files changed
+47 -22

No files matched your search

+16 -15
View File
@@ -66,22 +66,23 @@ Full list with per-file details: **[https://abdess.github.io/retrobios/](https:/
## Coverage
| Platform | Coverage | Verified | Untested | Missing |
|----------|----------|----------|----------|---------|
| Batocera | 353/353 (100.0%) | 353 | 0 | 0 |
| BizHawk | 118/118 (100.0%) | 118 | 0 | 0 |
| EmuDeck | 161/161 (100.0%) | 161 | 0 | 0 |
| Lakka | 530/530 (100.0%) | 530 | 0 | 0 |
| MiSTer FPGA | 65/65 (100.0%) | 65 | 0 | 0 |
| ROCKNIX | 38/38 (100.0%) | 38 | 0 | 0 |
| Recalbox | 346/346 (100.0%) | 346 | 0 | 0 |
| RetroArch | 530/530 (100.0%) | 530 | 0 | 0 |
| RetroBat | 341/341 (100.0%) | 341 | 0 | 0 |
| RetroDECK | 2008/2008 (100.0%) | 2008 | 0 | 0 |
| RetroPie | 530/530 (100.0%) | 530 | 0 | 0 |
| RomM | 374/374 (100.0%) | 374 | 0 | 0 |
| Platform | Coverage | Verified | Untested | Missing | Source-backed |
|----------|----------|----------|----------|---------|---------------|
| Batocera | 353/353 (100.0%) | 353 | 0 | 0 | 95/353 (27%) |
| BizHawk | 118/118 (100.0%) | 118 | 0 | 0 | 4/118 (3%) |
| EmuDeck | 161/161 (100.0%) | 161 | 0 | 0 | 15/161 (9%) |
| Lakka | 530/530 (100.0%) | 530 | 0 | 0 | 118/530 (22%) |
| MiSTer FPGA | 65/65 (100.0%) | 65 | 0 | 0 | 0/65 (0%) |
| ROCKNIX | 38/38 (100.0%) | 38 | 0 | 0 | 29/38 (76%) |
| Recalbox | 346/346 (100.0%) | 346 | 0 | 0 | 83/346 (24%) |
| RetroArch | 530/530 (100.0%) | 530 | 0 | 0 | 118/530 (22%) |
| RetroBat | 341/341 (100.0%) | 341 | 0 | 0 | 81/341 (24%) |
| RetroDECK | 2008/2008 (100.0%) | 2008 | 0 | 0 | 104/2008 (5%) |
| RetroPie | 530/530 (100.0%) | 530 | 0 | 0 | 118/530 (22%) |
| RomM | 374/374 (100.0%) | 374 | 0 | 0 | 84/374 (22%) |
Coverage is measured against the file list each platform declares, using that platform's own verification mode.
Source-backed counts the files whose expectations were also read from an emulator's source code; the rest rely on the platform list alone.
Where platform lists and emulator source code disagree, the differences are tracked in the [gap analysis](https://abdess.github.io/retrobios/gaps/).
## Build your own pack
@@ -153,4 +154,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.
The legal reasoning is laid out in the [FAQ](https://abdess.github.io/retrobios/wiki/faq/#is-this-legal).
*Auto-generated on 2026-08-07T13:24:31Z*
*Auto-generated on 2026-08-07T14:01:25Z*
+17 -3
View File
@@ -60,6 +60,10 @@ def compute_coverage(
"mode": config.get("verification_mode", "existence"),
"details": result["details"],
"config": config,
"ground_truth": result.get(
"ground_truth_coverage",
{"with_validation": 0, "platform_only": total, "total": total},
),
}
@@ -261,16 +265,23 @@ def generate_readme(db: dict, platforms_dir: str) -> str:
"",
"## Coverage",
"",
"| Platform | Coverage | Verified | Untested | Missing |",
"|----------|----------|----------|----------|---------|",
"| Platform | Coverage | Verified | Untested | Missing | Source-backed |",
"|----------|----------|----------|----------|---------|---------------|",
]
)
for name, cov in sorted(coverages.items(), key=lambda x: x[1]["platform"]):
pct = f"{cov['percentage']:.1f}%"
gt = cov["ground_truth"]
gt_pct = (
f"{gt['with_validation'] / gt['total'] * 100:.0f}%"
if gt["total"]
else "0%"
)
lines.append(
f"| {cov['platform']} | {cov['present']}/{cov['total']} ({pct}) | "
f"{cov['verified']} | {cov['untested']} | {cov['missing']} |"
f"{cov['verified']} | {cov['untested']} | {cov['missing']} | "
f"{gt['with_validation']}/{gt['total']} ({gt_pct}) |"
)
lines.extend(
@@ -278,6 +289,9 @@ def generate_readme(db: dict, platforms_dir: str) -> str:
"",
"Coverage is measured against the file list each platform declares,"
" using that platform's own verification mode.",
"Source-backed counts the files whose expectations were also read"
" from an emulator's source code; the rest rely on the platform"
" list alone.",
"Where platform lists and emulator source code disagree, the"
f" differences are tracked in the [gap analysis]({SITE_URL}gaps/).",
"",
+14 -4
View File
@@ -1520,8 +1520,8 @@ def generate_gap_analysis(
lines.extend([
"## Verification by Platform",
"",
"| Platform | Files | Verified | Untested | Missing | Mode |",
"|----------|------:|---------:|---------:|--------:|------|",
"| Platform | Files | Verified | Untested | Missing | Mode | Source-backed |",
"|----------|------:|---------:|---------:|--------:|------|--------------:|",
])
for pname, cov in sorted(coverages.items(), key=lambda x: x[1]["platform"]):
@@ -1538,19 +1538,29 @@ def generate_gap_analysis(
if u > 0
else str(u)
)
gt = cov["ground_truth"]
gt_pct = (
f"{gt['with_validation'] / gt['total'] * 100:.0f}%"
if gt["total"]
else "0%"
)
lines.append(
f"| [{display}](platforms/{pname}.md) "
f"| {cov['total']} "
f"| {cov['verified']} "
f"| {untested_str} "
f"| {missing_str} "
f"| {cov['mode']} |"
f"| {cov['mode']} "
f"| {gt['with_validation']}/{gt['total']} ({gt_pct}) |"
)
lines.extend([
"",
"Verification follows each platform's own runtime check "
"([how each mode works](wiki/verification-modes.md)): the counts "
"measure the repository against the file list each platform declares.",
"measure the repository against the file list each platform declares. "
"Source-backed counts the files whose expectations were also read "
"from an emulator's source code; the rest rely on the platform list "
"alone.",
"",
])