Skip to content

[Bug]: Matrix cron announce lowercases room IDs and scheduled delivery fails #71798

@nickdecooman

Description

@nickdecooman

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

Matrix cron announce delivery stores the Matrix room ID lowercased when creating a scheduled job, so the agent generates the scheduled final message but delivery fails because Matrix room IDs are case-sensitive.

Steps to reproduce

  1. Run OpenClaw 2026.4.24 with the Matrix channel enabled.
  2. Use a Matrix room whose room ID contains uppercase characters, for example !AbCdEf1234567890:example.org.
  3. From that Matrix room, ask the agent to send a message in 1 minute.
  4. Observe that the immediate acknowledgement is sent to the correctly-cased Matrix room ID.
  5. Inspect the created cron job.
  6. Wait for the cron job to fire.

Expected behavior

The cron job should preserve the canonical Matrix room ID casing in sessionKey, sessionTarget, and especially delivery.to, or otherwise use preserved Matrix delivery metadata when sending. The scheduled final message should be delivered to the same Matrix room that received the immediate acknowledgement.

Actual behavior

The immediate acknowledgement is delivered successfully to the correctly-cased room ID.

The created cron job stores the same room ID lowercased in both sessionKey and delivery.to. When the cron job fires, the agent generates the final text, but Matrix delivery fails because Synapse rejects the lowercased room ID.

OpenClaw version

2026.4.24

Operating system

Linux 6.8.0-107-generic

Install method

Docker image based on ghcr.io/openclaw/openclaw:2026.4.24-amd64

Model

openai-codex/gpt-5.5

Provider / routing chain

OpenClaw -> openai-codex

Additional provider/model setup details

The model successfully generated the scheduled final text. The failure is in Matrix cron announce delivery, not model execution.

Logs, screenshots, and evidence

# Correctly-cased immediate acknowledgement delivery

setting pendingEvent status to encrypting in !AbCdEf1234567890:example.org event ID ~!AbCdEf1234567890:example.org:m<redacted>.1 -> undefined
setting pendingEvent status to sending in !AbCdEf1234567890:example.org event ID ~!AbCdEf1234567890:example.org:m<redacted>.1 -> undefined
setting pendingEvent status to sent in !AbCdEf1234567890:example.org event ID $<redacted> -> $<redacted>

# Created cron job stores lowercased Matrix room ID

{
  "id": "<redacted>",
  "agentId": "alpha",
  "sessionKey": "agent:alpha:matrix:channel:!abcdef1234567890:example.org",
  "sessionTarget": "session:agent:alpha:matrix:channel:!abcdef1234567890:example.org",
  "payload": {
    "kind": "agentTurn",
    "message": "Reminder message",
    "timeoutSeconds": 60
  },
  "delivery": {
    "mode": "announce",
    "to": "!abcdef1234567890:example.org",
    "channel": "matrix"
  }
}

# Cron run generated the final text but delivery failed

{
  "action": "finished",
  "status": "error",
  "error": "M_UNKNOWN: MatrixError: [500] non-create event for room of unknown version in !abcdef1234567890:example.org",
  "summary": "Ping - one minute's up.",
  "delivery": {
    "intended": {
      "channel": "matrix",
      "to": "!abcdef1234567890:example.org",
      "source": "explicit"
    },
    "resolved": {
      "ok": true,
      "channel": "matrix",
      "to": "!abcdef1234567890:example.org",
      "accountId": "default",
      "source": "explicit"
    },
    "fallbackUsed": true,
    "delivered": false
  }
}

Queue 'message' giving up on event ~!abcdef1234567890:example.org:m<redacted>.2

Impact and severity

Affected: Matrix users who use cron announce delivery from rooms with mixed-case Matrix room IDs.

Severity: High for scheduled reminders/cron announcements, because scheduled messages are generated but not delivered.

Frequency: Reproduced on repeated 1-minute reminder attempts from the same mixed-case Matrix room.

Consequence: Missed scheduled Matrix messages; failed one-shot jobs may retry unless removed or moved to failed delivery state.

Additional information

Related but not exact matches:

This report is specifically about cron job creation for Matrix announce delivery: delivery.to is already lowercased in the stored cron job before the scheduled run executes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions