Skip to content

MSC3784: Using room type of m.policy for policy rooms - #3784

Merged
turt2live merged 9 commits into
matrix-org:mainfrom
FSG-Cat:FSG-Cat-Policy-List-Room-Type
Jul 13, 2026
Merged

MSC3784: Using room type of m.policy for policy rooms#3784
turt2live merged 9 commits into
matrix-org:mainfrom
FSG-Cat:FSG-Cat-Policy-List-Room-Type

Conversation

@FSG-Cat

@FSG-Cat FSG-Cat commented Apr 25, 2022

Copy link
Copy Markdown
Contributor

Rendered

This simple MSC aims to help stakeholders know if its likely to be a room containing a policy list or not.

Signed-off-by: Catalan Lover catalanlover@protonmail.com


SCT Stuff

MSC checklist

FCP tickyboxes

FSG-Cat added 4 commits April 25, 2022 21:00
…X-Using-room-type-of-m.policy-for-policy-rooms.md
…sing-room-type-of-m.policy-for-policy-rooms.md
…d to 3784-using-room-type-of-m.policy-for-policy-rooms.md
@uhoreg uhoreg added proposal-in-review proposal A matrix spec change proposal. Process state. kind:maintenance MSC which clarifies/updates existing spec needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. labels Apr 25, 2022
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md
Comment on lines +19 to +25
limited capacity. This proposal expands this system to help all stakeholders quickly identify
policy rooms in a machine compatible way that is computationally cheap. It has additional benefits like
allowing clients that are capable of editing policy to display editing tools for policy rooms when they
detect that a room is a policy room using this mechanic. For machine interaction with policy rooms this
proposal supplies a very fast way to tell if a room is definitively supposed to be a policy room or if
the user might have supplied a legacy room or typed in the wrong room ID / alias depending on how things
are configured.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To expand on this a bit, I really need something like this. Without this you run into a bootstrapping issue. Is this room supposed to be a policy room before the first policy is sent?

Without a room type you need to inspect the full room state to look for policy rules before you switch to the policy editor design. Slash commands can't warn the user properly that they are sending the rule into the wrong room.

So yes, I very much need this to provide a nice experience in my client. I can somewhat paper over it using account data, but it is not great. Everywhere we are told rooms are cheap. So far no rooms send policy rules into rooms you can send messages in. Most moderation tools even make it impossible to message in policy rooms, since that could possibly break the policy room when you actually need it to fight spam.

Thank you for writing this MSC!

Added improved information about what to do after the MSC gets merged.
Gnuxie added a commit to matrix-org/mjolnir that referenced this pull request Oct 17, 2022
matrix-org/matrix-spec-proposals#3784

This was extracted from the appservice mjolnir work to reduce review burden.
Gnuxie added a commit to matrix-org/mjolnir that referenced this pull request Oct 17, 2022
matrix-org/matrix-spec-proposals#3784

This was extracted from the appservice mjolnir work to reduce review burden.
Gnuxie added a commit to matrix-org/mjolnir that referenced this pull request Oct 19, 2022
matrix-org/matrix-spec-proposals#3784

This was extracted from the appservice mjolnir work to reduce review burden.
Gnuxie added a commit to matrix-org/mjolnir that referenced this pull request Oct 19, 2022
matrix-org/matrix-spec-proposals#3784

This was extracted from the appservice mjolnir work to reduce review burden.
@@ -0,0 +1,65 @@
# MSC3784 Using room type of m.policy for policy rooms

@FSG-Cat FSG-Cat Nov 27, 2022

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Making this thread to track Implementation status outside of the PR descript.

Implementation Tracking

