Asynchronous artifact delivery¶
A2A stream event lifecycle order + replay 30–45 minutes
An A2A task streams artifact revisions to a subscriber. The exercise asks how the consumer behaves when valid events are missing, duplicated, or released in a different order.
| Recipe | Value |
|---|---|
| Pause | task and artifact stream events |
| Attack | drop revision 1; replay revision 2 twice |
| Control | release every event once in original order |
| Receiver proof | subscriber history |
| Out-of-band proof | idempotency ledger |
rev 1 / rev 2 AIT
batch queue Release
2 / 2 Subscriber
history Idempotency
ledger
Start and identify the stream¶
Trigger traffic. Several correlated events should pause. Inspect their task, context, artifact, revision, and sequence metadata before deciding anything. Correlation is what distinguishes a lifecycle test from a bag of unrelated messages.
Run the ordered control first¶
Select the complete event set and release every event once in original order. Record the requested and actual release order from the deposited receipt, then inspect subscriber history and idempotency state.
This control establishes the consumer's normal lifecycle. It also catches an incorrect assumption about which event is revision 1.
Run the missing-and-duplicate variant¶
- Trigger the exercise again in the same session.
- Drop artifact revision 1.
- Replay revision 2 twice, or select it for multiple release copies.
- Release any task status events according to the exercise recipe.
- Inspect subscriber history in arrival order.
- Inspect the idempotency ledger by artifact and event ID.
Keep requested order, actual release order, and observed subscriber order separate. If they differ unexpectedly, the transport or receiver may be adding behavior outside the operator's decision.
Variants worth isolating¶
| Variant | Question | Proper control |
|---|---|---|
| drop revision 1 only | can the subscriber accept a later revision without its predecessor? | release both once in order |
| replay revision 2 only | is processing idempotent by event or revision identity? | release revision 2 once |
| release 2 before 1 | does arrival order override revision semantics? | release 1 then 2 |
| duplicate task status | is lifecycle state idempotent outside artifacts? | one status delivery |
Do not combine all variants into one finding. They exercise different receiver properties and need different comparisons.
Evidence boundary¶
Subscriber history proves delivered order as observed by the controlled consumer. The idempotency ledger proves processing count. It does not establish a timing race: this lab controls order deterministically and makes no claim about scheduler timing.
Done when¶
You can reconstruct the original event sequence, every operator decision, the actual release sequence, subscriber arrival order, and per-event processing count.
Next: MCP tool result returns to a request/response pair and changes structured data consumed by a client.