Shadow failure case

Cancel reports success but writes no terminal state (DefaultRequestHandlerV2)

Artifact cancel-reports-success-but-writes-no-terminal-state-c7f2e65d71 · generated 2026-08-10T21:31:14.176038+00:00 · source: a2aproject/a2a-python #1170

This is the automatic first artifact from a falsification-bounty submission. It is redacted and public-safe by default; the next step is to turn the failure into a reusable proof, guardrail, or diagnosis.
Request private audit Follow the failure feed

Observed agent action

DefaultRequestHandlerV2 returns normally from cancellation while the task remains WORKING or INPUT_REQUIRED indefinitely.

Expected boundary

At the on_cancel_task return boundary, normal success must persist CANCELED, otherwise the handler must raise TaskNotCancelableError.

Runtime context

The failure occurs with a cleanup-only executor whose cancel method emits no status event, both during active execution and after parking for input.

Evidence supplied

The issue reports WORKING forever after mid-run cancellation and an unchanged INPUT_REQUIRED task after parked cancellation, while V1 enforced ordering and a canceled-state post-check.

Evidence needed next

Commercial routing

Use the public artifact for broadly useful redacted failures; use the private audit path when the evidence is sensitive or the operator needs a concrete fix, guardrail, or receipt proof.

Next proof step

Convert the submitted failure into the smallest reusable control: a deterministic guardrail, receipt proof, public autopsy entry, or private diagnosis if evidence is sensitive.