#!/usr/bin/env python3 from __future__ import annotations import argparse import json from pathlib import Path import yaml ROOT = Path(__file__).resolve().parents[1] DEFAULT_REPORT = ROOT / "Temp" / "operational_report.json" DEFAULT_CONTRACT = ROOT / "spec" / "render" / "renderer_contract.yaml" def main() -> int: ap = argparse.ArgumentParser() ap.add_argument("--report", default=str(DEFAULT_REPORT)) ap.add_argument("--contract", default=str(DEFAULT_CONTRACT)) args = ap.parse_args() report = json.loads(Path(args.report).read_text(encoding="utf-8")) contract = yaml.safe_load(Path(args.contract).read_text(encoding="utf-8")) or {} expected = contract.get("section_order") if isinstance(contract.get("section_order"), list) else [] actual = [s.get("name") for s in report.get("sections", []) if isinstance(s, dict)] filtered_expected = [str(x) for x in expected] ok = actual[: len(filtered_expected)] == filtered_expected payload = { "formula_id": "RENDERER_SECTION_ORDER_V1", "gate": "PASS" if ok else "FAIL", "expected_count": len(filtered_expected), "actual_count": len(actual), } print(json.dumps(payload, ensure_ascii=True, indent=2)) return 0 if ok else 1 if __name__ == "__main__": raise SystemExit(main())