from __future__ import annotations import argparse import json from pathlib import Path from typing import Any ROOT = Path(__file__).resolve().parents[1] # V2 is the current active artifact; fall back to V1 path if absent _V2_PATH = ROOT / "Temp" / "final_execution_decision_v2.json" _V1_PATH = ROOT / "Temp" / "final_execution_decision_v1.json" DEFAULT_PATH = _V2_PATH if _V2_PATH.exists() else _V1_PATH 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("--json", default=str(DEFAULT_PATH)) args = ap.parse_args() path = Path(args.json) if not path.is_absolute(): path = ROOT / path payload = _load(path) errors: list[str] = [] if str(payload.get("formula_id") or "") not in {"FINAL_EXECUTION_DECISION_V1", "FINAL_EXECUTION_DECISION_V2"}: errors.append("formula_id mismatch") gate = str(payload.get("global_execution_gate") or "") if gate not in {"HTS_READY", "EXPLAIN_ONLY", "AUDIT_ONLY"}: errors.append(f"global_execution_gate={gate}") if not isinstance(payload.get("buy_allowed"), bool): errors.append("buy_allowed must be bool") if not isinstance(payload.get("sell_allowed"), bool): errors.append("sell_allowed must be bool") if not isinstance(payload.get("hts_order_count"), int): errors.append("hts_order_count must be int") if not isinstance(payload.get("reason_codes"), list): errors.append("reason_codes must be list") if not isinstance(payload.get("llm_allowed_actions"), list): errors.append("llm_allowed_actions must be list") if gate != "HTS_READY" and int(payload.get("hts_order_count") or 0) != 0: errors.append("non-HTS_READY decision must have hts_order_count=0") if errors: print("FINAL_EXECUTION_DECISION_V1_FAIL") for err in errors: print(f" {err}") return 1 print("FINAL_EXECUTION_DECISION_V1_OK") print(f" global_execution_gate: {gate}") print(f" hts_order_count: {int(payload.get('hts_order_count') or 0)}") return 0 if __name__ == "__main__": raise SystemExit(main())