from __future__ import annotations import argparse import hashlib import json from pathlib import Path from typing import Any ROOT = Path(__file__).resolve().parents[1] DEFAULT_OUT = ROOT / "Temp" / "decision_replay_snapshot_pack_v1.json" def _hash_text(text: str) -> str: return hashlib.sha256(text.encode("utf-8")).hexdigest() def _load(path: Path) -> dict[str, Any]: if not path.exists(): return {} try: obj = json.loads(path.read_text(encoding="utf-8")) except Exception: return {} return obj if isinstance(obj, dict) else {} def main() -> int: ap = argparse.ArgumentParser() ap.add_argument("--out", default=str(DEFAULT_OUT)) args = ap.parse_args() fed_path = ROOT / "Temp" / "final_execution_decision_v2.json" truth_path = ROOT / "Temp" / "operational_truth_score_v1.json" report_path = ROOT / "Temp" / "operational_report.json" fed = _load(fed_path) truth = _load(truth_path) report = _load(report_path) payload = { "formula_id": "DECISION_REPLAY_SNAPSHOT_PACK_V1", "input_hash": fed.get("source_provenance", {}).get("input_hash") if isinstance(fed.get("source_provenance"), dict) else None, "formula_hash": _hash_text(json.dumps(truth, sort_keys=True, ensure_ascii=False)), "output_hash": _hash_text(json.dumps(fed, sort_keys=True, ensure_ascii=False)), "decision_rows": { "global_execution_gate": fed.get("global_execution_gate"), "hts_order_count": fed.get("hts_order_count"), "report_section_count": report.get("section_count"), "truth_score_0_100": truth.get("score_0_100"), }, } out_path = Path(args.out) if not out_path.is_absolute(): out_path = ROOT / out_path out_path.parent.mkdir(parents=True, exist_ok=True) out_path.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8") print(json.dumps(payload, ensure_ascii=False, indent=2)) return 0 if __name__ == "__main__": raise SystemExit(main())