"""Compare the current state with the freeze manifest; print every changed file (used by the audit and the pooling rule).""" import json, os, sys sys.path.insert(0, os.path.dirname(__file__)); from freeze import tree, sha, REPO, ORACLES man = json.load(open(sys.argv[1] if len(sys.argv) > 1 else os.path.join(REPO, "protocol", "preregistration", "freeze_manifest.json"))) changed = [] for t, files in man["scenarios"].items(): cur = tree(os.path.join(REPO, "benchmark", "scenarios", t)); changed += [f"scenario {t}: {k}" for k in set(files) | set(cur) if files.get(k) != cur.get(k)] for t, files in man["oracles"].items(): cur = {k: v for k, v in tree(os.path.join(ORACLES, t)).items() if not k.startswith("validation/")}; changed += [f"oracle {t}: {k}" for k in set(files) | set(cur) if files.get(k) != cur.get(k)] for rel, h in {**man["harness"], **man["protocol"]}.items(): if sha(os.path.join(REPO, rel)) != h: changed.append(f"harness/protocol: {rel}") print("\n".join(changed) if changed else "no change since freeze"); sys.exit(1 if changed else 0)