Repository navigation
A2A Conformance
pavelravvich edited this page Nov 11, 2026
·
5 revisions
The official A2A Technology Compatibility Kit (a2aproject/a2a-tck)
runs in CI against an AGBoss application (#811), as the job a2a-tck of ci.yml, and from a
checkout with node scripts/a2a-tck.mjs [--dir <work dir>] (needs uv; Python lives in the TCK's
own venv, uv sync --frozen).
-
The TCK: tag
1.0.0.alpha3, commit5daf0144b4a4adbdefb62180739b13c5bd7d8196, Python 3.12, the JSON-RPC transport (the only binding AGBoss 0.1.1 serves). Pinned inpackages/agboss/tests/a2a-tck/tck-expected.json. -
The agent: the conformance application
packages/agboss/tests/a2a-tck/tck.application.ts, served by the reala2aHttpListeneron127.0.0.1(tck-serve.ts). One exported skill — the TCK names none — whose paths end at a text finish, a DTO finish (adataartifact) or a pause its caller answers (INPUT_REQUIRED, a question role answered by the thread's owner), or fail with a coded error. The TCK tells its agent what to do by the messageId's prefix (tck-complete-task-<session>), which no workflow sees: a loopback adapter in front of the listener copies the prefix into a header, and the application's caller resolver gives it to the execution as a declaredExecutionContextfield. The message itself is passed on as it came. -
Two runs: the TCK as published, then with
tck-defects.patch, a fix of two TCK defects (below). Each run's requirements are checked againsttck-expected.json: a requirement that fails and is not listed there, one listed that passes, or one that does not pass with no reason named — or a reason that says another status — fails the job. Each run also pins its JSON-RPC test counts and the exact tests that fail, so a listed requirement fails for its reason only; a TCK that stops early, writes no report or runs no test, or an agent that dies during a run, fails it too. - An offline check of the agent itself is
tests/a2a-tck/tck-sut.test.ts(inmake check).
| Run | Tests passed | failed | skipped | MUST requirements passing |
|---|---|---|---|---|
| as published | 69 | 7 | 189 | 50 |
with tck-defects.patch
|
88 | 1 | 176 | 66 of 67 |
The tests skipped are the gRPC and HTTP+JSON variants (no such interface on the card), the push
notification methods (capabilities.pushNotifications: false), and requirements this TCK does not
automate (authorization, signed cards, binding equivalence, a client's version header). The job
prints every requirement that does not pass with its reason.
-
One messageId for different messages.
tck_id(prefix)is one id per session, so several MUST requirements (CORE-EXECUTION-MODE-001/002, CORE-MULTI-001a/002a/003, and the MAY CORE-MULTI-001/002) send the same messageId with other content — and the setup task of others (CORE-CANCEL-001/002, CORE-GET-001, CORE-SEND-002, CORE-MULTI-005/006, STREAM-SUB-001/002/003, CORE-HIST-002/003/004) reuses one too, so the TCK skips them. A message's id is unique (a2a.protoMessage.message_id): AGBoss deduplicates every messageId per tenant and owner and refuses one reused with other content (-32602) — the payment guarantee of A2A → §2, never relaxed for a test. The patch gives each call its own id. -
CORE-SEND-003 declares no expected error. Its text says a part of an unsupported media type
MUST be
ContentTypeNotSupportedError, and AGBoss answers-32005ContentTypeNotSupportedError(ErrorInforeasonCONTENT_TYPE_NOT_SUPPORTED); with noexpected_error, the TCK takes any error as a failure. The patch declares it.
- CORE-HIST-004 (MAY): no task history beyond the status message.
-
DM-MSG-001 (MUST): the conformance agent exposes a second skill,
tck-message-workflow-start, that answers with a directMessage(A2AReply.Message, "Direct message response"); the TCK names no skill, so the adapter (tck-serve.ts) names it in atck-message-response-*message'smetadata[A2A_SKILLS_EXTENSION].skill, and every other scenario runs the expose'sdefaultSkill, the task skill. 67 of 67MUSTrequirements pass — see A2A → direct replies.
-
DM-ART-001 (MUST), its file variants: the conformance agent answers
tck-artifact-filewith arawfile part andtck-artifact-file-urlwith aurlone (output.txt,text/plain), its finish's output aWorkflowFinishFileDtomade by theA2AFilesservice — see A2A → files.
-
GetExtendedAgentCardis-32004UnsupportedOperationError(CORE-CAP-003; was-32007). - The card has
Last-Modified(CARD-CACHE-003).
AGBoss
- Home
- Delivery Pipeline
- Architecture
- Configuration
- Environments
- Workflow — the paths
- Path scope
- Workflow as a step
- Parallel — quorums and arbiters
- Routing patterns
- Rollback — declared compensation
- Routers
- Guards
- CLI — agboss
- App — @Application and createApp
- Several instances
- Running on PostgreSQL
- Running on Redis
- Your own store
- Guarantees
- Guarantees across processes
- Payments
- Execution history
- Mesh Hub — agboss hub
- Health checks
- Metrics
- Autoscaling
- Deploying on Kubernetes
- Context and Authorization
- Testing
- The test split
- Suites and Comparisons
- Eval suites — @EvalSuite
- Components
- Naming
- Standard DTOs
- Examples: 01–08, flow-patterns
- Agents — the loop
- Model providers
- Tools
- Knowledge bases (RAG)
- A2A — agent to agent
- FinOps
- Tracing
- Observability
- Turns and evaluation
- Profiles and comparisons
- Pauses — pending, resume by id
- Pause seam
- Decisions (ADR)