AxonFlow v9.16.1 Release Notes
v9.16.1 is a PATCH release with one focus: policy attribution in compliance report exports. The Policy column in the reports that carry one (OJK / BI / UU PDP, SEBI, EU AI Act, and the portal decisions feed) rendered blank even where the policy identity was recorded. This release fixes both halves: reports now read every attribution shape the audit planes write, and the one plane that was not recording a policy reference now does. (The RBI and MAS FEAT report sections are incident / kill-switch / assessment tables with no policy column, so they were not affected.)
No database migrations. No SDK or plugin changes. Upgrading from 9.16.0 is a digest re-pin and restart.
Am I affected?
Anyone using the compliance report exports. If your generated reports show an empty Policy column, this release fixes it - largely including for data you have already collected.
Everyone else: routine patch, nothing to do.
What was wrong, precisely
Audit rows are written by several planes (governed requests, tool governance, telemetry ingest), and over time they came to record the triggering policy under different field names. The report exporters read only one of those names, so rows written by the other planes rendered a blank Policy cell even when the policy name - and its version - were recorded in the row.
Separately, one plane - telemetry-sourced events (Cowork/agent-gateway OTEL ingest) - was not recording a policy reference at all.
What 9.16.1 does
- Report exporters read every recorded attribution shape. Blocked events that already carry a policy name and version now show them in the Policy column - retroactively: re-generate a report after upgrading and existing rows fill in. No data migration, no backfill script; the exporter simply reads what was always in the row.
- Telemetry-sourced events record their policy reference going forward. Redactions and blocks observed through the telemetry ingest now record the control that fired (identity, category, and ruleset version) at write time.
- Honest marker for genuinely unattributed history. Historical telemetry rows that never carried a policy reference render an explicit "Not recorded (pre-9.16.1)" instead of a silent blank - the correct representation for a compliance artifact, rather than inferred attribution. Rows where no policy legitimately fires get an affirmative label instead - for example "None (user decision)" when a person rejected a tool call themselves - so the report never implies a policy acted where none did.
- A cross-plane consistency guard. A contract test now ties every audit-writing plane to the export readers, so a writer recording attribution under a name the reports do not read fails the build instead of shipping.
Also in this release
- The portal decisions feed resolves the policy label from every recorded shape too, so decisions that listed without a policy label now show one - retroactively, since it is resolved on read.
- Circuit-breaker denies on the decision plane now carry an explicit attribution (previously the one deny path with none).
Before you upgrade
- No migrations. From 9.16.0 this is a digest re-pin and restart.
- From older versions: 9.16.1 is cumulative. If you are crossing the 9.13.0 boundary from 9.12.x, the usual care applies - run the bundle's
preflight.shfirst and take a database backup. See the v9.12 to v9.13 upgrade guide. - After upgrading, re-generate any compliance report whose Policy column was blank - existing blocked events fill in with the policy name and version.
SDK and plugin compatibility
No SDK or plugin changes are required. Clients compatible with v9.16.0 are compatible with v9.16.1.
