AxonFlow v7.5.0 Release Notes
A production, quality, and security hardening release. Upgrade strongly recommended. Over the past month we've shipped substantial fixes across the platform; this release rolls them up alongside coordinated SDK and plugin major bumps.
A coordinated SDK and plugin release train ships alongside this platform release — Go, Python, TypeScript, Java SDKs all advance to v7.0.0, the OpenClaw plugin to v2.0.0, and the Claude Code, Cursor, and Codex CLI plugins graduate from v0.x.x to v1.0.0. The breaking change driving all eight bumps is the DO_NOT_TRACK telemetry opt-out removal — AXONFLOW_TELEMETRY=off is now the canonical and only opt-out across every SDK and every plugin.
Security highlights from this release cycle
- Multi-tenant isolation in MAP execution (shipped in v7.4.5). A body-supplied
org_idcould override the authenticated org for both recording and policy evaluation. Identity is now sourced from authenticated headers consistently across recording, read filters, and policy evaluation. - SQL-injection enforcement restored on
try.getaxonflow.com(this release). The Community SaaS endpoint had inherited thewarndefault since v6.2.0; SQLi-shaped requests passed through to the LLM. Default flipped back toblock; configurable per-deploy via the newSqliActionCFN parameter. - Cross-tenant audit-log isolation (shipped in v7.2.0). Evidence and explain handlers fail-closed when tenant context is missing instead of returning data scoped to a different tenant.
The full set of platform-side security fixes addressed in this cycle — including five additional access-control and DoS hardening items not listed above — is documented in the consolidated security advisory GHSA-9h64-2846-7x7f.
No breaking platform changes. Existing SDK and plugin callers continue to work; they receive a one-time upgrade hint when they sit below the new floor.
Platform additions
/health advertises plugin version compatibility
A new plugin_compatibility field on the agent's /health response declares min_plugin_version and recommended_plugin_version per plugin id (openclaw, claude-code, cursor, codex), mirroring the long-standing sdk_compatibility shape. Plugins query /health at startup, log a one-time upgrade warning when they're below the floor, and stay quiet otherwise — the same downgrade-warning gate every SDK already runs.
{
"plugin_compatibility": {
"min_plugin_version": {"openclaw": "2.0.0", "claude-code": "1.0.0", "cursor": "1.0.0", "codex": "1.0.0"},
"recommended_plugin_version": {"openclaw": "2.0.0", "claude-code": "1.0.0", "cursor": "1.0.0", "codex": "1.0.0"}
}
}
Older platforms without the field degrade silently on the plugin side. The HealthResponse OpenAPI schema gains the new field.
Community-SaaS registration lifecycle
Three coordinated changes to the optional try.getaxonflow.com endpoint:
- Registration TTL extended from 30 days to 1 year. Existing 30-day registrations within 60 days of expiry are auto-extended at deploy time so no live tenant is locked out.
- Tombstone semantics on
community_saas_registrations. A newterminated_atcolumn lets the auth path reject registrations whose data has been cascade-deleted, while thetenant_idPK slot stays reserved indefinitely so a UUID is never reused. A distinctErrRegistrationTerminatederror returns an actionable "re-register" message instead of the generic invalid-credentials response. - Daily Community-SaaS inactivity sweep terminates tenants idle for more than 3 months and tenants past the 1-year hard cap, cascade-deleting their tenant-scoped data (audit logs, policies, workflows, plans, etc.) in a single transaction so a partial failure rolls the whole tick back. Multi-instance correctness via Postgres advisory lock — only one agent task runs the sweep per tick. Opt-in per deploy via
COMMUNITY_SAAS_SWEEP_ENABLED=true, withCOMMUNITY_SAAS_SWEEP_DRYRUN=trueavailable so operators can soak the predicate logic for 24h before flipping the real switch.
The disclaimer returned by POST /api/v1/register now matches the public privacy policy and the plugin first-run setup message — single source of truth across surfaces.
7-day delivered-heartbeat across all SDKs and plugins
All four SDKs and all four plugins now follow the same telemetry contract:
AxonFlow emits at most one anonymous heartbeat per environment every 7 days during SDK or plugin activity.
Stamp-on-delivery semantics: a transient network failure does not cause a 7-day silence period, and a single successful delivery does not cause a duplicate ping for another 7 days. See Telemetry for stamp-file paths per OS and the full operational characteristics.
Platform fixes
/health reports the deployed platform semver
Previously the version field returned 1.0.0 on every deployed stack because the CloudFormation templates wired AXONFLOW_VERSION to the agent image tag (latest, git SHA, etc.), which failed the semver regex in the agent's version resolver. A new dedicated PlatformVersion CFN parameter with a built-in semver AllowedPattern is now wired to AXONFLOW_VERSION independently of the image tag, and a new VERSION file at the repo root is the single source of truth read by both the build pipeline and the deploy script. A version-alignment validator runs on every push.
decision_id on every governance decision path
MCPCheckInputResponse now emits decision_id on the allow path of POST /api/v1/mcp/check-input (it was already emitted on every deny path). Every governance decision was supposed to surface decision_id so callers can correlate the decision back to the audit log via /explain/{id} without a round-trip — the allow path silently dropped it. Same fix applied to MCPCheckOutputResponse (which gains a decision_id field) and to the MCP-tool variants so plugin-visible shape is consistent across HTTP and MCP-tool surfaces.
try.getaxonflow.com reliability
- SQLi enforcement restored on the AxonFlow Community SaaS endpoint. The v6.2.0+ relaxed default profile no longer applies to
try.getaxonflow.com— SQL-injection patterns now block (rather than warn) in production by default. - Plan generation no longer 504s at 60s on the AxonFlow Community SaaS endpoint. Long MAP plan-generation requests against
try.getaxonflow.comnow complete reliably; the front-door gateway timeout is raised from 60s to 300s to match the orchestrator's plan budget.
OpenAPI specs declare 24 fields the platform was already emitting
AuditLogEntry (metadata, model, policy_violations), DynamicPolicy (7 CRUD fields), PlanResponse (4 plan-context fields), ResumePlanResponse (7 resume-context fields), plus 16 lower-priority schemas covering audit query params, budget/usage fields, execution-snapshot HITL fields, workflow step audit context, and the multimodal payload field on ClientRequest. Closes the spec-side gap surfaced by the Python SDK's wire-shape contract gate.
docs/api/agent-api.yaml and docs/api/orchestrator-api.yaml also gain spec-correctness fixes: 21 broken $ref references to a non-existent Error schema in agent-api.yaml are repointed to the existing ErrorResponse. Five additional broken refs in orchestrator-api.yaml are resolved by adding the missing OrgIDQuery parameter and three EU AI Act conformity schemas.
SDK release train
Four SDK releases ship alongside this platform release. None of these are required for the platform fixes above — agent-fronted callers run on whichever SDK they were running before. The min_sdk_version floor is preserved; the bumps are driven by the DO_NOT_TRACK removal and the 7-day-heartbeat contract.
| Surface | Version | Bump |
|---|---|---|
| Go SDK | v7.0.0 | major — module path moves to github.com/getaxonflow/axonflow-sdk-go/v7; DO_NOT_TRACK no longer honored |
| TypeScript SDK | v7.0.0 | major — DO_NOT_TRACK no longer honored |
| Python SDK | v7.0.0 | major — DO_NOT_TRACK no longer honored; StaticPolicy and PolicyVersion serialize wire fields in snake_case to match the OpenAPI spec (camelCase keys still accepted on input via aliases) |
| Java SDK | v7.0.0 | major — DO_NOT_TRACK no longer honored |
DO_NOT_TRACK no longer honored (BREAKING)
DO_NOT_TRACK was previously accepted as an opt-out alias. As of the v7.0.0 SDK majors and the v1.0.0 / v2.0.0 plugin majors, it is no longer honored. The reason is that DO_NOT_TRACK is commonly inherited from host tools and developer environments — host CLIs like Codex and Claude Code inject it unconditionally for hook subprocesses — which makes it an unreliable expression of user intent.
AXONFLOW_TELEMETRY=off is the canonical and only opt-out across every SDK and every plugin. If your CI workflows or deployment templates set DO_NOT_TRACK=1 to suppress AxonFlow telemetry, switch to AXONFLOW_TELEMETRY=off.
7-day delivered-heartbeat cadence
Each SDK now keeps a small stamp file under the OS-native cache directory and consults it at every client construction and every public HTTP request site. If the stamp's modification time is less than 7 days old, no ping is sent. The stamp is updated only after the server returns a 2xx response, so transient network failures don't cause 7-day silences.
Stamp file paths per OS for SDKs:
| OS | Path |
|---|---|
| macOS | ~/Library/Caches/axonflow/{sdk}-telemetry-last-sent |
| Linux | $XDG_CACHE_HOME/axonflow/{sdk}-telemetry-last-sent (falls back to ~/.cache/axonflow/...) |
| Windows | %LOCALAPPDATA%\axonflow\{sdk}-telemetry-last-sent |
{sdk} is one of go, python, typescript, java. See Telemetry for the full payload spec, restricted-runtime fallback (Lambda, etc.), and per-plugin paths.
Go SDK module path: /v7
Per Go module conventions, the major bump moves the module path:
# Before (v6.x — still works for users staying on v6.x)
go get github.com/getaxonflow/axonflow-sdk-go/v6
# After (v7.0.0+)
go get github.com/getaxonflow/axonflow-sdk-go/v7
Update import statements:
import "github.com/getaxonflow/axonflow-sdk-go/v7"
The v6.x line continues to receive security patches; new feature work lands on v7.x.
Plugin release train
Four plugin releases ship alongside this platform release.
| Surface | Version | Bump | Notes |
|---|---|---|---|
| OpenClaw plugin | v2.0.0 | major | npm install @axonflow/openclaw@^2.0.0. DO_NOT_TRACK removed. |
| Claude Code plugin | v1.0.0 | major (graduates from v0.x) | DO_NOT_TRACK removed. |
| Cursor plugin | v1.0.0 | major (graduates from v0.x) | DO_NOT_TRACK removed. |
| Codex plugin | v1.0.0 | major (graduates from v0.x) | DO_NOT_TRACK removed. |
All four plugins query the platform's /health at startup, read plugin_compatibility.min_plugin_version[<canonical id>], and emit a single upgrade hint to stderr when the runtime version is below the floor. Below recommended-but-above-min logs an info-level note; at-or-above recommended is silent. Older platforms that don't advertise the field degrade silently. Skippable per-plugin via AXONFLOW_PLUGIN_VERSION_CHECK=off.
The plugin stamp file uses a different filename than the SDKs — {codex,claude-code,cursor,openclaw}-plugin-telemetry-sent (note: no -last-sent suffix) — to preserve instance_id continuity with the v0.x install-stamp records that existing plugin users already have on disk. SDKs ship the heartbeat from the start, so they use the more descriptive {sdk}-telemetry-last-sent naming.
CI / Testing
- Tier-gate contract CI runs every PR that touches the agent or orchestrator code paths against a fresh docker-compose stack in community, evaluation, and enterprise modes, asserting that each guarded endpoint returns the documented status code per tier.
- OpenAPI validation now covers all three specs. Previously only
policy-api.yamlwas linted in CI;agent-api.yamlandorchestrator-api.yamlwere silently exempt and accumulated structural defects (broken refs, duplicate schemas, malformed examples). The validator now loops over all three specs and runs per-spec breaking-change diffs against the base branch.
Operators
platform/{agent,orchestrator}/capabilities.go advertises the v7.5.0 release-train versions:
{
"min_sdk_version": {"go": "7.0.0", "python": "7.0.0", "typescript": "7.0.0", "java": "7.0.0"},
"recommended_sdk_version": {"go": "7.0.0", "python": "7.0.0", "typescript": "7.0.0", "java": "7.0.0"},
"min_plugin_version": {"openclaw": "2.0.0", "claude-code": "1.0.0", "cursor": "1.0.0", "codex": "1.0.0"},
"recommended_plugin_version": {"openclaw": "2.0.0", "claude-code": "1.0.0", "cursor": "1.0.0", "codex": "1.0.0"}
}
The min_sdk_version floor advances to v7.0.0 across all four languages — older SDKs continue to work but log an upgrade hint until they're at the floor. The min_plugin_version floor lands at v2.0.0 (OpenClaw) / v1.0.0 (CLI plugins).
Upgrade checklist
- All operators: if your CI workflows or deployment templates set
DO_NOT_TRACK=1to suppress AxonFlow telemetry, switch toAXONFLOW_TELEMETRY=offbefore upgrading. The SDK and plugin majors no longer honorDO_NOT_TRACK. - Operators on Community SaaS: the
SqliActionparameter defaults toblockand theAlbIdleTimeoutSecondsparameter defaults to300. Both take effect on the next deployment of the running stack. - Operators with the daily inactivity sweep: the sweep is opt-in. To enable, set
COMMUNITY_SAAS_SWEEP_ENABLED=trueandCOMMUNITY_SAAS_SWEEP_DRYRUN=truefor the first 24 hours, review the logged "would terminate" lines, then flip the dry-run flag off. - Go SDK users: update import paths from
axonflow-sdk-go/v6toaxonflow-sdk-go/v7. The v6.x line continues to receive security patches. - Python / TypeScript / Java SDK users: bump the package version to v7.0.0. Python users who built models from camelCase wire dicts on
StaticPolicyorPolicyVersionshould switch to snake_case keys (camelCase still accepted on input via aliases). - Plugin users: upgrade via your usual install path (npm, plugin marketplace, ClawHub). Existing installs preserve their
instance_idacross the upgrade because the v0.x / v1.x telemetry stamp filename is unchanged.
SDK and plugin compatibility
The floor advances to v7.0.0 across all four SDKs and to v2.0.0 / v1.0.0 on the plugins. Prior-major SDK lines (Go v6.x, Python v6.x, TypeScript v6.x, Java v6.x) and the v0.x CLI plugin lines / v1.x OpenClaw line continue to receive security patches; new feature work lands on the new majors.
| Surface | Minimum | Recommended |
|---|---|---|
| Go SDK | v7.0.0 | v7.0.0 |
| Python SDK | v7.0.0 | v7.0.0 |
| TypeScript SDK | v7.0.0 | v7.0.0 |
| Java SDK | v7.0.0 | v7.0.0 |
| OpenClaw plugin | v2.0.0 | v2.0.0 |
| Claude Code plugin | v1.0.0 | v1.0.0 |
| Cursor plugin | v1.0.0 | v1.0.0 |
| Codex plugin | v1.0.0 | v1.0.0 |
Related
- Telemetry — full 7-day heartbeat contract, payload spec, stamp-file paths per OS, opt-out controls
- SDK Version Compatibility — the full compatibility matrix and upgrade procedures
- Go SDK Getting Started — updated for the v7 module path
