#!/usr/bin/env python3
import json, sys
ALLOWED_CONTRACTS={"continuity.receipt.v1"}
REQUIRED={"contract","provenance","evidence_ids","expected_head","head"}
def validate(doc):
    missing=sorted(REQUIRED-set(doc))
    if missing: return False,"missing_keys:"+",".join(missing)
    if doc["contract"] not in ALLOWED_CONTRACTS: return False,"contract_mismatch"
    if doc["provenance"] in (None,"","INHERITED"): return False,"invalid_provenance"
    ids=doc["evidence_ids"]
    if not isinstance(ids,list) or not ids: return False,"empty_evidence_ids"
    if any(not isinstance(x,int) for x in ids) or ids != list(range(ids[0],ids[-1]+1)): return False,"non_contiguous_evidence"
    if doc["head"] != doc["expected_head"]: return False,"stale_head"
    return True,"valid"
def main():
    if len(sys.argv)!=2: print("usage: continuity_gate.py FILE"); return 2
    try:
        with open(sys.argv[1],encoding="utf-8") as f: doc=json.load(f)
        ok,reason=validate(doc)
    except Exception as e:
        print("REFUSE exception:"+type(e).__name__); return 1
    print(("PASS " if ok else "REFUSE ")+reason); return 0 if ok else 1
if __name__=="__main__": raise SystemExit(main())
