test_wp09_critical_migration_contract.py 1.4 KB

1234567891011121314151617181920212223242526272829
  1. from __future__ import annotations
  2. from pathlib import Path
  3. ROOT = Path(__file__).resolve().parents[2]
  4. MIGRATION = ROOT / "migrations/versions/20260813_497_agent_runtime_critical_hardening.py"
  5. DEPLOYMENT = ROOT / "deployment/migrations/versions/20260813_497_agent_runtime_critical_hardening.py"
  6. def test_critical_hardening_migration_is_after_496_and_contains_atomic_claim_and_runtime_boundary():
  7. source = MIGRATION.read_text(encoding="utf-8")
  8. assert 'revision = "20260813_497"' in source
  9. assert 'down_revision = "20260813_496"' in source
  10. for required in (
  11. "agent_runtime_authorize", "FOR UPDATE", "request_digest", "idempotency_key",
  12. "dataops_agent_runtime_owner", "dataops_agent_runtime", "SECURITY DEFINER",
  13. "REVOKE ALL ON TABLE public.agent_invocation_audits", "governance_task_reviews",
  14. "data_incidents", "approval_task_uid", "clock_timestamp()",
  15. "t.business_domain_uid=p_domain::text",
  16. "END; $agent_runtime_authorize$;",
  17. "p_payload->>'request_digest')",
  18. "agent runtime role-init is required before migration 20260813_497",
  19. "agent_runtime_transition", "agent_runtime_canary_transition",
  20. "runtime recovery approval required", "generation fence conflict",
  21. ):
  22. assert required in source
  23. for forbidden in ("raw_input", "raw_output", "secret_value"):
  24. assert forbidden not in source
  25. assert MIGRATION.read_bytes() == DEPLOYMENT.read_bytes()