#!/usr/bin/env python3 import json import hashlib from pathlib import Path from datetime import datetime, timezone ROOT = Path(__file__).resolve().parents[1] def file_sha256(path: Path) -> str: if not path.exists(): return "" h = hashlib.sha256() with path.open("rb") as f: for chunk in iter(lambda: f.read(65536), b""): h.update(chunk) return h.hexdigest() def main(): chain_paths = [ "GatherTradingData.json", "Temp/final_decision_packet_active.json", "Temp/number_provenance_ledger_v4.json", "Temp/operational_report.json" ] chain = [] parent_hash = "0" * 64 for p in chain_paths: path = ROOT / p h = file_sha256(path) node = { "path": p, "sha256": h, "generated_at": datetime.fromtimestamp(path.stat().st_mtime, tz=timezone.utc).isoformat() if path.exists() else None, "parent_hash": parent_hash } chain.append(node) parent_hash = h result = { "formula_id": "ARTIFACT_CHAIN_HASH_V4", "chain": chain, "chain_length": len([c for c in chain if c["sha256"]]) } out_path = ROOT / "Temp" / "artifact_chain_hash_v4.json" out_path.write_text(json.dumps(result, indent=2, ensure_ascii=False), encoding="utf-8") print(f"Chain built: {len(chain)} artifacts tracked.") return 0 if __name__ == "__main__": main()