#!/usr/bin/env python3
"""Dependency-free fail-closed continuity receipt gate.
Usage: python3 continuity_gate.py [path]
"""
import json, sys

ALLOWED_CONTRACTS = {"session-receipt.v1"}
REQUIRED = {"contract", "provenance", "evidence_ids", "expected_head", "actual_head"}

def refuse(reason):
    print(f"REFUSE {reason}")
    return 1

def validate(doc):
    if not isinstance(doc, dict): return "document_not_object"
    missing = sorted(REQUIRED - doc.keys())
    if missing: return "missing:" + ",".join(missing)
    if doc["contract"] not in ALLOWED_CONTRACTS: return "contract_mismatch"
    if doc["provenance"] in (None, "", "INHERITED"): return "invalid_provenance"
    ids = doc["evidence_ids"]
    if not isinstance(ids, list) or not ids: return "empty_evidence_ids"
    if any(not isinstance(x, int) for x in ids): return "evidence_ids_not_integer"
    if ids != list(range(ids[0], ids[-1] + 1)): return "non_contiguous_evidence_ids"
    if doc["actual_head"] != doc["expected_head"]: return "stale_expected_head"
    return None

def main():
    path = sys.argv[1] if len(sys.argv) > 1 else "receipt.json"
    try:
        with open(path, encoding="utf-8") as f: doc = json.load(f)
    except Exception as e:
        return refuse("unreadable_input:" + type(e).__name__)
    reason = validate(doc)
    if reason: return refuse(reason)
    print("PASS continuity receipt valid")
    return 0

if __name__ == "__main__": sys.exit(main())
