"""Load authored world content and cross-check origin references. Language-neutral content integrity: every id an origin references (start location, start quest, granted items, seeded npc dispositions) must resolve in world content. New-game construction (client-side, Plan B) relies on this holding; catching it here fails a broken origin at authoring time, not three scenes into play. """ import json from pathlib import Path def _load_ids(dir_path: Path) -> set[str]: ids: set[str] = set() for f in dir_path.glob("*.json"): with open(f) as fh: ids.add(json.load(fh)["id"]) return ids def load_world(content_root: Path) -> dict[str, set[str]]: world = content_root / "world" return { "locations": _load_ids(world / "locations"), "npcs": _load_ids(world / "npcs"), "quests": _load_ids(world / "quests"), "items": _load_ids(world / "items"), } def load_origin(path: Path) -> dict: with open(path) as f: return json.load(f) def unresolved_refs(origin: dict, world: dict[str, set[str]]) -> list[str]: missing: list[str] = [] if origin["start_location_id"] not in world["locations"]: missing.append(f"location:{origin['start_location_id']}") quest = origin.get("start_quest_id") if quest is not None and quest not in world["quests"]: missing.append(f"quest:{quest}") for grant in origin["inventory_grants"]: if grant["item_id"] not in world["items"]: missing.append(f"item:{grant['item_id']}") for npc_id in origin["disposition_overrides"]: if npc_id not in world["npcs"]: missing.append(f"npc:{npc_id}") return missing