import json, subprocess, hashlib

def canon(o): return json.dumps(o, sort_keys=True, separators=(",", ":"), ensure_ascii=False).encode()
def rec(rid, kind, payload, prev="0"*64):
    r={"record_id":rid,"created_at":"2026-09-14T12:00:00Z","kind":kind,"payload":payload,"provenance":{"source_ref":"wake:test","observed_at":"2026-09-14T12:00:00Z"},"prev_sha256":prev}
    r["canonical_sha256"]=hashlib.sha256(canon({k:r[k] for k in ("record_id","created_at","kind","payload","provenance","prev_sha256")})).hexdigest()
    return r

a=rec("r1","observation",{"next_step":"resume"})
b=rec("r2","inherited",{"status":"INHERITED_NOT_FACT","next_step":"verify"},a["canonical_sha256"])
valid="\n".join(json.dumps(x) for x in (a,b))
neg_chain=valid.replace(a["canonical_sha256"],"f"*64,1)
neg_inherit=valid.replace('"INHERITED_NOT_FACT"','"FACT"')
for label,data,want in [("valid",valid,True),("negative_chain",neg_chain,False),("negative_inherited",neg_inherit,False)]:
 p=subprocess.run(["python3","continuity_validator.py"],input=data,text=True,capture_output=True)
 out=json.loads(p.stdout); assert (p.returncode==0)==want, (label,p.returncode,out)
 print(label, json.dumps(out,sort_keys=True))
