Skip to content

fix(compat): return HTTP errors from v0.3 REST streams that fail early - #1403

Merged
Iwaniukooo11 merged 2 commits into
a2aproject:mainfrom
jaeminbird:fix/v03-rest-stream-bad-body
Nov 2, 2026
Merged

Iwaniukooo11 merged 2 commits into
a2aproject:mainfrom
jaeminbird:fix/v03-rest-stream-bad-body

Conversation

@jaeminbird

Copy link
Copy Markdown
Contributor

Description

The v0.3 REST adapter starts the SSE response before the handler runs, so any error raised before the first event becomes an empty 200 text/event-stream: a malformed message:stream body (even {bad), or tasks/{id}:subscribe for an unknown task. message:send answers 400 for the same body, and the v1.0 routes answer 400/404.

_handle_streaming_request now fetches the first event before creating the response, as RestDispatcher._handle_streaming already does, so @rest_stream_error_handler maps these errors to the usual JSON error. Mid-stream behaviour is unchanged. Follow-up to #1401, which noted this as a separate problem.

  • New tests (malformed message:stream → 400, unknown-task subscribe → 404, events still streamed in order) fail on main and pass with the fix.

  • scripts/lint.sh and uv run pytest on Linux pass.

  • Follow the CONTRIBUTING Guide.

  • Make your Pull Request title in the https://www.conventionalcommits.org/ specification.

  • Ensure the tests and linter pass

  • Appropriate docs were updated (not needed)

The v0.3 REST adapter started the SSE response before running the
handler, so a malformed message:stream body or an unknown task on
tasks/{id}:subscribe produced an empty 200 text/event-stream. Fetch the
first event before starting the stream, as the v1.0 REST dispatcher
does, so these errors get the same JSON error response as message:send.
@jaeminbird
jaeminbird requested a review from a team as a code owner October 29, 2026 09:54
@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

🧪 Code Coverage (vs main)

⬇️ Download Full Report

Base PR Delta
src/a2a/compat/v0_3/rest_adapter.py 77.14% 78.05% 🟢 +0.91%
Total 93.42% 93.42% 🔴 -0.01%

Generated by coverage-comment.yml

@Iwaniukooo11 Iwaniukooo11 self-assigned this Oct 30, 2026

@Iwaniukooo11 Iwaniukooo11 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@Iwaniukooo11
Iwaniukooo11 merged commit 11f1116 into a2aproject:main Nov 2, 2026
17 checks passed
Linux2010 added a commit to Linux2010/a2a-python that referenced this pull request Nov 2, 2026
a2aproject#1403 is an error-handling divergence on the v0.3 REST surface rather than a
field-mapping one, so describe it as the second shape the same gRPC-vs-
JSON-RPC/REST split produces instead of implying it dropped a field.

Signed-off-by: andy <linux2011@qq.com>
@jaeminbird
jaeminbird deleted the fix/v03-rest-stream-bad-body branch November 3, 2026 05:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants