v9.0.0 — Canonical audit vocabulary across every enforcement plane
Major release. Every enforcement plane writes one canonical policy_decision vocabulary (allowed/blocked/redacted/needs_approval/error), enforced by a DB CHECK, consumed by every reader through one shared normalizer. Audit-coverage completeness closes the early-return-deny / satellite-only holes across MCP (incl. connector-exec), gateway, /decide, and OpenAI-compat surfaces.
Breaking: policy_decision canonicalized + CHECK (allow->allowed, deny->blocked, pending_approval->needs_approval); /decisions?decision= rejects legacy values (use blocked/needs_approval); HITL timeout status rejected->expired.
Migration guide: https://docs.getaxonflow.com/docs/deployment/v8-to-v9-migration/