Workflow failed with ProtocolMessageCommand referenced absent message ID

Hello,

I have a long running workflow, that accepts updates during its lifespan. If there are no updates for 24 hours, it completes after cleaning up some resources.

Everything has been working fine, I ran several successful workflows for weeks now.

However, today when I checked a workflow, I observed that it was still “In progress” beyond the 24 hour TTL window, and there were no update requests.

I did reset it, and I observed the error message:

BadUpdateWorkflowExecutionMessage: ProtocolMessageCommand referenced absent message ID ab45ca15-91ad-4a0f-b965-4dde220f247d/request/accept

I looked back in the event history, and there is indeed one successfully completed update with this message ID.

This is the JSON of the fail event:

{
  "eventId": "59",
  "eventTime": "2025-09-25T13:12:18.739544055Z",
  "eventType": "WorkflowTaskFailed",
  "taskId": "260071077",
  "workflowTaskFailedEventAttributes": {
    "scheduledEventId": "57",
    "startedEventId": "58",
    "cause": "WORKFLOW_TASK_FAILED_CAUSE_BAD_UPDATE_WORKFLOW_EXECUTION_MESSAGE",
    "failure": {
      "message": "BadUpdateWorkflowExecutionMessage: ProtocolMessageCommand referenced absent message ID ab45ca15-91ad-4a0f-b965-4dde220f247d/request/accept",
      "serverFailureInfo": {}
    },
    "identity": "-"
  },
  "links": []
}

and this is the JSON of the successful update event (that precedes the error by more than a day):

{
  "eventId": "21",
  "eventTime": "2025-09-23T14:44:09.077606244Z",
  "eventType": "WorkflowExecutionUpdateAccepted",
  "taskId": "259064694",
  "workflowExecutionUpdateAcceptedEventAttributes": {
    "protocolInstanceId": "ab45ca15-91ad-4a0f-b965-4dde220f247d",
    "acceptedRequestMessageId": "ab45ca15-91ad-4a0f-b965-4dde220f247d/request",
    "acceptedRequestSequencingEventId": "18",
    "acceptedRequest": {
      "meta": {
        "updateId": "ab45ca15-91ad-4a0f-b965-4dde220f247d",
        "identity": "-"
      },
      "input": {
        "name": "update_function_name"
      }
    }
  },
  "links": []
}

Does this indicate that for some reason the update message was cleaned up from the Temporal database? That would be odd - 1 day is a very short retention period, and I’ve been running workflows that completed successfully after 25-26 hours.

I’m using the Python SDK, but this seems to be unrelated to it.