a2aproject / a2aproject/a2a-tck

[Feat] Add applicability for prompt-dependent artifact/message scenarios

未關閉
#229 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視
主要語言
Python
星號
50
分支
40
平均合併
7 天 1 小時
30 天內合併 PR
1

描述

## Environment

- TCK repository: `a2aproject/a2a-tck`
- Tested commit: `5996b79f9cefa6fc390980e383e358a66fb9e49e`
- Level: `must`
- Transports: JSON-RPC and HTTP+JSON
- SUT: an A2A 1.0 narrow travel-search agent that requires exact dates, occupancy and a hard EUR
budget before it may create a priced result

## Reproduction

Run the unchanged official TCK against a conformant narrow agent that returns a typed
`input-required` task for the literal prompt `TCK artifact test`:

```text
uv run python run_tck.py --sut-host --transport jsonrpc --level must -v
uv run python run_tck.py --sut-host --transport http_json --level must -v
```

The same five compatibility tests fail on both transports:

```text
tests.compatibility.core_operations.test_artifacts.TestTextArtifact::test_task_has_text_artifact
tests.compatibility.core_operations.test_artifacts.TestFileArtifact::test_task_has_file_artifact
tests.compatibility.core_operations.test_artifacts.TestFileUrlArtifact::test_task_has_file_url_artifact
tests.compatibility.core_operations.test_artifacts.TestDataArtifact::test_task_has_data_artifact
tests.compatibility.core_operations.test_artifacts.TestMessageResponse::test_returns_message_with_text_part
```

All five tests send the same generic text, `TCK artifact test`. Their generated `messageId` values
use these scenario prefixes: `artifact-text`, `artifact-file`, `artifact-file-url`,
`artifact-data`, and `message-response`.

## Actual behavior

The SUT returns a valid A2A task in `input-required` state with typed missing-field details and a
text fallback. It does not invent travel inventory, dates, a budget, a file, a URL or an unrelated
artifact. Transport, Agent Card, content-type and normal task lifecycle checks pass.

Redacted response fragment, equivalent on both transports:

```json
{
"status": {
"state": "TASK_STATE_INPUT_REQUIRED",
"message": {
"parts": [
{
"data": {
"error": "MISSING_REQUIRED_FIELD",
"message": "exact input is required before searching",
"details": {
"missing": [
"checkin and checkout as exact ISO dates",
"hard EUR budget",
"one- or two-night duration"
]
}
}
}
]
}
},
"artifacts": []
}
```

At the pinned revision, the public test totals are:

- JSON-RPC: 58 passed, 5 failed, 172 skipped;
- HTTP+JSON: 54 passed, 6 failed, 175 skipped.

The additional HTTP+JSON failure is the separately reported streamed-error-body defect in
[issue #225](https://github.com/a2aproject/a2a-tck/issues/225), with a proposed fix in
[PR #226](https://github.com/a2aproject/a2a-tck/pull/226).

## Expected behavior

Protocol conformance should not require a domain-specific agent to fabricate the artifact or direct
message implied by a generic magic prompt. One of these applicability mechanisms would keep the
tests useful without weakening protocol checks:

1. allow the SUT manifest to declare unsupported scenario fixtures;
2. treat a valid `input-required` task as not applicable for these product-semantic scenarios;
3. make artifact/message fixtures opt-in capabilities rather than unconditional MUST expectations;
4. split protocol-shape validation from the prompt-dependent example SUT assertions.

The report does not request a waiver for malformed messages, invalid task states or broken
transports. It requests only a machine-readable applicability path for prompt-dependent product
semantics.

## Evidence hygiene

The minimal reproduction above contains no credential, provider payload, affiliate identifier,
private URL, personal data or customer prompt. Raw reports remain in the private CI artifact store.

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。