Skip to content

Final validation: Remote sub-tasks hear remote state changes between turns ​

Summarised from testing-plan.md § Verification results and the review rounds. The raw output is in the files beside this one.

Final validation evidence ​

The ticket's acceptance sketch comes first, then the EARS criteria.

Acceptance criterionHow it was provedWhere
Ticket: a remote sub-task that a third party completes or cancels while parked shows the new state on the parent's stream, with no message sent to itA third party cancels the remote task. The push reaches /a2a/push/<id>, the stand-in ends CANCELED, the parent's row shows CANCELED and its model is told, and the remote's model saw exactly one request.test_a_third_party_cancel_is_heard_through_push, integration.md
Ticket: the same against an agent without push support, through followA third-party completion is heard by following (updates = "follow"), and a cancel against a card without push (auto)test_without_push_the_stand_in_follows_and_hears_a_completion, test_a_card_without_push_is_followed
Ticket: a push with a wrong or missing token is refused and nothing changesMissing, wrong, unknown-id, TaskWorkflow-id, other-remote-task and ended-stand-in pushes: all 401, with no update or activity recorded and the state unchangedtests/security/test_remote_push.py, security.md
R1.1–1.3 register a push config with a 256-bit token at <base_url>/a2a/push/<local id>The URL is asserted from the remote's store, and push_url and the digest are unit-testedtest_a_third_party_cancel_…, test_push_receiver.py
R1.4 reconcile after registrationThe fetch is counted in historytest_pushes_during_a_turn_are_applied_after_it, the forged-push test
R1.5 a failed registration falls back to follow, without the token in logs or tracesScenario test, plus a unit test with an error carrying the token: no exported span, no log linetest_a_failed_registration_falls_back_to_follow, test_a_failed_registration_exports_no_span_and_logs_no_token
R1.6 X-Participant-Id on every remote callReplies, get, subscribe and push-config calls succeed against a tiny-harness peer, including a reply from a differently named local participant (red without the fix)test_a_reply_while_following_cancels_the_follow
R2.1–2.4 receive, verify, wake, fetch, relay only on changeReceiver unit tests (ordering and statuses). The forged push sends no child_done.test_push_receiver.py, test_a_forged_terminal_push_is_not_applied
R2.5 awaiting-next-message → COMPLETEDUnit testtest_remote_out.py
R2.6, R2.6a end on terminal; roll over while parkedThe cancel tests; a stand-in rolls over past history_event_bound and still hears a canceltest_a_long_parked_stand_in_continues_as_new
R2.7 parent noted only on terminal or interrupted statesA remote resumed by a third party: COMPLETED is noted and WORKING never istest_a_remote_resumed_by_a_third_party_wakes_the_model_only_at_its_end
R2.8 pushes during a turn are applied after itOne fetch after the turn, no rechecks, no WORKING notetest_pushes_during_a_turn_are_applied_after_it
R2.9 re-fetch while the fetch disagrees with the claimExactly four fetches for a forged claim; a failed last recheck keeps the stand-in alivethe forged-push test, test_a_fetch_failing_on_the_last_recheck_…
R3.1–3.4 follow, re-subscribe pacing, window bound, cancelled by a replyUnit tests of the activity (window, interval, non-remote agent); the reply cancels the follow (ACTIVITY_TASK_CANCEL_REQUESTED asserted); a redacted text does not spintest_follow_activity.py, test_a_reply_while_following_…, test_a_redacted_status_text_…
R4.1–4.5 updates and follow_intervalConfig unit tests; off keeps today's behaviourtest_config_agents.py, test_updates_off_keeps_todays_behaviour
R5.1–5.3 delete on every exit, a failed delete tolerated, later pushes refusedConfig gone after a cancel or terminal state; a failed delete still ends CANCELED; a push after the end is 401test_the_push_config_is_deleted_…, test_a_failed_cleanup_…, test_a_push_to_an_ended_stand_in_is_refused
Abuse cases 1–9One negative test eachsecurity-review.md, testing-plan.md T8
RegressionFull suite, 772 passedregression.md, unit.md, contract.md, static.md