a2aproject / a2aproject/a2a-java

[Bug]: gRPC errors do not include google.rpc.ErrorInfo

Abierto
#731 0 comentarios 0 reacciones 1 asignado Reclamado por @kabir Ver en GitHub
compatibility gRPC
Lenguaje dominante
Java
Estrellas
490
Forks
172
Merge medio
1 d 6 h
PR fusionados (30 d)
55

Descripción

### 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.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

```bash
# 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

```shell

```

### Code of Conduct

- [x] I agree to follow this project's Code of Conduct

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.