diff --git a/server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java b/server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java index fdc6ee11d..5f5d52523 100644 --- a/server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java +++ b/server-common/src/main/java/io/a2a/server/requesthandlers/DefaultRequestHandler.java @@ -1034,6 +1034,13 @@ private MessageSendSetup initMessageSend(MessageSendParams params, ServerCallCon task.id(), task.contextId(), messageContextId)); } + // Per spec CORE-SEND-002: Reject messages to tasks in terminal states + if (task.status().state().isFinal()) { + throw new UnsupportedOperationError(null, String.format( + "Cannot send message to task %s: task is in terminal state %s and cannot accept further messages", + task.id(), task.status().state()), null); + } + LOGGER.debug("Found task updating with message {}", params.message()); task = taskManager.updateWithMessage(params.message(), task);