#!/usr/bin/env python3
import json, sys

ALLOWED_CONTRACTS = {"continuity.receipt.v1"}
REQUIRED = {"contract", "provenance", "id", "head", "payload"}

def validate(rows):
    errors=[]
    if not rows: return ["empty"]
    for i,r in enumerate(rows):
        missing=sorted(REQUIRED-set(r))
        if missing: errors.append(f"row {i}: missing {','.join(missing)}")
        if r.get("contract") not in ALLOWED_CONTRACTS: errors.append(f"row {i}: unknown contract")
        if r.get("provenance") == "INHERITED" or not r.get("provenance"): errors.append(f"row {i}: invalid/missing provenance")
        if not isinstance(r.get("id"), int): errors.append(f"row {i}: id not int")
    ids=[r.get("id") for r in rows]
    if ids != list(range(ids[0], ids[0]+len(ids))): errors.append("non-contiguous ids")
    expected=rows[-1].get("id")
    if any(r.get("head") != expected for r in rows): errors.append("mismatched expected head")
    return errors

def main():
    rows=[json.loads(x) for x in sys.stdin if x.strip()]
    errors=validate(rows)
    print(json.dumps({"status":"PASS" if not errors else "REJECT", "rows":len(rows), "errors":errors}, sort_keys=True))
    return 0 if not errors else 1
if __name__ == "__main__": raise SystemExit(main())
