Deploy the adapter fix and document the four outcomes

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Stéphane Tailland
2026-08-31 14:39:25 +02:00
parent 6eb77d862f
commit ed99334201
2 changed files with 20 additions and 1 deletions
+19
View File
@@ -42,3 +42,22 @@ completed task is the wrong shape for "a human has to look at this".
One skill per instance, deliberately. A second one is a card change, which is
the moment to ask whether the agent has quietly become a data proxy.
## Four outcomes, and only one of them completes
HTTP 200 from n8n does not mean the workflow answered. It returns 200 with an
**empty body** when a node throws before the Respond node runs — a refused token
exchange is the common way in. The adapter used to read that as a completed task
carrying "(the workflow returned nothing)", which told the caller the task had
succeeded: the one thing certainly false.
| `Outcome` | A2A task state |
|---|---|
| `ANSWERED` — the contract, `escalate: false` | `completed` |
| `ESCALATED` — the contract, `escalate: true` | `failed` |
| `SILENT` — 200 with an empty body | `failed` |
| `OFF_CONTRACT` — a body that is not `{"answer", "escalate"}` | `failed` |
Off contract is returned **raw** so a workflow that has drifted is visible — but
never as agreement. Escalation is `failed` for the older reason: an autonomous
agent meeting a rule that needs approval must fail cleanly, never decide.