No breaking change is announced. One is announced here at least 7 days before it takes effect.
| version | The spec's version is a whole number: the major release. It goes up only with a breaking change. |
| release | The spec's release (also the OpenAPI document's info.version and the MCP server's serverInfo.version) is MAJOR.MINOR.PATCH, and every release is an entry here. |
| major: breaking | A breaking change: something a client that follows the documented contract has to change for. An op, tool, field, enum value or allowlist row removed or renamed; a field's type, unit or meaning changed; a new required input; a refusal for an input the docs allowed; a documented limit tightened; a change to what a wallet is asked to sign or how, other than a widening, which rules.signing covers. Announced here at least 7 days before it takes effect: the entry carries the day it was announced and the day it takes effect, and the spec lists it under versioning.upcoming until then. |
| minor: additive | Additive and backward compatible: a new op, tool, optional input, answer field, x402 resource; a limit loosened; a refusal of something the docs never allowed. Logged the day it ships. |
| patch: fixes | Fixes and wording: nothing a client changes. Logged the day it ships. |
| security | A fix that closes a hole may ship at once, even where it would otherwise need notice. It is logged the day it ships, marked security, with what a client has to do. The one thing it never covers is a change that widens what a wallet can be asked to sign (signing): that goes by rules.signing, whatever its reason. |
| signing | Anything that widens what a wallet can be asked to sign is a major release, never shipped under the security exception: a new allowlist row (chainId, to, selector), a new spender on a row, a row that may send ETH or an approve row no longer bounded, a new template, and a new typed-data message or a wider domain, spender or recipient in one. Its entry carries a change of type signing that names the allowlist rows and typed-data strings it adds and records the owner's approval (approval: by, the reviewed change, the day). The entry is published here no later than the day it takes effect, with the day it was really announced, and none of it is on docs/tosign-allowlist.json before that day. There is no minimum wait. The typed data is the list's typedData: each message's domain, its types, and Permit2's spender, witness.to, tokens and deadline ceiling. Narrowing what a wallet is asked to sign (a row removed or tightened) is a breaking change under major. |
| your client | Ignore fields you do not know: additive changes never bump the major. Read versioning.upcoming in the spec (GET /api/agents?op=spec) or this feed to see a breaking change coming. A widening can take effect the day it is announced and asks nothing of you: check what you are asked to sign against docs/tosign-allowlist.json each time, and don't sign a row you haven't reviewed. |