# What changed in a2a-sdk

> 20 changes in a2a-sdk 1 from its official release notes, upgrade guides and advisories: 2 breaking, 1 new APIs and options. Each one cited. Sources checked 2026-10-24. HTML: https://unstale.sh/pypi/a2a-sdk/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## a2a-sdk 1

### Breaking changes

- Open containers count toward the nesting bound, so an empty container leaf is refused. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- Push URLs in shared address space are rejected. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)

### New APIs and options

- SSE shutdown grace periods can now be configured. (1.2.2) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.2)

### Fixes and other changes

- The client ignores the patch version when preferring a 1.0 interface. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- The server releases the ActiveTask after a direct Message response. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- Malformed agent card parsing errors are normalized. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- The server warns when an AgentCard is missing required fields. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- Follow-up messages run in the sender's contextvars. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- For v0.3 JSON-RPC and REST, a history_length of 0 is treated as unlimited. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- Internal lifecycle events are marked done so a cancelled stream frees its producer. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- Push notification failures are isolated from the task lifecycle. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- trace_function alone decides a span's status. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- A v0.3 gRPC or REST send without configuration blocks. (1.2.3) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.3)
- An unset v0.3 history_length is now treated as unlimited. (1.2.2) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.2)
- Malformed JSON-RPC bodies no longer print a traceback to stderr. (1.2.2) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.2)
- Creating a push notification config now returns the stored id. (1.2.2) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.2)
- The client now handles REST error bodies that are not a google.rpc.Status. (1.2.2) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.2)
- Terminal-state errors now name the task state. (1.2.2) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.2)
- The conversion now keeps the timestamp and three other fields. (1.2.2) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.2)
- ListTasks page tokens now use keyset cursors. (1.2.1) — [release notes](https://github.com/a2aproject/a2a-python/releases/tag/v1.2.1)
