from pathlib import Path ROOT = Path(__file__).resolve().parents[1] REQUIRED_SNIPPETS = { "Docs/ArtUxCodeAndAssetStandards.md": [ "## MVP Realism Target Rules", "production-directed proxies, not final art", "avoid cosmetic-only changes", "real-world biome references", ], "Docs/CharactersAndObjects/MvpReadableSurvivalObjectProxies.md": [ "Final realistic art should replace these proxies", "without changing survival", ], "Docs/Terrain/GroundZeroNaturalEnvironmentPass.md": [ "coastal scrub", "drive density and shape selection from land-cover", ], "Docs/Terrain/GroundZeroWaterSourceVisualPass.md": [ "production water material", "bank geometry", ], "Docs/Terrain/GroundZeroDensitySightlineTuning.md": [ "coastal scrub biome", "without hiding the first playable survival loop", ], "Scripts/setup_ground_zero_demo_map.py": [ 'M_AGR_GZ_Terrain_CoastalScrub', 'M_AGR_GZ_Tree_CoastalOak', 'M_AGR_GZ_Shrub_CoyoteBrush', 'M_AGR_GZ_Grass_DryCoastal', 'M_AGR_GZ_Stone_Sandstone', 'SIGHTLINE_TUNING_CONFIG', ], "AGRARIAN_DEVELOPMENT_ROADMAP.md": [ "[x] Preserve realism as the target", "production realism", "cosmetic throwaways", ], } def main(): failures = [] for relative_path, snippets in REQUIRED_SNIPPETS.items(): path = ROOT / relative_path if not path.exists(): failures.append(f"missing {relative_path}") continue text = path.read_text(encoding="utf-8") for snippet in snippets: if snippet not in text: failures.append(f"{relative_path} missing snippet: {snippet}") if failures: raise SystemExit("MVP realism target verification failed:\n" + "\n".join(failures)) print("PASS: MVP realism target standards are documented and wired to 0.1.O visual gates.") if __name__ == "__main__": main()