a2aproject / a2aproject/a2a-java

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

オープン
#731 コメント 0 件 リアクション 0 件 担当者 1 名 @kabir が担当を希望しています GitHub で見る
compatibility gRPC
主要言語
Java
スター
490
フォーク
172
平均マージ
1日 6時間
マージ済み PR(30日)
55

説明

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

コントリビューションガイド

コントリビューションガイドを開く

評価

この issue はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。