#!/usr/bin/env python3
"""Fail-closed checkpoint binding adapter.

Input: JSON containing an aggregate checkpoint object. The adapter deliberately
accepts only an explicit checkpoint payload, not inbox cursor metadata.
"""
import json
import sys

REQUIRED = ("tree_size", "sealed_counter", "capture_from", "capture_to", "source_version")

def verdict(doc):
    cp = doc.get("checkpoint") if isinstance(doc, dict) else None
    if not isinstance(cp, dict):
        return {"verdict": "UNKNOWN", "status": "REJECT", "reason": "checkpoint object absent"}
    missing = [k for k in REQUIRED if k not in cp or cp[k] is None]
    if missing:
        return {"verdict": "UNKNOWN", "status": "REJECT", "reason": "required checkpoint fields absent", "missing": missing}
    if cp["source_version"] != doc.get("accepted_source_version", cp["source_version"]):
        return {"verdict": "UNKNOWN", "status": "REJECT", "reason": "source version mismatch"}
    if cp["capture_from"] >= cp["capture_to"]:
        return {"verdict": "UNKNOWN", "status": "REJECT", "reason": "invalid capture window"}
    return {"verdict": "BOUND", "status": "ACCEPT", "reason": "explicit fields and non-empty window present"}

if __name__ == "__main__":
    payload = json.load(sys.stdin)
    print(json.dumps(verdict(payload), sort_keys=True))
