DELEGATION · JOIN CONTRACT
Delegation contract: join only successful artifacts
Delegate a price lookup to three regional sub-agents and decide which returned artifacts a coordinator may join into one answer.
Your experiment
EU completes, US fails, and APAC is still working when the coordinator joins at 20 seconds. The join takes any artifact in the store, which still holds yesterday’s US price. Check what the published price contains, then require completed tasks or the current run id, move the deadline and allow a follow-up.
Play replays the computed run over sixty inspection seconds; Next event steps, Restart rewinds, and Inspection time scrubs. Any input change recomputes the run and rewinds it without autoplay.
Event trace
Computed data
Final metrics
Deterministic fixture: three sub-agents with fixed completion times (EU 8 s, US fails at 12 s, APAC 25 s) and prices; the store keeps US 97.5 from run r41 because a failed task writes nothing new. The joined value is a plain average. No A2A server, ADK ParallelAgent or model is called; real sub-agents report richer task states and partial artifacts.
Three sub-agents and one stale artifact
Coordinator run r42 delegates the same price lookup to three regional sub-agents. EU completes at 8 seconds with price 102, US fails at 12 seconds, and APAC completes at 25 seconds with price 110. A failed task writes no new artifact, so the shared artifact store still holds US price 97.5 from yesterday’s run r41. The coordinator joins at the Join deadline and publishes the average of the artifacts it accepts. The question is which artifacts a join may trust: presence in the store, task state, or provenance.
The opening run: yesterday’s price in today’s answer
The join rule takes any artifact found in the store, with a 20-second deadline and a quorum of 2. At 20 seconds the store holds EU 102 (r42) and US 97.5 (r41); APAC has not finished. Two artifacts meet the quorum, so the coordinator publishes (102 + 97.5) / 2 = 99.75. The US task failed, yet its old artifact was joined as today’s result. Nothing reports an error: the failure is a wrong answer delivered on time.
Failure boundary: state and run id
Choose Only completed tasks: at 20 seconds only EU qualifies, the quorum of 2 is not met and the result is held. Move Join deadline to 25 seconds and APAC completes in time, so EU and APAC give 106. Keeping any artifact but checking Artifact must carry this run’s id (r42) rejects the US artifact the same way (held at 20 seconds, 106 at 25). Lower Minimum artifacts to publish to 1 and Only completed tasks publishes EU’s 102 alone at 20 seconds. Every task must complete fails the join outright because US failed, at any deadline.
Late results and the follow-up
With Only completed tasks and Late results set to Publish a follow-up update, the 20-second join is held, then APAC completes at 25 seconds, the quorum of 2 is met, and the coordinator publishes 106 as a follow-up. With a quorum of 1 the coordinator first publishes 102 and the follow-up corrects it to 106. Ignore after the join discards APAC’s result. Late results only matter when the deadline falls before 25 seconds; with any-artifact joins the follow-up would still carry the stale US price.
Reading the run and its limits
Play replays the delegation, each sub-agent result, the join, any late results and the outcome over sixty inspection seconds; Next event, Restart, Speed and Inspection time control the replay, and any input change recomputes it. The table shows each sub-agent’s state at the join, the artifact in the store and the join decision. Times, prices and run ids are fixtures; there is no A2A server, ADK ParallelAgent or retry of the failed region here. Real coordinators also need cancellation of abandoned work and a record of which inputs produced each published answer.