From 43c374e361f67a49e1eece32162cea1c63dc443c Mon Sep 17 00:00:00 2001 From: Patrick Cloke Date: Mon, 14 Aug 2023 12:02:05 -0400 Subject: [PATCH] MSC3958: Suppress notifications from message edits (#3958) * Suppress message edits. * Fix typo. Co-authored-by: Sumner Evans * Add @room. * Match MSC title to PR. * Add a potential issue. * Clarify rule placement. * Change link text. Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Fix typo. Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> * Add a note about mobile clients. * Update from anoa's feedback. * Updates for Matrix 1.7 * Update more spec links. * Minor clarifications. Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> * Add downside about "all messages" * Clarify again that this *does* work with all messages. --------- Co-authored-by: Sumner Evans Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> Co-authored-by: Andrew Morgan <1342360+anoadragon453@users.noreply.github.com> --- ...suppress-notifications-of-message-edits.md | 142 ++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 proposals/3958-suppress-notifications-of-message-edits.md diff --git a/proposals/3958-suppress-notifications-of-message-edits.md b/proposals/3958-suppress-notifications-of-message-edits.md new file mode 100644 index 00000000000..52351b1ac95 --- /dev/null +++ b/proposals/3958-suppress-notifications-of-message-edits.md @@ -0,0 +1,142 @@ +# MSC3958: Suppress notifications from message edits + +[Event replacement](https://spec.matrix.org/v1.7/client-server-api/#event-replacements) +(more commonly known as message edits) signals that a message is intended to +be replaced with new content. + +This works well for fixing typos or other minor correction, but can cause +spurious notifications if the event mentions a user's display name / localpart or +if it includes `@room` (which is particularly bad in large rooms as every user +is re-notified). This contributes to notification fatigue as the additional +notifications contain no new information. + +Additionally for users which have a room set to "all messages" then every event +edit results in an additional notification.[^1] + +## Proposal + +A new default push rule is added to suppress notifications due to [edits](https://spec.matrix.org/v1.7/client-server-api/#event-replacements). + +```json +{ + "rule_id": ".m.rule.suppress_edits", + "default": true, + "enabled": true, + "conditions": [ + { + "kind": "event_property_is", + "key": "content.m\\.relates_to.rel_type", + "value": "m.replace" + } + ], + "actions": [] +} +``` + +This rule should be placed after the [`.m.rule.room.server_acl` rule](https://spec.matrix.org/v1.7/client-server-api/#default-override-rules) +as the last override rule. + +It would match events such as those given in [event replacements](https://spec.matrix.org/v1.7/client-server-api/#event-replacements) +portion of the spec: + +```json5 +{ + "type": "m.room.message", + "content": { + "body": "* Hello! My name is bar", + "msgtype": "m.text", + "m.new_content": { + "body": "Hello! My name is bar", + "msgtype": "m.text" + }, + "m.relates_to": { + "rel_type": "m.replace", + "event_id": "$some_event_id" + } + }, + // ... other fields required by events +} +``` + +With the [updated mentions behavior in Matrix 1.7](https://spec.matrix.org/v1.7/client-server-api/#user-and-room-mentions), +this would allow the [`.m.rule.is_user_mention`](https://spec.matrix.org/v1.7/client-server-api/#_m_rule_is_user_mention) +and the [`.m.rule.is_room_mention`](https://spec.matrix.org/v1.7/client-server-api/#_m_rule_is_room_mention) +rules to continue matching, even for edited events, while suppressing notifications +from other edits. + +Some users may be depending on notifications of edits. If a user would like to +revert to the old behavior they can disable the `.m.rule.suppress_edits` push rule. + +## Potential issues + +### Edits of invites and tombstones + +The [`.m.rule.invite_for_me` and `.m.rule.tombstone`](https://spec.matrix.org/v1.7/client-server-api/#default-override-rules) +rules may still cause spurious notifications if events which match those rules +are edited. Both of those are state events and +[not subject to valid edits](https://spec.matrix.org/v1.7/client-server-api/#validity-of-replacement-events). + +### Keeping notifications up-to-date + +Mobile clients currently depend on the push notifications of edited events to update the +text of on-screen notifications. The proposed push rule would result in mobile clients no +longer receiving these edits; but showing slightly outdated text on a notification screen. That +is only a minor impact and it would be better to separate when (& why) we send pushes vs. +when we generate notifications. + +### Suppression of notifications to a new keyword + +If an event is edited and the new event (but not the original event) matches a keyword +then the notification would erroneously be suppressed. + +## Alternatives + +An alternative solution would be to add a push rule with no actions and a condition to +check whether a notification was generated for the original message. + +This would be placed as an override rule before the `.m.rule.contains_display_name` +and the `.m.rule.roomnotif` [push rules](https://spec.matrix.org/v1.7/client-server-api/#push-rules). + +This would suppress duplicate notifications, while still allow for new notifications due +to new mentions or keywords changing. + +## Security considerations + +None forseen. + +## Future extensions + +If message edits by other senders were allowed than it would be useful to +know when your own message was edited, but this +[is not currently allowed](https://spec.matrix.org/v1.7/client-server-api/#validity-of-replacement-events). +A future MSC to define this behavior should take into account notifying +users in this situation. + +## Unstable prefix + +The unstable prefix of `.org.matrix.msc3958.suppress_edits` should be used in place of +`.m.rule.suppress_edits`. + +A previous version of this MSC used `.com.beeper.suppress_edits` with a different condition +(which should match the same events), but different rule placement. + +## Dependencies + +N/A + + + +[^1]: A room can be configured to be notify for "all messages" by creating a [room-specific push rule](https://spec.matrix.org/v1.7/client-server-api/#push-rules) +with an `rule_id` of the room ID & has `actions` set to "notify" , e.g.: + + ```json + { + "rule_id" : "!abcdef:example.com", + "default" : false, + "enabled" : true, + "actions" : ["notify"] + } + ``` + + See the [Element Web](https://github.com/matrix-org/matrix-react-sdk/blob/da7aa4055e04f291be9b5141b704bd12aec03d0c/src/RoomNotifs.ts#L162-L170) + implementation.