v9.3.1 — policy overrides and org-tier policies for non-UUID organization ids
Patch. Two fixes on top of [9.3.0]: policy action override and organization-tier static-policy creation now work for deployments whose organization id is not UUID-shaped, and the customer-portal audit Log Explorer now shows the matched policy on redact/block rows. No new behavior; one idempotent migration (core/133) that auto-applies on deploy. See the 9.3.0 entry below for the feature release.
Fixed
- Policy override and organization-tier static-policy create no longer 500 for non-UUID organization ids. (Community) AxonFlow organization ids are free-form strings sourced from the signed license, not UUIDs. Four policy tables (
static_policies,dynamic_policies,policy_overrides,policy_evaluations) carried a legacyorganization_idcolumn typeduuid; binding a non-UUID org id into it failed withinvalid input syntax for type uuid, which surfaced in 9.3.0 as a hard 500 on the policy action override create path (POST /api/v1/static-policies/{id}/override) and on organization-tier static-policy create (POST /api/v1/static-policieswithtier: organization). Migrationcore/133retypesorganization_idtotexton all four tables, andHandleCreateOverridenow scopes the override by the canonical varcharorg_idplustenant_id, leaving the legacy column NULL. Thevalid_override_scopeCHECK constraint, the partial indexes onorganization_id, and row-level security (which keys onorg_id) are all type-transparent across the retype.org_idis the canonical organization column and RLS key; the legacyorganization_idremains deprecated and is scheduled for removal. - Portal audit Log Explorer shows the matched policy on redact and blocked rows. (Enterprise) The customer-portal audit Log Explorer's Policy column and detail panel rendered blank on PII-redact and blocked rows, because the matched policy is nested in
policy_details(apolicy_namesarray pluspolicy_matcheson blocks, andpolicy_idsonly on PII redacts) and was never lifted for display. The portal now lifts the human policy name across every shape (scalar,policy_namesstring or array, and allpolicy_matches[*].policy_namejoined) and falls back to the matched policy ids on redact rows that carry no name, so a genuinely-matched row is never rendered blank.
Migration
core/133(Community) — retypes the legacyorganization_idcolumn fromuuidtotexton thestatic_policies,dynamic_policies,policy_overrides, andpolicy_evaluationstables. Idempotent and guarded: it only alters a column still typeduuid. The retype is a full table rewrite, but the affected tables are small, bounded configuration tables, so it completes near-instantly. Auto-applies on deploy; no operator action required.
Full docs: https://docs.getaxonflow.com/docs/releases/v9-3-1