From efd539e8411a80a468a50321cd780c3fece69eaf Mon Sep 17 00:00:00 2001 From: Connor Moss Date: Thu, 22 Oct 2026 14:43:56 -0600 Subject: [PATCH] fix(compat): set last_updated when storing a task in v0.3 format --- src/a2a/compat/v0_3/model_conversions.py | 5 +++++ tests/compat/v0_3/test_conversions.py | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/a2a/compat/v0_3/model_conversions.py b/src/a2a/compat/v0_3/model_conversions.py index 9b3cc44f8..db8e43318 100644 --- a/src/a2a/compat/v0_3/model_conversions.py +++ b/src/a2a/compat/v0_3/model_conversions.py @@ -32,6 +32,11 @@ def core_to_compat_task_model(task: pb2_v10.Task, owner: str) -> TaskModel: artifacts=data.get('artifacts'), task_metadata=data.get('metadata'), protocol_version='0.3', + last_updated=( + task.status.timestamp.ToDatetime() + if task.status.HasField('timestamp') + else None + ), ) diff --git a/tests/compat/v0_3/test_conversions.py b/tests/compat/v0_3/test_conversions.py index 2801f7664..8ef95528a 100644 --- a/tests/compat/v0_3/test_conversions.py +++ b/tests/compat/v0_3/test_conversions.py @@ -1,6 +1,8 @@ import base64 import json +from datetime import datetime + import pytest from a2a.compat.v0_3 import types as types_v03 @@ -1963,6 +1965,18 @@ def test_task_db_conversion(): assert v10_restored.metadata == v10_task.metadata +def test_task_db_conversion_sets_last_updated(): + """The status timestamp becomes last_updated, as in the v1.0 model.""" + v10_task = pb2_v10.Task(id='task-123', context_id='ctx-456') + v10_task.status.timestamp.FromJsonString('2026-10-01T12:00:00Z') + + model = core_to_compat_task_model(v10_task, 'owner-789') + assert model.last_updated == datetime(2026, 10, 1, 12, 0) + + v10_task.status.ClearField('timestamp') + assert core_to_compat_task_model(v10_task, 'owner-789').last_updated is None + + def test_push_notification_config_db_conversion(): task_id = 'task-123' v10_config = pb2_v10.TaskPushNotificationConfig(