Skip to content
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

MSC4273: Approve and Disapprove ratings for moderation policies #4273

Open
wants to merge 6 commits into
base: main
Choose a base branch
from

Conversation

Gnuxie
Copy link
Contributor

@Gnuxie Gnuxie commented Mar 12, 2025

Rendered

Signed-off-by: Gnuxie Gnuxie@protonmail.com

@Gnuxie Gnuxie changed the title MSC0000: Approve and Disapprove ratings for moderation policies MSC4273: Approve and Disapprove ratings for moderation policies Mar 12, 2025
@tulir tulir added proposal A matrix spec change proposal client-server Client-Server API kind:feature MSC for not-core and not-maintenance stuff needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. labels Mar 12, 2025
Copy link
Member

Choose a reason for hiding this comment

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

Implementation requirements:

  • Client/bot sending approvals
  • Client/bot using approvals

Copy link
Member

Choose a reason for hiding this comment

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

Overarching question: does this need to be a protocol feature? In the early design of policy lists there was a theory of "multiple confirmations" and manual approval, where the bot wouldn't honour the policy list recommendations until either multiple lists added the same rule, or the operator accepted it.

This is also why the spec doesn't say that recommendations must be followed: the lists are just sources of information. What the parser/receiver does with that information is entirely left to the implementation.

Copy link
Contributor Author

@Gnuxie Gnuxie Mar 12, 2025

Choose a reason for hiding this comment

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

This doesn't seem to be an overarching question, but a question you have about the proposal?

I am unaware of the early work around moderation policy lists. This proposal has been on the cards for a long time now and there is a lot of potential for this proposal to be used beyond moderation purposes as it is generic.

This does need to be documented somewhere for the purpose of interoperability between moderation tools and matrix clients, and the MSC process currently is the best avenue for that. It is also my intent for this proposal to land within the specification.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

This is also why the spec doesn't say that recommendations must be followed: the lists are just sources of information. What the parser/receiver does with that information is entirely left to the implementation.

Likewise, they are free to do what they want with approval ratings in this proposal

Comment on lines +50 to +54
event_id:
type: string
description: |-
The event ID of the moderation policy that this is a rating for.
example: "$some_event_id"
Copy link
Contributor Author

Choose a reason for hiding this comment

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

CC @deepbluev7

We should instead use the room_id, the event type and the event state_key. As the state_key + type combination are used to identify a policy within moderation policy lists so that they can be updated or removed.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

On the other hand, without the event_id or entity the policy can be modified after the fact once agreement has been met to target a different entity that you disagree with

Copy link
Contributor Author

Choose a reason for hiding this comment

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

An approach to this in implementation could be simply to notify that a policy has changed, and ask again for a new rating.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I'll update the MSC with that recommendation.

Comment on lines +12 to +26
For example: `charity`, the moderator of `cat-community.example.com`, cannot
subscrbe to the list, `#bat-coc-bl:bat-community.example.org` without accepting
all of the existing policies. This is problematic because `charity`'s friend
`bob` was banned from the list for arguing with a moderator. `charity` respects
the ban in the bat community, but still needs to be able to interact with their
friend.

Addtionaly, this all-or-nothing approach increases the amount of trust that
moderators place onto the curators of moderation policy lists. As watching a
list gives the list curators the ability to manage members within the
subscribing community.

For example: `luna`, the moderator of `bat-community.example.com` notices that
`cat-community.example.com` is watching the list, and uses their power to ban
more of `charity`'s friends.
Copy link
Contributor Author

Choose a reason for hiding this comment

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

@deepbluev7 says to just use "mine" and "third party" rather than all these names.

Comment on lines +44 to +49
description: |-
A binary rating of either string literals approve or disapprove.
type: string
enum:
- approve
- disapprove
Copy link
Contributor

Choose a reason for hiding this comment

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

I think spaces (or tabs) got slightly out of order here.

Suggested change
description: |-
A binary rating of either string literals approve or disapprove.
type: string
enum:
- approve
- disapprove
description: |-
A binary rating of either string literals approve or disapprove.
type: string
enum:
- approve
- disapprove

properties:
rating:
description: |-
A binary rating of either string literals approve or disapprove.
Copy link
Contributor

Choose a reason for hiding this comment

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

What does "binary" refer to here?


## Security considerations

See ptoential issues.
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
See ptoential issues.
See potential issues.

Comment on lines +50 to +54
event_id:
type: string
description: |-
The event ID of the moderation policy that this is a rating for.
example: "$some_event_id"
Copy link
Contributor Author

Choose a reason for hiding this comment

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

What if i want to mark other entities as approved or disapproved? Such as a room or a user?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
client-server Client-Server API kind:feature MSC for not-core and not-maintenance stuff needs-implementation This MSC does not have a qualifying implementation for the SCT to review. The MSC cannot enter FCP. proposal A matrix spec change proposal
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants