-
Notifications
You must be signed in to change notification settings - Fork 133
Description
What happened?
Summary
gRPC errors from the SUT do not include google.rpc.ErrorInfo in the status details, which is required by the A2A specification for all A2A-specific errors.
Requirement
- ID: GRPC-ERR-001
- Section: 10.6 — A2A errors include ErrorInfo in status details
- Level: MUST
- Spec: https://github.com/a2aproject/A2A/blob/0833a5f5fd1b715519c0aecf9e3055e3f9f38089/docs/specification.md#106-error-handling
Specification
For A2A-specific errors, implementations MUST include a
google.rpc.ErrorInfomessage in thestatus.detailsarray with:
reason: The A2A error type in UPPER_SNAKE_CASE without the "Error" suffix (e.g.,TASK_NOT_FOUND)domain: Set to"a2a-protocol.org"metadata: Optional map of additional error context
Expected behavior
When the SUT returns an A2A-specific error (e.g., TaskNotFoundError), the gRPC response should include a google.rpc.Status with a google.rpc.ErrorInfo message in the details array, encoded in the grpc-status-details-bin trailing metadata. The ErrorInfo should have reason set to the error type in UPPER_SNAKE_CASE (e.g., TASK_NOT_FOUND) and domain set to "a2a-protocol.org".
Actual behavior
The SUT returns a plain gRPC NOT_FOUND status with a message string but does not include google.rpc.ErrorInfo in the status details. The grpc-status-details-bin trailing metadata is missing or does not contain an ErrorInfo entry.
Reproducer
# Trigger TaskNotFoundError by requesting a non-existent task
grpcurl -plaintext -d '{"id": "tck-nonexistent-task-001"}' \
localhost:9999 lf.a2a.v1.A2AService/GetTask
# Expected: gRPC NOT_FOUND with google.rpc.ErrorInfo in status.details:
# reason: "TASK_NOT_FOUND"
# domain: "a2a-protocol.org"
#
# Actual: gRPC NOT_FOUND without ErrorInfo in grpc-status-details-binTCK test
tests/compatibility/core_operations/test_error_handling.py::TestGrpcErrorStructure::test_grpc_error_for_nonexistent_tasktests/compatibility/grpc/test_status_codes.py::TestGrpcErrorInfo::test_error_info_in_status_details
Relevant log output
Code of Conduct
- I agree to follow this project's Code of Conduct