fix: alias-only files missing from full packs

find_undeclared_files was enriching declared_names with DB aliases,
filtering core extras that were never packed by Phase 1 under that
name. Pass strict YAML names to _collect_emulator_extras so alias-
only files (dc_bios.bin, amiga-os-310-a1200.rom, scph102.bin, etc.)
get packed at the emulator's expected path. Also fix truth mode
output message and --all-variants --verify-packs quick-exit bypass.
This commit is contained in:
Abdessamad Derraz
2026-04-01 18:39:36 +02:00
parent a1333137a0
commit 9bbd39369d
11 changed files with 1029 additions and 249 deletions

View File

@@ -491,9 +491,18 @@ def _collect_emulator_extras(
for sid in platform_systems:
norm_map[_norm_system_id(sid)] = sid
# Use strict YAML names (no DB alias enrichment) so that files known
# under an alias still get packed at the emulator's expected path.
yaml_names: set[str] = set()
for system in config.get("systems", {}).values():
for fe in system.get("files", []):
name = fe.get("name", "")
if name:
yaml_names.add(name)
undeclared = find_undeclared_files(
config, emulators_dir, db, emu_profiles, target_cores=target_cores,
include_all=include_all,
include_all=include_all, declared_names=yaml_names,
)
extras = []
seen_dests: set[str] = set(seen)
@@ -1497,7 +1506,7 @@ def generate_pack(
elif source == "truth":
print(
f" {zip_path}: {total_files} files packed (ground truth only), "
f"{', '.join(parts)} [{verification_mode}]"
f"{core_count} from emulator profiles [{verification_mode}]"
)
else:
baseline = total_files - core_count
@@ -2708,8 +2717,9 @@ def main():
)
args = parser.parse_args()
# Quick-exit modes
if args.verify_packs:
# Quick-exit modes: --verify-packs alone = verify existing packs only
# Combined with --all-variants, generation runs first then verify
if args.verify_packs and not args.all_variants:
_run_verify_packs(args)
return
if args.manifest_targets:

View File

@@ -314,11 +314,16 @@ def find_undeclared_files(
target_cores: set[str] | None = None,
data_names: set[str] | None = None,
include_all: bool = False,
declared_names: set[str] | None = None,
) -> list[dict]:
"""Find files needed by cores but not declared in platform config."""
# Collect all filenames declared by this platform, enriched with
# canonical names from DB via MD5 (handles platform renaming)
declared_names = expand_platform_declared_names(config, db)
"""Find files needed by cores but not declared in platform config.
declared_names overrides the default enriched set from
expand_platform_declared_names. Pass a strict set (YAML names only)
when building packs so alias-only names still get packed.
"""
if declared_names is None:
declared_names = expand_platform_declared_names(config, db)
# Collect data_directory refs
declared_dd: set[str] = set()