-
Notifications
You must be signed in to change notification settings - Fork 392
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
MSC4106: Join as Muted #4106
Draft
FSG-Cat
wants to merge
4
commits into
matrix-org:main
Choose a base branch
from
FSG-Cat:FSG-Cat-Join-As-Muted
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
MSC4106: Join as Muted #4106
Changes from all commits
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
# MSC4106: Join as Muted | ||
|
||
## Introduction | ||
|
||
Currently Matrix lacks the ability to implement proper membership screening mechanisms. This is | ||
due to being unable to use power levels based screening, see | ||
[MSC3909](https://github.com/matrix-org/matrix-spec-proposals/pull/3909) and | ||
[MSC3907](https://github.com/matrix-org/matrix-spec-proposals/pull/3907) for a description of | ||
the problems. | ||
|
||
This proposal aims to by extending MSC3909 solve this problem as membership screening is a function that | ||
is desired by some end users. Stakeholders like The Draupnir Project that the Author does participate | ||
in can not proceed to solve these end user concerns in a satisfactory manner without mechanisms like | ||
those that this proposal enable. | ||
|
||
This Proposal resolves this problem by introducing a mechanism where all join rules flip from transitioning | ||
membership to `join` from a previous state like `leave`,`invite`,`knock` or not having a membership at all to `mute`. | ||
|
||
The idea with this being that if you join a room as muted you cant interact in a race condition way where | ||
you get to fire of spam before automatic tooling mutes you pending membership screening. | ||
|
||
|
||
## Proposal | ||
|
||
A room that uses Join as muted operating mode will put a `default_membership` key in its `m.room.join_rules` | ||
this key can only for now contain either `join` or `mute` as its state to indicate normal or altered operating | ||
mode. If this is missing from the event normal behaviour is assumed. | ||
|
||
When `default_membership` equals `mute` trying to will instead of setting your membership to `join` will set it | ||
to `mute` with a special consideration being that if you do not have a previous membership event, you are allowed | ||
to set profile information. This is to make it so you have valid profile information for your initial join as muted | ||
members are not allowed to update profile information usually to avoid an attack vector. | ||
|
||
To be written. Proper list of all the transitions in detail. | ||
|
||
### Authorisation rules. | ||
|
||
To be written. Contributions welcome. (Please note that this MSC builds on MSC3909) | ||
|
||
## Potential issues | ||
|
||
This MSC comes with the disadvantage of even further complicating membership transitions than they are already. | ||
The author dismisses this concern due to that this is the only viable to the author way of implementing this feature. | ||
|
||
## Alternatives | ||
|
||
All existing RBAC MSCs at the time of writing that the author is aware of have been dismissed due to them | ||
all sharing the flaw of that you cant Access Control a unbounded amount of members like membership based | ||
access controls can do. And as for the why not just mute them on join issue that is described earlier. | ||
|
||
Also the alternative of making `default_membership` be a different but Boolean key was not picked as to | ||
enable this mechanism to be extended in the future without causing client side stakeholders to be confused. | ||
This design choice encourages being adaptable to that this can change in the future and therefore avoiding | ||
a v11 situation. (Room version 11 caused Element iOS to crash when trying to open a v11 room.) | ||
|
||
A separate state event was dismissed due to that it makes the most sense to put this in the join rules to the author. | ||
This is a weak alternatives case the author does recognise and is therefore left open as a possible alternative for now. | ||
|
||
Knocking on rooms as an alternative has been dismissed by the author due to that it requires the solving of peeking over | ||
federation to enable you to view the room contents before you attempt to pass membership screening. It also is not a viable | ||
alternative for rooms that want to have members only membership due to wanting to give all users the ability to see | ||
what users have access to their messages when no server or user is acting in bad faith. Services like view.matrix.org existing | ||
shows how world readable history visibility is not acceptable to force users into just to enable Screening of members while | ||
maintaining read only mode as a capability. | ||
|
||
## Security considerations | ||
|
||
Alternatives section does go into Security Considerations a bit and so does this proposals Relatives in MSC3909 and MSC3907 | ||
when it comes to mutes so lets dig into what this MSC does for security. It should do relatively little to worsen | ||
security as all it does is make it so someone who joins the room is muted instead and therefore blocking the | ||
attack vector of racing with the automatic tool that mutes you to enable membership screening. Membership screening | ||
being the flagship usecase for this specific MSC. | ||
|
||
Now yes this MSC does worsen security by adding even more complexity to the already very complex membership state machinery | ||
enabling more ways of screwing that up. | ||
|
||
## Unstable prefix | ||
|
||
This MSC is not recommended to be implemented before Authorisation rules are properly specified but if implemented. Please use the version string of `support.feline.mute.msc3909+msc4106.v0` | ||
|
||
Once Authorisation rules are specified it's expected that the unstable version after that is v1. This is because the pre authorisation rules properly written down version cant be trusted to interoperate and this is why its NOT recommended to implement a version that is based on this MSC before that section is written. | ||
|
||
## Dependencies | ||
|
||
This MSC builds on MSC3909 as a direct dependency on it (which at the time of writing have not yet been accepted | ||
into the spec). |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Other things that currently exist:
knock
join rule: This exists for the use case of screening people before they join.Between setting default power levels for "most users will stay muted" and knock for "most users will be unmuted", I'm not sure what the purpose of this msc is? It does combine the two use cases together but would end up adding a third way to implement default mutes a la xkcd: standards. My two best guesses are that
knock
implies that most people will become unmuted whilemute
makes no such implication, andmute
could allow previewing the room (...though, having a history_visibility rule to allow invite/knock users to join would be nice). What else could mute do that knocking doesn't?There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Default powerlevels are adressed as completely and utterly unsuited for this usecase the prior art of MSC3909 can explain it a bit more. But lets summarise that Powelevels are ridicoulously expensive state res wise compared to memberships in my understanding and also have the even bigger achiles heel of limited user count that can be affected as a fundemental and unfixable flaw under current models. (Multiple events have been dismissed wholesale for now)
Knock
is intresting but it has the flaw of that you cant join the room in the sense that you have to solve Peeking over federation to make Knocking a viable alternative in my opinion as you might want to see if the room is for you for example before trying to pass membership screening.So Knock will have to be dismissed as an alternative as its a true flaw of the MSC that its not addressed. Powerlevels are tho dismissed wholesale properly i thought but i might need to do a second pass.
Edit: Removed section about Rotation of Join rules because i realised no you dont actually have to touch in room state as the automatic screening proces is identical for this proposal and knock in that regard.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This begs the question why have a separate default-mute join rule type rather than improve peeking over federation - it looks like it'll be implemented anyways and will obsolete this msc?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Tbh i would be happy to have this be redundant if that materialised and was found to be viable.