Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/spec/instrument/specification.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ A worked example appears in [ACS in Action](../../topics/ACS_in_action_example.m
| Wrapped methods | `protocols/MCP/*` is the canonical v0.1 namespace for MCP wrapping (e.g. `protocols/MCP/tools/call`). The `wrapped:` prefix is an alternative explicit-version form for deployments that pin a specific protocol version on the wire (e.g. `wrapped:mcp-2025-06-18/tools/call`). Both are valid; `protocols/*` is preferred. A2A wrapping deferred to v0.2. |
| Error code range | `-32000` to `-32099` reserved for ACS |
| Response shape | Discriminated union: `{ "type": "final", ... }` |
| Forward compat | Accept `X.Y.Z` matching major version; ignore unknown fields |
| Forward compat | Accept `X.Y.Z` with a matching major version. While the major version is 0, require a matching `X.Y` and accept any patch. Ignore unknown fields. |

Streaming and notifications are not supported in v0.1.0. Batching is permitted as standard JSON-RPC 2.0 — Guardians SHOULD accept array-shaped requests and return an array of correlated responses, but ACS does not add atomicity, ordering, or cross-request dependency semantics in v0.1. Each request in a batch is evaluated independently, in declared order, with each carrying its own `request_id` and (if signed) its own signature. A Guardian that does not support batching MUST return `-32600 Invalid Request` for array-shaped inputs so the Observed Agent can fall back to sequential requests.

Expand Down Expand Up @@ -479,7 +479,7 @@ Every mandated refusal maps to a fixed code, so an SDK can branch on the code wi
| Code | Name | Raised when | Observed Agent recovery |
|---|---|---|---|
| `-32000` | `SESSION_REFUSED` | Guardian policy refuses the session and no more specific code applies (for example an `agent_id` the policy does not permit). | Do not retry without a policy or configuration change; read `data.reason`. |
| `-32001` | `UNSUPPORTED_VERSION` | No common `acs_version` at handshake (§4). | Retry the handshake with a version from `data.supported_versions`. |
| `-32001` | `UNSUPPORTED_VERSION` | No common `acs_version` at handshake (§4), or a step whose `params.acs_version` is not the session's `negotiated_version`. | Retry the handshake with a version from `data.supported_versions`, or send the session's `negotiated_version`. |
| `-32002` | `PROVENANCE_REQUIRED` | Policy requires provenance but the client declared `provenance_producer: "none"` (§4, §7). | Re-handshake as a `deterministic` producer, or connect to a Guardian that does not require provenance. |
| `-32003` | `CAPABILITY_NOT_NEGOTIATED` | A method or profile was exercised that the handshake did not negotiate for this session (§4). | Re-handshake to negotiate the method or profile named in `data.method`. |
| `-32004` | `SIGNATURE_INVALID` | A required signature is missing, malformed, or fails verification (§10). | Re-sign the request; if it persists, re-resolve `key_id`. |
Expand Down
2 changes: 1 addition & 1 deletion specification/v0.1.0/handshake.json
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@
"negotiated_version": {
"type": "string",
"pattern": "^\\d+\\.\\d+\\.\\d+$",
"description": "Version selected by the Guardian from the client's acs_versions_supported. MUST match the client's major version."
"description": "Version selected by the Guardian from the client's acs_versions_supported. MUST satisfy the Forward compat rule in Specification §3."
},
"methods_evaluated": {
"type": "array",
Expand Down
Loading