Mjolnir as of da08432 and that commit is included in Release 1.6.0. Mjolnir implementation at time of writing only includes that it creates rooms for policy lists with the type.
Nheko in mtxclient has added initial support to recognise it in 4bd39bce. Further progres unknown at time of writing.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does Nheko use it besides just declaring the constant?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Policy Editing that utilises MSC3784 to aid in detecting if a room is a policy list is implemented in RMU. Version that implemented first is unknown but current Version as of writing relies on this as one of its 2 detection methods. It also supports legacy detection.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://mru.rory.gay/PolicyLists is the particular page in RMU that uses this MSC to find policy rooms. I'm not sure whether it has legacy detection enabled or not, but legacy detection here was implemented by checking for the Mjolnir shortcode state event. It does not show rooms that happen to have policy events, as querying /sync or /state for rooms is very expensive, especially compared to cherry picking 2 events.

(Oops, I still have to get rid of the "Create policy list" popup being there by default, which also uses the MSC's unstable type on room creation, additionally I've just uncovered a crash related to fetching room names... That's for the tomorrow pile).

aichafellouss added a commit to aichafellouss/Draupnir that referenced this pull request Oct 19, 2025
matrix-org/matrix-spec-proposals#3784

This was extracted from the appservice mjolnir work to reduce review burden.

@turt2live turt2live left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My general feeling is this is something we should have in the spec to identify rooms dedicated to containing policy list recommendations. There might still be some rooms which want to mix recommendations with conversation - those rooms wouldn't use this type and might not get the benefits of dedicated UX from a client, but that's okay.

I've given this MSC a sizable editorial review. It's not my intention to completely change how this proposal works, so if that's happened then please correct me 😅. The editorial comments here reflect that ~650 MSCs have been opened in the time since this one was, and that modern MSCs are typically held to a different standard than older ones. I've also tried to make some areas a bit more clear & concise, as would happen in normal review.

My approval denotes that the MSC is ready for proposed-FCP with the edits (or something reasonably close). The listed implementations appear to satisfy the requirements we'd have for this proposal.

Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
@turt2live turt2live added A-Client Server Client-Server API A-Safety and removed needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. labels Mar 20, 2026
@github-project-automation github-project-automation Bot moved this to Tracking for review in Spec Core Team Workflow Mar 20, 2026
@turt2live turt2live moved this from Tracking for review to Proposed for FCP readiness in Spec Core Team Workflow Mar 20, 2026
Co-authored-by: Travis Ralston <travpc@gmail.com>
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
@mscbot mscbot added the unresolved-concerns This proposal has at least one outstanding concern. Process state. label Apr 8, 2026
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
FSG-Cat and others added 2 commits April 21, 2026 07:46
This is a separate commit from the proper review feedback commit so that the feedback integration isnt drowned in noise.
Co-authored-by: Gnuxie <Gnuxie@users.noreply.github.com>
outside of `m.policy` rooms. Existing rooms probably won't have the new room
type, and some communities might mix conversation and recommendations in the
same room (therefore not dedicating the room to recommendations).
Where the `m.policy` room type is used, conversation is not expected.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Small quibble that I wouldn't block this MSC on, but should we use m.moderation_policy to be a bit more descriptive? I could think of multiple types of policies.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't the policy server MSC then also be updated to use m.moderation_policy as an event type rather than m.policy or whatever the final variant was?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Im not married to any particular final name for the room type. I was just copying the precedent set by spaces at the time of writing originally.

So i will take this to the saftey guild and ask them for input on what the name should be.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we're already using this term, and that's ok. Thanks for providing the context on why this was chosen. It just stuck out to me as really vague.

Would be curious for other SCT input here.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I feel like @turt2live would have more context on whether this is a sensible name or not. I agree that m.policy feels a bit vague.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As the person who advocated for m.room.policy to enter the spec as-is, I'm not sure my opinion is super reliable 😅. I'm personally fine with m.policy as a room type because it's "a room containing a policy". The 'policy' happens to be expressed with primarily ban rules, but in future could be more than that (anonymous reputation data, shades of gray policy definitions to determine on-topic-ness, etc).

I'm also generally of the opinion that calling it a "moderation policy list" in the spec is wrong, but I'm not concerned enough to actually raise a bug fix PR or issue for it. The use case is to communicate general policy data, not specific to moderation. This could be a security policy, entrance policy, community volunteer policy, etc.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A practical use case that exists today where policies are not "moderation policies" would actually be the Access controls for Mjolnir and Draupnir Appservice mode. While they are broken in Draupnir currently they work in Mjolnir as far as i know because it used to work in Draupnir and we did not touch that part of the codebase to my knowledge in that way. (I should note we use the moderation policy recommendations in this context but thats also more of a easiest path forward type of situation i would argue. But thats also only for the disallow policy the allow policy is a custom one in the org.matrix namespace.)

In this case the policies simply control if your bot is allowed to start or not and if your doing Appservice hosting as a service you can easily hook this into a subscription management system. Be that paid or free subscriptions.

Point im trying to make is that we have a concrete already in the wild use case where policies are not strict moderation but something a bit different and we have lots of exploration wanting to extend this system further.

Personally i would say that room sub typing also comes into play here as if we had sub typing then definitively could argue if moderation should be its own subtype and the flagship subtype for the first MSC to try to define a policy subtype due to its clear and proven track record.

Now the fact that the appservice admin room is where Mjolnir and Draupnir stores the policy list is a design choice that as far as i understand exists out of convenience not any actual necessity. Appservice mode was a small beta project that had beta issues that make complete sense in context. The admin room having the policies is one of them and is a choice that i personally would argue for moving away from if one wants to modernize the mode (and is something i may personally look at in the future inside of the Draupnir project) as the room type benefits are quite large for specialized tools like RMU and any other matrix client that wants to implement policy manipulation.

@mscbot mscbot removed the unresolved-concerns This proposal has at least one outstanding concern. Process state. label May 19, 2026
Comment thread proposals/3784-using-room-type-of-m.policy-for-policy-rooms.md Outdated
@mscbot

mscbot commented Jul 7, 2026

Copy link
Copy Markdown
Collaborator

🔔 This is now entering its final comment period, as per the review above. 🔔

@mscbot mscbot added final-comment-period Process state to accept, reject, or postpone an MSC. and removed proposed-final-comment-period Currently awaiting signoff of a majority of team members in order to enter the FCP. Process state. labels Jul 7, 2026
@turt2live turt2live moved this from Ready for FCP ticks to In FCP in Spec Core Team Workflow Jul 7, 2026
@turt2live turt2live removed the 00-weekly-pings Tracking for weekly pings in the SCT office. 00 to make it first in the labels list. label Jul 7, 2026
@mscbot

mscbot commented Jul 12, 2026

Copy link
Copy Markdown
Collaborator

The final comment period, with a disposition to merge, as per the review above, is now complete.

@mscbot mscbot added finished-final-comment-period FCP has finished. Process state. and removed disposition-merge Process state. final-comment-period Process state to accept, reject, or postpone an MSC. labels Jul 12, 2026
@turt2live
turt2live merged commit 82e3177 into matrix-org:main Jul 13, 2026
1 check passed
@turt2live

Copy link
Copy Markdown
Member

Spec PR: matrix-org/matrix-spec#2411

@turt2live turt2live added spec-pr-in-review A proposal which has been PR'd against the spec and is in review and removed finished-final-comment-period FCP has finished. Process state. labels Jul 13, 2026
@turt2live turt2live moved this from In FCP to Requires spec PR review in Spec Core Team Workflow Jul 13, 2026
@turt2live turt2live added merged A proposal whose PR has merged into the spec! Process state. and removed spec-pr-in-review A proposal which has been PR'd against the spec and is in review labels Aug 11, 2026
@turt2live turt2live moved this from Requires spec PR review to Merged/Done in Spec Core Team Workflow Aug 11, 2026
@turt2live

Copy link
Copy Markdown
Member

Merged 🎉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-Client Server Client-Server API A-Safety kind:maintenance MSC which clarifies/updates existing spec merged A proposal whose PR has merged into the spec! Process state. proposal A matrix spec change proposal. Process state.

Projects

Status: Merged/Done

Development

Successfully merging this pull request may close these issues.

10 participants