AxonFlow v11.1.0 Release Notes
v11.1.0 is a minor on the v11 model. Nothing in the v10 → v11 Migration Guide changes. If you are upgrading from v10.x, read that first.
Most of this release completes v11's own model:
- the Fraud & Risk Add-on's risk score returns, as a fact the FinCrime pack reads;
- an approval requirement holds on Decision Mode and the MCP request plane;
- a policy can say which planes it binds on;
- every multi-agent step, and the content of every step, is decided.
Several changes close behaviour that let a request through without a decision. Where that turns an allow into a refusal, the section below says what to do.
Before you upgrade: actions
Two changes need a caller to change to keep working:
- Send
acknowledge_template_omissionswhen you activate a document that drops or changes template policies, or the activation is refused. Activating a typed organization document that omits organization-template policies, or carries one under its id but changed, now answers409 TEMPLATE_OMISSIONS_UNACKNOWLEDGED. It succeeds only when the request lists exactly those policy ids inacknowledge_template_omissions. The ids are the union oftemplate_omissions.omittedandtemplate_omissions.modified, which both the publish response and the refusal report. The portal's promote and rollback show the removed and changed policies and confirm them in one step. See Typed Policy Authoring. - Remove
Industryfrom your AWS Marketplace stack's parameter overrides, or the stack update is rejected. The CloudFormation template no longer declares it. That includes a script that rebuildsUsePreviousValueentries fromdescribe-stacks. The parameter set a variable nothing read, and what a stack deploys does not change. See AWS Marketplace.
Four more changes refuse something that used to be allowed. Check each one against your deployment:
- With media governance on and no analyzer that measures content safety, every image request is refused. Examples are a deployment with no analyzer registered, or with local OCR as its only analyzer. The refusal is
unknown_constraintfromsys_media_nsfw_block. Before, these requests were allowed on safe values that no analyzer had measured. Register a content-safety analyzer, or change that policy in your organization's document. See Media Governance. - Cowork ingest answers
501when an Enterprise image runs a core-only deployment mode (community,evaluationorcommunity-saas), exactly as the community build does. To keep it, run the Enterprise image in an Enterprise mode. See Cowork OTEL Ingest. - Every multi-agent step is decided by your policy, on every deployment. Before, steps were decided only when
AXONFLOW_HITL_ENABLEDwastrue, which no shipped deployment set totrue. That variable is now ignored.- A step your policy blocks is refused
403 execution_blocked(it was500). - A step an approval requirement matches is refused
403 approval_requires_durable_record. - To have a person approve multi-agent steps, run the plan in
confirmorstepmode.
- A step your policy blocks is refused
- Audit rows and metrics for
/api/v1/processand/api/v1/plan/executecarryplane: orchestrator_requestinstead ofwcp. Update dashboards, saved searches and alerts that filter onwcpfor those two routes.
Am I affected?
Anyone with automation that activates typed documents. Read action 1.
AWS Marketplace deployments. Read action 2.
Anyone using image governance, cowork ingest or multi-agent plans. Read actions 3 to 5.
Anyone who authored typed policies for workflow steps or the orchestrator's request routes. Read Orchestrator request routes: a document you already published keeps governing exactly what it governed, until you republish it.
Enterprise deployments running the upgrade with a v10.x customer portal or agent still in service. Read Migrations: upgrade every portal and agent to v11 before v11.1.0's migrations run.
The Fraud & Risk Add-on's risk score is back
Enterprise, with the Fraud & Risk Add-on. v11.0.0 retired the add-on's v10 scoring integration. v11.1.0 brings the score back under the v11 model: it is a fact the FinCrime pack reads, advisory by design, and it never blocks.
- Turning it on. Run the add-on's optional scoring service, whose image and model bundle are not in the standard install image set and come from your AxonFlow contact during early access (see Known limits), and set
AXONFLOW_FINCRIME_RISK_FACT_URL;AXONFLOW_FINCRIME_RISK_FACT_TIMEOUT_MSsets the call's budget. A deployment that does not start the service is unchanged. The v10 variablesAXONFLOW_FINCRIME_SCORER_URLandAXONFLOW_FINCRIME_SCORER_TIMEOUT_MSstill refuse boot, and the refusal now names their replacements. A scorer URL without a usableAXONFLOW_INTERNAL_SERVICE_SECRETalso refuses boot. - What it does. A request on Decision Mode or the MCP request pass that declares a FinCrime transaction is scored before it is decided, once the caller has been admitted. The FinCrime pack, now version 2, holds the request for a person's approval when the score is at or above
0.011591929942369461.- The threshold is the operating point that flags at most 1% of transactions on the model's validation partition. It is not tuned to your traffic.
- To move it, up or down, publish a policy under the control's own id
pack:fincrime:fincrime__ml__risk__stepupin your organization's document.
- Guarantees. The score never blocks, and a missing score never refuses or holds. Every decision on which the control read the score records why it has the score it has, at
policy_details.fincrime_risk_score:- a status:
scored,timeout,auth_rejected,unavailable,malformed_response,unconfiguredorno_transaction; - the score, the model version and its top features;
- each control that read the score, with its threshold.
- a status:
- Observability. The same outcomes are counted in
axonflow_fincrime_risk_fact_total./healthreports them asrisk_score_fact, which readsdegradedwhile the scoring service refuses the agent's secret.
Approvals
- Decision Mode and the MCP request plane hold an approval requirement as a pending approval (Enterprise). On a deployment with the approval queue, a call an approval requirement matches is no longer refused.
- It answers
pending_approvalon the MCP routes andverdict: needs_approvalon Decision Mode, and the approval appears in the portal's Approvals view. - Once approved, retrying the same call with the approval named (
X-Axonflow-Approval-Id, or theapproval_idfield) passes it once. - A retry after a rejection, after expiry, with changed input, or naming an unknown approval is refused with a named reason.
/healthnames the contractapproval_hold_retry, so a client can discover it. Community is unchanged: there, the requirement is refusedapproval_required.
- It answers
- The approval window is configurable.
AXONFLOW_APPROVAL_TTL_SECONDSsets the window for an approval no policy gives one: 15 minutes when unset, 60 to 604800 seconds, and an out-of-range value refuses boot. A policy'sapproval_challengeexpiry_secondsnow sets the window in either direction, andapproval_challengeaccepts aseverity(low,medium,high,critical). - Workflow step approvals govern what runs. A step gate that would re-evaluate a step whose approval is pending, rejected or expired is refused
409 APPROVAL_HOLD. An approve and a reject racing on one step cannot both land, and an approval never lands on an ended workflow (409 WORKFLOW_TERMINAL). A step held again gets its own new approval, with its own window. - A call that several FinCrime approval requirements match at once is held as one pending approval (Enterprise), naming every policy that asked. It could be refused
approval_requiredinstead. An approval that cannot be queued is refused with its cause (the pending-approval limit, the licence tier, or an internal error), never a database error's text. - Multi-agent plan resume runs its steps in order, runs the step whose approval it recorded, and acts only on the plan's own workflow.
See Human-in-the-Loop.
Typed policies
-
binds_on. A policy can name the enforcement planes it applies on, for example["wcp", "map"]to require approval on workflow steps without touching MCP tool calls. A policy withoutbinds_onapplies everywhere, as before. Publishing warns where a requirement binds on a plane that cannot hold an approval:BINDS_ON_MCP_RESPONSE: the MCP response pass. An approval requirement that applies there also refusescheck_output, so scope it withbinds_on.BINDS_ON_ORCHESTRATOR_REQUEST_NO_HOLD: the orchestrator's request routes.BINDS_ON_MAP_NO_HOLD: the multi-agent plane.
-
Step names and tool names. A document can constrain a workflow or multi-agent step by
args.context.step__name, and a workflow tool step byargs.context.tool__name, read with aneqcomparison. A caller sets these labels, so a constraint on them applies only to requests that carry them. -
Group and OIDC scope (Enterprise).
- A policy scoped to a group applies to the group's members on the agent's enforcing planes, with membership read from the SCIM directory. A SCIM membership change takes effect on the user's next request.
- A user who signs in through your organization's OIDC identity provider is decided by policy. They were refused
unknown_realm. Policies can scope toUser::oidc:<sub>andGroup::oidc:<id>. - The orchestrator's planes do not yet state groups.
-
Store failures are answered as the store. When the typed-policy store is unreachable, publish, promote, rollback, withdraw and activation answer
503 storage_unavailable(orkey_not_loaded), instead of refusing your document. A store that disagrees with its own ledger answers503 ledger_inconsistent. The artifact list names an artifact it could not read, inunverifiable, instead of failing the page or dropping it. -
The policy summary counts installed policy packs.
GET /api/v1/typed-policies/active/summaryanswerspackandpacks_counted. -
A new route,
GET /api/v1/typed-policies/template, returns the shipped organization template to seed a document from.
Workflow and multi-agent steps
- Step content is decided. The workflow step gate presents a step's
step_input(andtool_inputfor a tool step), and the multi-agent plane presents a step's prompt, statement, parameters and what it sends.- The shipped content policies decide there. A step whose content asks to debug is blocked outside development, and a step comparing
tenant_idis blocked. - Bodies over 1 MiB are refused
413 request_too_large. - An idempotent step-gate retry whose input differs from the first is refused
409 STEP_INPUT_MISMATCH. - A policy of yours that reads a static detector on these planes now sees it as unknown, not false, because no static detector runs there.
- The shipped content policies decide there. A step whose content asks to debug is blocked outside development, and a step comparing
- Conditional branch steps are decided by their own type on workflow execute and plan execute outside
confirmandstepmode. - A multi-agent plan's LLM calls obey your route policies. A route policy set whose allowed providers intersect to nothing refuses the call
403 no_compliant_providerbefore any provider is contacted. This applies on/api/v1/process,/api/v1/plan/executeandPOST /api/v1/plan. It used to lift the restriction. - A multi-agent plan step has a cost estimate. The platform now prices the step it is about to run, from your deployment's own pricing table. The two shipped advisory "expensive query" policies act on it. Neither ever refuses a step.
- The in-memory multi-agent pause is retired. A multi-agent step is held only in
confirmorstepmode.GET /api/v1/workflows/executions/{id}/hitl-statusanswers404and is removed in v12.0.0.
Orchestrator request routes
POST /api/v1/process and POST /api/v1/plan/execute are decided under a plane of their own, orchestrator_request. wcp now means the workflow step gate alone, and binds_on can name either plane.
- A document you already published keeps governing what it governed. It records the vocabulary it was written against. When you republish it,
wcpmeans the step gate alone. - A policy that reads a detector applies only where that detector runs. Detectors such as the SQL-injection ones do not run on these routes, the step gate or the multi-agent plane. So a policy reading one there could not be evaluated, and refused every request whatever it contained. It now does not apply there. Traffic through the agent is unaffected. If you relied on such a policy to refuse requests on those planes, use a policy the plane can evaluate.
MCP and redaction
- check-input hands back masked parameters (Enterprise). MCP check-input and the MCP server's
check_policyreturn each masked request parameter inredacted_parameters. This happens when the enforcement point's capability handshake declaresfield_redactat versions 1 and 2. Under apii=redactposture, a tool call whose personal data sits in its arguments is then answered200with the masked arguments. Every other caller is refused403 unsupported_obligation, naming the parameter, as in v11.0.0./healthadvertisesfield_redact_parameters(since 11.1.0): an enforcement point that declaresfield_redact@2receives the masked parameters; a client can discover the capability before declaring it.
- The gateway adapters present the capability handshake by default. Under
pii=redact, a request carrying personal data through the MCP and LLM routes is now redacted instead of refused. This closes the v11.0.0 known issue for those two routes. The HTTP authorization route stays refused, because a seam that cannot rewrite a body cannot discharge a redaction. - MCP tier limits answer as tier limits. A
tools/calltier gate, and a credential past its organization's principal ceiling, answer403(or429withRetry-After) with the upgrade envelope. Before, they answered200or401.
Other changes
- Media.
- Local OCR text is scanned by the platform's PII detectors.
- Each
media_analysisitem carries ascannedarray listing what ran.has_pii: falseis a finding only whenpiiis listed.
- Cowork ingest (Enterprise). What cowork ingest stores is decided by the anchored engine. PII masking on this plane can no longer be weakened by an organization's settings. Content a pre-v11 custom PII policy masked is stored as sent, unless a typed policy or pack reads that detector. The audit row's
policy_details.legacy_detectionslists each such match. - Legacy policy routes. They now carry
X-AxonFlow-Removed-In: v12.0, and they keep answering throughout v11. The legacy tenant-policy export no longer drops rows by category: it returns the same rows as the list. The agent stamps the deprecation headers even on a request it refuses. - Compliance (Enterprise).
- The OJK, SEBI and US securities readiness reports count the policies in force on your organization.
- The SEBI audit export's violations section carries a Policy ID column.
- Fresh installs. The orchestrator catches up with migrations within about 2 seconds instead of up to 30, closing the v11.0.0 known issue. The agent's dev-token endpoint, which mints user tokens, is registered only on an explicit development signal:
ENVIRONMENTorDEPLOYMENT_KINDofdevelopment,devorlocal, orDEPLOYMENT_MODEcommunity. Aproductionorprodvalue always removes it. The shipped compose files setENVIRONMENT: development, so setENVIRONMENT=productionon the agent of any deployment that should not carry it. - Privacy. No customer portal log line carries a person's email.
Known limits
Enterprise, with the Fraud & Risk Add-on.
- Validate your fraud-context objects yourself: nothing validates them on this release. The
fincrime_transactionandfincrime_cohortobjects are matched as sent. A malformed value, such as anamountsent as a string or a merchant category code sent as a number, produces no detection and no error: the request looks accepted, and the control you expect does not match. The deterministic controls keep applying; the score-based control does not. Check every producer against the documented field formats before relying on the add-on. - The FinCrime approver pool is named, not enforced. A FinCrime hold names the
fincrime-approversgroup, but on this release any person your approval queue admits, other than the caller who raised the hold, can approve it. Limit who can reach your approval queue, or treat the group as documentation. Eligible-pool and quorum enforcement are v12.0.0. - The scoring service image is not in the standard install image set. During early access, obtain the scoring image and its model bundle through your AxonFlow contact.
Client versions
No client release is required by this platform release; the client versions current at publication are:
| Client | Version | Notes |
|---|---|---|
| Python SDK | 9.4.0 | |
| TypeScript / Go / Java SDK | 9.4.0 | |
| Rust SDK (preview) | 0.11.0 | |
| openclaw plugin | 2.9.1 | |
| Claude Code plugin | 1.13.0 | |
| Cursor plugin | 1.9.0 | |
| Codex plugin | 1.9.0 | |
| Claude Desktop proxy | 0.4.0 | |
| n8n node | 1.2.1 | |
| Google ADK plugin | 1.3.1 | /health and the API reference recommend 1.3.1; v11.0.0 recommended 1.3.0, which was never published. |
| LiteLLM integration | 1.1.0 |
Migrations
Four migrations run: three on every deployment and one on Enterprise.
core/186adds a unique index topolicy_metrics. It locks the table while it builds, and per-evaluation metric writes wait for that window, so check the table's size before you upgrade.core/188changes two columns of the approval queue toTEXT. It locks the approval queue while PostgreSQL rebuilds two indexes, and approvals can be neither read nor written during that time, which is about 1 second per 0.5 GB of the table. CheckSELECT pg_size_pretty(pg_total_relation_size('hitl_approval_queue'));before you upgrade.core/187records the first step of astep-mode plan in flight at the upgrade. It needs no action; until 187 has run, resuming such a plan answers 409.enterprise/161drops three identity-settings columns v11 already ignores. Upgrade every customer portal and every agent to v11 before v11.1.0's migrations run. A v10.x portal reads and writes those columns by name, so it fails to read an organization's identity settings once they are gone. A v10.x agent's per-organization settings read fails too, and it falls back. The migration's down restores the columns, but not their values.
What this release does not claim
policy_simulationandpolicy_testare still answered by the legacy dynamic-policy evaluator. The orchestrator'sPOST /api/v1/policies/simulate,/api/v1/policies/impact-reportand/api/v1/policies/conflicts, and itsPOST /api/v1/policies/test, evaluate legacy policy rows, so what they report can disagree with what the anchored engine enforces. v11.0.0 deferred these two operator tools to this release; they remain on the legacy evaluator. Both surfaces are deprecated, carryX-AxonFlow-Removed-In: v12.0, and are removed in v12.0.0. To preview a decision with the enforcing engine, use the Agent'sPOST /api/policies/test.
