Skip to content

Rejoinability of (empty) rooms the local server has left is not well-defined #2415

Description

@tulir

Link to problem area: https://spec.matrix.org/v1.19/server-server-api/#joining-rooms

Issue
The first paragraph of the joining rooms spec says that the remote join handshake must be used "When the homeserver does not yet know about the room". One could interpret that to mean that servers can use local joins for rooms they've left, but still have in their local database.

In practice, all server implementations already use the remote join handshake if they don't have local members in the room, which means empty rooms can't be joined, as servers also refuse /make_join requests if they don't have local members.

In my opinion, the spec should define that rooms which the local server has no members in must be joined with a remote join handshake and must not accept inbound /make_join requests. It should also explicitly state that empty rooms are unjoinable as a consequence those two things (must use the remote join handshake + nobody will accept the remote join handshake = unjoinable room).

Alternatively, the spec could just state that local joins are always allowed (if the auth rules allow it) at the risk of creating forks. I don't think that's a good idea though as it could lead to very confusing situations.

Prior discussion in matrix-org/complement#843

Metadata

Metadata

Assignees

No one assigned

    Labels

    clarificationAn area where the expected behaviour is understood, but the spec could do with being more explicit

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions