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
Specification
For A2A-specific errors, implementations MUST include a google.rpc.ErrorInfo message in the status.details array 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-bin
TCK test
tests/compatibility/core_operations/test_error_handling.py::TestGrpcErrorStructure::test_grpc_error_for_nonexistent_task
tests/compatibility/grpc/test_status_codes.py::TestGrpcErrorInfo::test_error_info_in_status_details
Relevant log output
Code of Conduct
What happened?
Summary
gRPC errors from the SUT do not include
google.rpc.ErrorInfoin the status details, which is required by the A2A specification for all A2A-specific errors.Requirement
Specification
Expected behavior
When the SUT returns an A2A-specific error (e.g.,
TaskNotFoundError), the gRPC response should include agoogle.rpc.Statuswith agoogle.rpc.ErrorInfomessage in thedetailsarray, encoded in thegrpc-status-details-bintrailing metadata. TheErrorInfoshould havereasonset to the error type in UPPER_SNAKE_CASE (e.g.,TASK_NOT_FOUND) anddomainset to"a2a-protocol.org".Actual behavior
The SUT returns a plain gRPC
NOT_FOUNDstatus with a message string but does not includegoogle.rpc.ErrorInfoin the status details. Thegrpc-status-details-bintrailing metadata is missing or does not contain anErrorInfoentry.Reproducer
TCK 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_detailsRelevant log output
Code of Conduct