#!/usr/bin/env python3 from __future__ import annotations import argparse import json from pathlib import Path ROOT = Path(__file__).resolve().parents[1] DEFAULT_IN = ROOT / "Temp" / "performance_readiness_replay_bridge_v1.json" DEFAULT_OUT = ROOT / "Temp" / "performance_readiness_replay_bridge_v2.json" def _load(path: Path) -> dict: if not path.exists(): return {} try: obj = json.loads(path.read_text(encoding="utf-8")) return obj if isinstance(obj, dict) else {} except Exception: return {} def main() -> int: ap = argparse.ArgumentParser() ap.add_argument("--bridge", default=str(DEFAULT_IN)) ap.add_argument("--out", default=str(DEFAULT_OUT)) args = ap.parse_args() bridge = _load(Path(args.bridge)) live = bridge.get("live") if isinstance(bridge.get("live"), dict) else {} replay = bridge.get("replay_informational") if isinstance(bridge.get("replay_informational"), dict) else {} live_t20_count = int(live.get("t20_count") or 0) promotion_rule = "live_t20_count >= 30" result = { "formula_id": "PERFORMANCE_READINESS_REPLAY_BRIDGE_V2", "gate": bridge.get("gate") or "WATCH_PENDING_LIVE_SAMPLE", "source_type": { "live": "ACTIVE_ELIGIBLE", "replay": "INFORMATIONAL_ONLY", }, "live_t20_count": live_t20_count, "replay_t20_count": int(replay.get("t20_count") or 0), "promotion_rule": promotion_rule, "promotion_allowed": live_t20_count >= 30, "live": live, "replay_informational": replay, "source_path": str(Path(args.bridge)), } out = Path(args.out) out.write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding="utf-8") print(json.dumps(result, ensure_ascii=False, indent=2)) return 0 if __name__ == "__main__": raise SystemExit(main())