openclaw - 💡(How to fix) Fix [Bug]: Matrix cron announce lowercases room IDs and scheduled delivery fails [1 comments, 2 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#71798Fetched 2026-04-26 05:08:12
View on GitHub
Comments
1
Participants
2
Timeline
2
Reactions
0
Timeline (top)
closed ×1commented ×1

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.

Error Message

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

Root Cause

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.

Code Example

# 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
RAW_BUFFERClick to expand / collapse

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:

  • #57321 covers lowercased Matrix room IDs in delivery recovery.
  • #63828 covers lowercased Matrix room IDs in ACP thread-bound routing.
  • #25318 covers Matrix cron explicit delivery routing to the wrong room.

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.

extent analysis

TL;DR

The issue can be fixed by preserving the original casing of the Matrix room ID when creating a scheduled job for cron announce delivery.

Guidance

  • Verify that the Matrix room ID is being lowercased when creating the cron job by checking the sessionKey and delivery.to fields in the job data.
  • Update the code to preserve the original casing of the Matrix room ID when creating the cron job, ensuring that sessionKey and delivery.to fields match the original room ID casing.
  • Test the fix by running the same steps to reproduce the issue and verifying that the scheduled message is delivered to the correct room.
  • Consider updating the related issues (#57321, #63828, #25318) to ensure that the fix is applied consistently across the codebase.

Example

No code snippet is provided as the issue does not include specific code details, but the fix would involve updating the cron job creation logic to preserve the original casing of the Matrix room ID.

Notes

The issue is specific to Matrix rooms with mixed-case IDs and cron announce delivery, so the fix should be targeted to this specific use case.

Recommendation

Apply a workaround to preserve the original casing of the Matrix room ID when creating cron jobs for announce delivery, as this is a high-severity issue that affects scheduled reminders and cron announcements.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

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.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix [Bug]: Matrix cron announce lowercases room IDs and scheduled delivery fails [1 comments, 2 participants]