AxonFlow v9.6.0 Release Notes
v9.6.0 is a minor release that turns the Claude Code and Claude Cowork activity v9.5.0 began ingesting into reporting. A new session-summary API rolls governed activity into per-session (or per-user-day) buckets, additively enriched with the developer and session usage metrics when the OTLP metrics ingest is wired; a new operator Grafana dashboard visualizes that usage; and the bundled Grafana datasources are provisioned with stable uids, closing a pre-existing bug that broke provisioned dashboards. One idempotent database migration applies automatically on startup, so it is a drop-in upgrade from v9.5.x.
The session-summary API and the usage dashboard are Enterprise features. In Community the session-summary endpoint returns 501; the Grafana datasource fix and the migration apply to every edition.
Added
Session-summary reporting API — GET /api/v1/audit/session-summary (Enterprise)
The new endpoint aggregates the governed audit trail into per-session (or, when a record has no session, per-user-day) buckets — a reporting view over the same store the audit log already writes. Each bucket carries:
- Request totals and an allow / block / redact breakdown.
- A per-tool usage breakdown (per request type) with tokens, cost, and latency.
- Session-level totals — tokens, cost, and latency for the whole bucket.
Results are tenant-scoped, can be filtered by user, and are capped (?limit=, default 200, max 1000) with a truncated flag so a large tenant returns a bounded, predictable payload.
When the OTLP /v1/metrics ingest is configured (see v9.5.0), each bucket is additively enriched with the Claude Code usage metrics — lines of code, active time, commits, pull requests, tool-permission decisions, session count, and the metrics-export token and cost aggregates. The enrichment is best-effort: when the metrics ingest is not wired, the enriched fields are simply absent and the base view still works from the audit trail alone.
In Community the endpoint is present but returns 501 — it is an Enterprise capability.
Claude Code Usage Grafana dashboard (Enterprise)
A new Claude Code Usage dashboard visualizes the usage records that v9.5.0's OTLP-metrics ingest lands: per-developer and per-session tokens, cost, lines of code, tool-permission decisions, and active time (PostgreSQL panels over the usage store), plus an ingest-health row over the per-tenant export-reject counter (axonflow_otel_ingest_rejected_total, from Prometheus). It is an operator/admin reporting surface — its org filter is a display slice, not a tenant-isolation boundary.
The dashboard is provisioned by the deployed Grafana image and needs no manual import on v9.6.0. See the Grafana dashboard page for the panels and setup.
Changed
Grafana provisioned datasources now carry stable uids (Community)
The bundled dashboards already referenced a datasource by a fixed uid (prometheus) that the deployed Grafana entrypoint never defined, so those panels resolved to "datasource not found" on a fresh deployment. v9.6.0 provisions the datasources with stable uids (prometheus, axonflow-postgres), so the bundled dashboards resolve out of the box. Dashboards that reference their datasource by name are unaffected.
Upgrade note: a dashboard you authored against the previous auto-generated datasource uid needs to be re-pointed once. The deployed entrypoint also accepts USAGE_DB_* variables, so the SQL datasource can target the platform database when GF_DATABASE_* points at a dedicated Grafana metadata database.
Migration
core/141 adds an idempotent (tenant_id, timestamp, session_id) composite index to audit_logs, so the session-summary aggregate scans are index-assisted on large tenants. It is additive — it does not rewrite existing rows — and applies automatically on startup.
Upgrading
v9.6.0 is a drop-in upgrade from v9.5.x. Pull the new images and restart; the core/141 migration applies automatically. The session-summary API and the usage dashboard are Enterprise-only; a Community deployment is unaffected apart from the session-summary endpoint returning 501, and picks up the Grafana datasource-uid fix on upgrade.
