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
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_joinrequests 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_joinrequests. 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