"""nova hitl — attest a promotion gate (REQ-108).""" from __future__ import annotations import json import sys from core.hitl_gates import attest, approver_from_env def add_parser(subparsers): p = subparsers.add_parser("hitl", help="attest a promotion gate") p.add_argument("--contract-id", required=True) p.add_argument("--env", required=True, help="dev/qa/prod/dr") p.add_argument("--evidence", default=None, help="evidence JSON path") p.set_defaults(_run=run) def run(args) -> int: evidence = _load_evidence(args.evidence) approver = approver_from_env() or "" ok, reason = attest(args.contract_id, args.env, approver, evidence) print(f"HITL PASS: {reason}") if ok else sys.stderr.write(f"HITL BLOCK: {reason}\n") return 0 if ok else 1 def _load_evidence(path): return {} if path is None else json.loads(open(path).read()) if __name__ == "__main__": import sys print("use: nova hitl --contract-id --env [--evidence f.json]", file=sys.stderr)