Skip to content

fix: Reject messages to tasks in terminal states#760

Open
kabir wants to merge 1 commit intoa2aproject:mainfrom
kabir:issue-741
Open

fix: Reject messages to tasks in terminal states#760
kabir wants to merge 1 commit intoa2aproject:mainfrom
kabir:issue-741

Conversation

@kabir
Copy link
Collaborator

@kabir kabir commented Mar 17, 2026

Per A2A spec CORE-SEND-002, SendMessage must return UnsupportedOperationError when attempting to send messages to tasks in terminal states (completed, canceled, rejected, failed).

Added validation in DefaultRequestHandler.initMessageSend() to check if the existing task is in a terminal state (using TaskState.isFinal()) and throw UnsupportedOperationError before the message reaches the AgentExecutor.

This fixes the issue on all three transports (JSON-RPC, gRPC, HTTP+JSON) since they all use the same DefaultRequestHandler code path.

Fixes #741 🦕

Per A2A spec CORE-SEND-002, SendMessage must return UnsupportedOperationError
when attempting to send messages to tasks in terminal states (completed,
canceled, rejected, failed).

Added validation in DefaultRequestHandler.initMessageSend() to check if the
existing task is in a terminal state (using TaskState.isFinal()) and throw
UnsupportedOperationError before the message reaches the AgentExecutor.

This fixes the issue on all three transports (JSON-RPC, gRPC, HTTP+JSON) since
they all use the same DefaultRequestHandler code path.

Fixes a2aproject#741

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a requirement from the A2A specification (CORE-SEND-002) that prohibits sending messages to tasks that have reached a terminal state. It implements a check within the DefaultRequestHandler to ensure that an UnsupportedOperationError is thrown when such attempts are made, maintaining consistency across different transport protocols.

Highlights

  • Spec Compliance: This PR enforces the A2A spec CORE-SEND-002, ensuring that SendMessage returns an UnsupportedOperationError when attempting to send messages to tasks in terminal states.
  • Validation Implementation: Validation was added in DefaultRequestHandler.initMessageSend() to check if a task is in a terminal state using TaskState.isFinal().
  • Transport Consistency: The fix applies uniformly across all three transports (JSON-RPC, gRPC, HTTP+JSON) via the shared DefaultRequestHandler code path.
Changelog
  • DefaultRequestHandler.java
    • Added validation to prevent sending messages to tasks in terminal states, throwing an UnsupportedOperationError if attempted.
Activity
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@kabir
Copy link
Collaborator Author

kabir commented Mar 17, 2026

Duplicate of #746

@kabir kabir marked this as a duplicate of #746 Mar 17, 2026
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request correctly implements the A2A spec requirement to reject messages sent to tasks in terminal states. The change is straightforward and placed in the correct location within DefaultRequestHandler.

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.

[Bug]: It must not be possible to send a message to a task is in a terminal state

1 participant