"""Step 3 helper: RAG source integrity (V12) and output existence/version (V9).""" import hashlib import json from pathlib import Path HERE = Path(__file__).resolve().parent ROOT = HERE.parents[1] def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest() audit = json.loads((HERE / "입력DXF" / "conversion_audit.json").read_text(encoding="utf-8")) for a in audit: src = ROOT / a["source"] print("V12", src.name, "UNCHANGED" if sha(src) == a["source_sha256"] else "CHANGED") outputs = { "DOC/02_분석/분석_통로박스모델링과정_2026-10-07_v0.1.00.md": "v0.1.00", "DOC/02_분석/분석_운곡교P1교각도면판독_2026-10-07_v0.1.01.md": "v0.1.01", "DOC/03_설계/설계_운곡교P1교각모델링_2026-10-08_v0.1.10.md": "v0.1.10", "DOC/03_설계/backup/설계_운곡교P1교각모델링_2026-10-07_v0.1.00.md": "v0.1.00", "DOC/05_검증/검증_운곡교P1교각모델_2026-10-08_v0.1.05.md": "v0.1.05", "DOC/02_분석/분석_운곡교P1코핑철근판독_2026-10-07_v0.1.02.md": "v0.1.02", } for rel, ver in outputs.items(): p = ROOT / rel if not p.exists(): print("V9", rel, "MISSING") continue rows = [l for l in p.read_text(encoding="utf-8").splitlines() if l.startswith("| v0.")] latest = rows[-1].split("|")[1].strip() if rows else None print("V9", rel, p.stat().st_size, "bytes, history latest", latest, "OK" if latest == ver else "MISMATCH") m = HERE / "출력" / "실행_운곡교P1교각모델_2026-10-08_v0.1.09.3dm" print("V9", m.name, m.exists() and m.stat().st_size, "bytes")