from datetime import datetime from robotproof_studio.contracts import PlanDelta from robotproof_studio.audit import AuditLog def make_delta(id_suffix: str) -> PlanDelta: return PlanDelta(delta_id=f"d-{id_suffix}", timestamp=datetime.utcnow().isoformat() + "Z", data={"val": id_suffix}) def test_audit_log_chain_and_detection(): log = AuditLog() d1 = make_delta("1") d1.sign("tester") e1 = log.append(d1) d2 = make_delta("2") d2.sign("tester") e2 = log.append(d2) # chain should be valid assert log.verify_chain() is True # tamper with second entry's delta_id (simulates external tampering) log.entries[1].delta_id = "tampered" assert log.verify_chain() is False