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.
Summary
The Matrix plugin's startup validator for
channels.matrix.groupskeys rejects current-format Matrix room IDs — the ones with no:serversuffix that modern homeservers issue — and silently empties the room-admission list, logging one line at startup and nowhere else.config getthen 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):
Startup logs:
…and the room is not admitted: messages in it are dropped exactly as if no entry existed. Meanwhile
openclaw config get channels.matrix.groupsreturns 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
groupsby alias instead. We created#room-alias:serveraliases for the affected rooms and startup resolves them correctly: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
groupsentry, on a modern homeserver, gets a config that reads back as applied and does nothing.config getreflecting entries that the runtime discarded makes the failure look like a dispatch bug rather than a validation bug — that is precisely the wrong-side-of-the-boundary chase we went through in [Bug]: Inbound Matrix room messages are never dispatched — zero log output at debug, while DMs on the same account work #122637.Suggested fix: accept
!localpartroom 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 throughconfig validateand doctor rather than only at startup.