Skip to content

[Bug]: Matrix groups validator rejects modern (server-less) room IDs, silently emptying the admission list while config get reads them back as live #122739

Description

@rocket-turkey

Summary

The Matrix plugin's startup validator for channels.matrix.groups keys rejects current-format Matrix room IDs — the ones with no :server suffix that modern homeservers issue — and silently empties the room-admission list, logging one line at startup and nowhere else. config get then reads the ignored entries back as if they were live.

Version: OpenClaw 2026.7.1 (2d2ddc4), homeserver Continuwuity.

This is the tail of #122637 (closed, correctly, as missing room admission): when we then added the admission entries the close asked for, keyed by real room IDs, they were discarded at load.

Reproduction

Configure a group entry keyed by a room ID as issued by a modern homeserver (no server part):

channels: { matrix: { groups: { "!kyPsk-bXS5fEmaIzUxZHgs6QVNyVjlbTSjy_ZkN48Ss": {} } } }

Startup logs:

[matrix] rooms unresolved: !kyPsk-bXS5fEmaIzUxZHgs6QVNyVjlbTSjy_ZkN48Ss
[matrix] rooms must be room IDs or aliases (example: !room:server or #alias:server). Unresolved entries are ignored.

…and the room is not admitted: messages in it are dropped exactly as if no entry existed. Meanwhile openclaw config get channels.matrix.groups returns the entry, so the configuration reads as applied.

These IDs are not malformed. Newer room versions use server-less room IDs, and homeservers in the wild (Continuwuity here) issue them for ordinary rooms. The example format in the log (!room:server) is the legacy shape.

Workaround

Key groups by alias instead. We created #room-alias:server aliases for the affected rooms and startup resolves them correctly:

[matrix] rooms resolved: #forge-courier-runs:example.org→!kyPsk-bXS5fEmaIzUxZHgs6QVNyVjlbTSjy_ZkN48Ss

With the alias-keyed entries, group admission works end to end (verified live: mention-gated dispatch, ack reaction, agent reply in the room).

Why this deserves fixing rather than documenting

Suggested fix: accept !localpart room IDs with no server part as exact IDs (they cannot be resolved, only matched verbatim, which is all admission needs), or at minimum surface the discarded-entry warning through config validate and doctor rather than only at startup.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1High-priority user-facing bug, regression, or broken workflow.clawsweeper:linked-pr-openClawSweeper found an open linked pull request for this issue.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.clawsweeper:source-reproClawSweeper found a high-confidence source-level issue reproduction.impact:message-lossChannel message delivery can be lost, duplicated, or misrouted.impact:ux-frictionUser-facing flow adds avoidable confusion or support burden without fully blocking progress.issue-rating: 🦞 diamond lobsterVery strong issue quality with high-confidence source-level or clear reproduction.

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions