AxonFlow v8.7.0 Release Notes
v8.7.0 is a governance-integrity release. It consolidates policy decisions onto a single canonical audit record, lets each organization set its own detection enforcement posture on every plane, closes a class of compliance-export defects that let regulator-facing exports report success with no data, and corrects audit-feed pagination and PII detection false positives. Every change ships in the platform binaries, so this release goes to both editions. No breaking changes and no schema-incompatible changes — every API addition is additive and backward-compatible, and the new database columns are nullable and additive.
Audit-trail consolidation: one canonical decision record
Before v8.7.0, reconstructing why a request was governed meant parsing a JSON policy_details blob and correlating timestamps by hand. v8.7.0 makes the decision a first-class, queryable record on audit_logs.
decision_idandplaneare now first-class columns. Every governed decision writes a canonical row carrying a stabledecision_id(which joins to the decision record and the explain endpoint) and aplanethat names the enforcement surface (llm,mcp,agent, …). A regulator export can now be filtered to a single plane.- MCP
check-outputblocks emit a canonical decision row. A PII block on the MCP response path previously did not produce a decision row in the consolidated shape; it now writes the same canonicalaudit_logsdecision record as every other plane, so the response leg is no longer a blind spot in the trail. correlation_idgroups decisions into chains. A single user action fans out into several governed decisions — the LLM call is checked, the tool it wants to call is checked, the agent step that wires them is checked. AxonFlow now stamps the W3Ctrace_ida Policy Enforcement Point propagates across those hops onto every decision row. Rows sharing acorrelation_idare the ordered steps of one decision chain.
The regulator-facing exports use this to reconstruct chains instead of emitting a flat dump — see the compliance section below. Full detail is on the Audit Logging page.
Per-organization detection posture on every plane
A single deployment often serves teams that want different enforcement behavior — a chat assistant wants PII redacted so the conversation flows, a nightly batch export wants the same PII to block the job. Until now the detection action (PII_ACTION and the SQLi / dangerous-operation levers) was one deployment-wide value resolved at boot, so those teams could not coexist.
v8.7.0 makes the enforcement action per-organization and per-category, with effective = per-org override ELSE deployment-global default:
- Agent plane. The agent honors per-
(org, category)overrides across its request and response paths — MCPcheck-input/check-output, the Gateway pre-check,POST /api/v1/decide, the proxy, the policy-test surface, and the OpenAI-compatible endpoint. - Orchestrator response plane. The orchestrator runs in a separate binary and previously always used the deployment-global action on the LLM-response redaction path (proxy / gateway / MAP). It now resolves the same per-org override there, so a per-org redact under a global warn is no longer reverted.
- Customer-portal write path (Enterprise). A new Settings → Governance → Detection Posture page (
/settings/detection-posture) lets an operator set each category toblock/redact/warn/log, or leave it on the deployment default. The write path is gated by thesso:configurepermission and scopes the write to the session's organization, so a spoofedX-Tenant-IDheader cannot steer it.
On the hot path neither binary makes a per-request database call — each holds a short-TTL per-org cache and fails safe to the deployment-global action if a posture lookup errors. Full detail on the new Per-Org Detection Posture page.
Compliance-export integrity
This release fixes a class of defects where a regulator-facing export could report success while carrying no data, and derives the regulator exports from the canonical decision record.
- EU AI Act exports no longer fake success. Every EU AI Act export processor except decision-chain was a stub that returned no rows while the job was still marked
Completedwith a 100% progress bar — a regulator-facing export that lied. Unimplemented export types now fail honestly instead of reporting a zero-record success. - EU AI Act exports query real data. The
full_audit,conformity_evidence,hitl_summary,policy_violations, andaccuracy_metricsprocessors now read real, org-scoped data fromaudit_logs,policy_violations, the HITL records, and theeuaiact_*tables. - SEBI and EU AI Act exports reconstruct decision chains. Both exports derive their lineage from the canonical
audit_logsrows and group bycorrelation_id— SEBI returns chains underdata.decision_chains; the EU AI Act export returnsdecision_chainswith achain_count. A single-step request (or a legacy row with no trace) is a one-element chain, so grouping never drops a decision. See SEBI and EU AI Act. - Audit retention is actually executed. A retention executor now prunes the six config-governed audit tables on schedule. It runs dry-run by default (it reports what it would delete) and only deletes when retention enforcement is explicitly enabled, with an admin surface to inspect a run.
admin_audit_logandscim_audit_logwriters are wired. Administrative actions and SCIM operations are now recorded to their dedicated audit tables — the SCIM writer is row-level-security scoped to the acting org.
Decisions / audit feed
The audit feed that backs the portal's audit view and the POST /api/v1/audit/search API got four correctness fixes:
totalis the true match count. It previously returned the size of the returned page, so a UI could not render an accurate "1–100 of 4,213".offsetis applied. Pagination previously repeated the first page; page 2 is now actually page 2.- Partial-match filters. The
tenant_idanduser_emailfilters now do case-insensitive substring matching, so an operator can search by a fragment. actionfilter. A filter onpolicy_decision(allowed/blocked/redacted/error) was added.
The portal audit view also no longer steals input focus on each filter fetch — typing in a filter box while results refresh no longer drops keystrokes. The API-visible changes are documented on the Audit API page.
SCIM group-to-role mapping is mounted
The SCIM group-to-role mapping endpoints — which let an IdP group membership grant an AxonFlow role — are now mounted and reachable on the customer portal. Because assigning a role is a privilege grant, they are served on the session-authenticated router behind the sso:configure permission (not the bearer-token /scim/v2 provisioning router), the org is resolved from the session, and every change is written to the SCIM audit log. See SCIM 2.0 Provisioning → Group-to-Role Mapping.
PII detection false-positive fixes
v8.7.0 tightens several broad detectors so benign values stop getting masked, and makes redaction structure-aware. This behavior is documented in detail on the PII Detection and MCP Response Redaction pages; in summary:
- Context-gated detectors. Broad-shape detectors — bare-12-digit Aadhaar, Singapore NRIC/FIN/UEN/postal, passport, date-of-birth, IP-vs-version, Indonesian phone — now require a label or indicator adjacent to the value before they fire, so order IDs, barcodes, asset tags, build numbers, and tracking IDs are no longer masked. The specific fixes close IP-detected-on-a-version-string and phone-detected-on-a-tracking-ID false positives, and context-gate the bare Aadhaar and Singapore NRIC/FIN detectors.
- Structure-aware, JSON-safe redaction. A redacted response always stays valid JSON: a string value is masked in place; a numeric-position value (e.g. a NIK stored as an integer) is masked and coerced to a string so the document stays valid; escaped PII (
\uXXXX) is decoded and matched; and an unsafe result fails closed rather than emitting broken JSON.
Masking requires
redactorblock. Underwarn/logthe detectors fire for audit but never modify content — see the detection-posture and PII-detection pages.
Capability discovery
The agent capability list (surfaced at GET /health) now recommends claude-code plugin v1.6.0 as the current plugin for self-hosted Enterprise MCP, so a deployment can advertise the plugin version that carries the Enterprise login fix.
What's NOT changed
- No breaking changes. All existing SDKs, plugins, and API consumers continue to work unchanged. New API fields and filters are additive; an org with no posture override behaves byte-for-byte as it did in v8.6.0.
- The new
audit_logscolumns are additive and nullable. Legacy rows carryNULLfordecision_id/plane/correlation_idand are treated as single-step chains; no backfill is required. - SDK versions are unchanged by this platform release and follow their own trajectories. The recommended SDK versions are unchanged from v8.6.0.
- Existing endpoints — Proxy Mode (
POST /api/request), Gateway Mode (POST /api/policy/pre-check), the OpenAI-compatible endpoint (POST /v1/chat/completions), and Decision Mode (POST /api/v1/decide) — all keep their existing contracts.
Upgrade notes
Self-hosted (Docker / docker compose up)
Pull the v8.7.0 images. No configuration changes are required — the audit consolidation, the per-org posture enforcement planes, the export-integrity fixes, and the detection false-positive fixes are all active on upgrade.
# Community
docker compose pull && docker compose up -d
# Enterprise
docker compose -f docker-compose.yml -f docker-compose.enterprise.yml pull
docker compose -f docker-compose.yml -f docker-compose.enterprise.yml up -d
To use per-org detection posture, set each org's overrides from Settings → Governance → Detection Posture (Enterprise portal). Optionally tune the propagation window with AXONFLOW_DETECTION_OVERRIDE_TTL_SECONDS (default 60s). To enable audit-retention pruning beyond dry-run, enable retention enforcement explicitly.
In-VPC Enterprise (AWS CFN)
No action required. The v8.7.0 images are drop-in. The new audit_logs columns are added by an additive, idempotent migration.
Community-SaaS users
No action required. The audit-consolidation and per-org posture enforcement changes are available at all tiers; the portal write path to set posture is an Enterprise surface.
Migration resources
- Per-Org Detection Posture — set a per-team
block/redact/warn/logaction. - Audit Logging → decision chains —
decision_id,plane, andcorrelation_id. - SEBI and EU AI Act — decision-chain export reconstruction and real-data exports.
- v8.6.0 Release Notes — the PII validator-assignment fix, Indonesian NIK/NPWP redaction on every plane, and the engine-fulfillable Decision Mode obligation contract.
