From the salesagent v3.12 → 4.x migration (SDK_FEEDBACK.md, item #5).
MIGRATION_v3_to_v4.md says:
a2a.utils.errors.ServerError → a2a.types.A2AError
a2a.types.DataPart → a2a.types.MessagePart
In a2a-sdk==1.0.1, none of those replacement targets exist:
A2AError does not exist (only A2ARequest)
MessagePart does not exist (only Part)
a2a.server.apps (whole submodule path) does not exist
Adopter outcome:
salesagent/src/a2a_server/ is hand-rolled against a2a-sdk 0.3 and won't run on 1.0+. The migration guide pointed at replacements that also don't exist, so I gated the whole module behind an A2A_LEGACY_AVAILABLE flag and skipped 6 unit-test modules. The migration target for these is adcp.server.serve(transport="a2a") — but that's not what the guide says.
Proposal
Either:
- Regenerate the a2a-sdk migration section against the current 1.0.x pin (correct symbol names), OR
- Better: point readers directly at
adcp.server.serve(transport="a2a") and explicitly acknowledge that hand-rolled a2a-sdk 0.3 servers don't have a mechanical migration path.
Option 2 is more honest about adopter reality. Option 1 still helps adopters who wrote against a2a-sdk directly rather than via our serve().
Acceptance
A salesagent-shaped adopter (hand-rolled 0.3 server) reads the guide and lands on a clear path: "delete the hand-rolled server, use adcp.server.serve(transport='a2a')."
From the salesagent v3.12 → 4.x migration (
SDK_FEEDBACK.md, item #5).MIGRATION_v3_to_v4.mdsays:In
a2a-sdk==1.0.1, none of those replacement targets exist:A2AErrordoes not exist (onlyA2ARequest)MessagePartdoes not exist (onlyPart)a2a.server.apps(whole submodule path) does not existAdopter outcome:
Proposal
Either:
adcp.server.serve(transport="a2a")and explicitly acknowledge that hand-rolled a2a-sdk 0.3 servers don't have a mechanical migration path.Option 2 is more honest about adopter reality. Option 1 still helps adopters who wrote against
a2a-sdkdirectly rather than via ourserve().Acceptance
A salesagent-shaped adopter (hand-rolled 0.3 server) reads the guide and lands on a clear path: "delete the hand-rolled server, use
adcp.server.serve(transport='a2a')."