This commit is contained in:
33333-33333 2026-06-28 23:07:40 +09:00
commit 0e432c62ae
87 changed files with 4282 additions and 3066 deletions

View file

@ -16,6 +16,7 @@ $Exact = @{
"index.html" = "app DOM shell, canvas, panels, dialogs, and ordered script tags"
"README.md" = "small AI entrypoint and read strategy"
"AI_MAP.md" = "subsystem map and task-oriented read sets"
"GAME_FEATURES.md" = "player-facing game features, UI, items, and behavior guide"
"FILES.json" = "machine-readable file routing and glob semantics"
"service-worker.js" = "generated offline/cache service worker"
}

View file

@ -21,6 +21,7 @@ EXACT_DESCRIPTIONS = {
"index.html": "app DOM shell, canvas, panels, dialogs, and ordered script tags",
"README.md": "small AI entrypoint and read strategy",
"AI_MAP.md": "subsystem map and task-oriented read sets",
"GAME_FEATURES.md": "player-facing game features, UI, items, and behavior guide",
"FILES.json": "machine-readable file routing and glob semantics",
"service-worker.js": "generated offline/cache service worker",
}

View file

@ -473,46 +473,56 @@ def check_current_save_format() -> None:
placement = read_text(ROOT / "js/world_placement_log.js")
if "playLogSoundForEntry" in placement:
fail("log sound mapping still lives in world_placement_log.js")
if "player_item_placement" in placement:
fail("player item placement should not create placement log entries")
ok("binary hash save snapshot, codec, storage, and restore coordinator present")
def check_unified_item_registry() -> None:
data = manifest()
js_files = data["js"]
if "js/item_registry.js" not in js_files:
fail("unified item registry missing from manifest")
removed = ["js/food_registry.js", "js/effect_registry.js", "js/item_visual_registry.js"]
stale_manifest = [rel for rel in removed if rel in js_files]
if stale_manifest:
fail("old split item registry files still listed in manifest: " + ", ".join(stale_manifest))
stale_files = [rel for rel in removed if (ROOT / rel).exists()]
if stale_files:
fail("old split item registry files still exist: " + ", ".join(stale_files))
source = read_text(ROOT / "js/item_registry.js")
required = [
"global.TarinaiItemRegistry",
"const TOOL_DEFINITIONS",
"function itemDefinition",
"function itemVisualDefinition",
"class FoodRegistry",
"class EffectRegistry",
"food: FOOD_REGISTRY",
"effect: EFFECT_REGISTRY",
"visual: itemVisualDefinition",
required_files = [
"js/item_tool_definitions.js",
"js/item_visual_definitions.js",
"js/item_food_definitions.js",
"js/item_effect_definitions.js",
"js/item_registry.js",
]
for token in required:
missing = [rel for rel in required_files if rel not in js_files or not (ROOT / rel).exists()]
if missing:
fail("split item registry files missing: " + ", ".join(missing))
order = [js_files.index(rel) for rel in required_files]
if order != sorted(order):
fail("split item registry files are not loaded before the facade in manifest order")
stale_files = [rel for rel in ["js/food_registry.js", "js/effect_registry.js", "js/item_visual_registry.js"] if (ROOT / rel).exists() or rel in js_files]
if stale_files:
fail("obsolete item registry split files remain: " + ", ".join(stale_files))
tool_source = read_text(ROOT / "js/item_tool_definitions.js")
visual_source = read_text(ROOT / "js/item_visual_definitions.js")
food_source = read_text(ROOT / "js/item_food_definitions.js")
effect_source = read_text(ROOT / "js/item_effect_definitions.js")
facade_source = read_text(ROOT / "js/item_registry.js")
required_pairs = [
(tool_source, "const TOOL_DEFINITIONS"),
(tool_source, "global.TarinaiToolRegistry"),
(visual_source, "function itemVisualDefinition"),
(visual_source, "global.TarinaiItemVisualDefinitions"),
(food_source, "class FoodRegistry"),
(food_source, "global.TarinaiFoodRegistry"),
(effect_source, "class EffectRegistry"),
(effect_source, "global.TarinaiEffectRegistry"),
(facade_source, "global.TarinaiItemRegistry"),
(facade_source, "definition: itemTypeDefinition"),
]
for source, token in required_pairs:
if token not in source:
fail(f"unified item registry token missing: {token}")
forbidden_globals = ["global.TarinaiFoodRegistry", "global.TarinaiEffectRegistry", "global.TARINAI_ITEM_VISUALS", "global.TARINAI_FOOD_DEFINITIONS", "global.TARINAI_EFFECT_DEFINITIONS"]
offenders = [token for token in forbidden_globals if token in source]
if offenders:
fail("old split item registry globals still exported: " + ", ".join(offenders))
fail(f"split item registry token missing: {token}")
data_source = read_text(ROOT / "js/data.js")
forbidden_data = ["const TOOL_DEFINITIONS", "const ITEM_TRAITS", "class FoodRegistry", "class EffectRegistry", "TARINAI_ITEM_VISUALS"]
offenders = [token for token in forbidden_data if token in data_source]
if offenders:
fail("item definitions still mixed into data.js: " + ", ".join(offenders))
ok("item definitions centralized in item_registry.js")
ok("item registry responsibilities split behind facade")
def check_docs_removed() -> None:
docs = ROOT / "docs"