"""dist 결정성 스냅샷 — sha256 파일 지도를 만들고 두 빌드를 비교한다. 사용: python -X utf8 dist-snap.py snap1 | python -X utf8 dist-snap.py compare dist-snap1.json """ import hashlib import json import os import sys def snap(root: str) -> dict: out = {} for dp, _, fns in os.walk(root): for fn in fns: p = os.path.join(dp, fn) rel = os.path.relpath(p, root).replace(os.sep, "/") with open(p, "rb") as fh: out[rel] = hashlib.sha256(fh.read()).hexdigest() return out if sys.argv[1] == "snap": s = snap("dist") name = sys.argv[2] with open(name, "w", encoding="utf-8") as fh: json.dump(s, fh) print("files:", len(s)) elif sys.argv[1] == "compare": with open(sys.argv[2], encoding="utf-8") as fh: s1 = json.load(fh) s2 = snap("dist") only1 = sorted(set(s1) - set(s2)) only2 = sorted(set(s2) - set(s1)) diff = sorted(k for k in set(s1) & set(s2) if s1[k] != s2[k]) print("build1 files:", len(s1), "build2 files:", len(s2)) print("only_in_build1:", only1[:10]) print("only_in_build2:", only2[:10]) print("content_diff:", diff[:10]) print("DETERMINISTIC" if not (only1 or only2 or diff) else "NON_DETERMINISTIC")