element-hq / element-hq/element-web
Notification settings lose the mention rows once the server stops serving the legacy mention push rules (MSC4210)
- Dominant language
- TypeScript
- Stars
- 13.5k
- Forks
- 2.8k
- PR merge metrics
- PR metrics pending
Description
### Steps to reproduce
1. Run Synapse `develop` with `experimental_features: { msc4210_enabled: true }`. It then serves `.m.rule.is_user_mention` and `.m.rule.is_room_mention` but not `.m.rule.contains_user_name`, `.m.rule.contains_display_name` or `.m.rule.roomnotif` ([MSC4210](https://github.com/matrix-org/matrix-spec-proposals/pull/4210), Matrix v1.17). Synapse is about to do this by default (element-hq/synapse#19415).
2. Log in with Element Web.
3. Open Settings > Notifications.
### Outcome
**What did you expect?**
The "Mentions and keywords" section shows a row for user mentions and a row for `@room` mentions, backed by the intentional rules, and toggling them updates those rules on the server.
**What happened instead?**
The section shows only "Messages containing keywords". There is no way to change how mentions notify.
Cause: the section is built from the three legacy rule IDs. The intentional rules are only ever written as synced rules of the legacy rows (#26227), never rendered on their own. When the server does not return the legacy rules there is nothing to render.
Sending and rendering are unaffected: Element Web already attaches `m.mentions` to every message, and matrix-js-sdk already ignores the legacy rules for events that carry it. Only the settings UI is broken.
### Operating system
macOS 26
### Application version
Element Web `develop` at c603feb6e6
### How did you install the app?
Local dev server
### Homeserver
Synapse 1.161.0rc1 (`develop`) with `msc4210_enabled: true`
### Will you send logs?
No
Contributor guide
Research direction
Start in the Element Web notification settings implementation, tracing how the “Mentions and keywords” section is assembled from the legacy rule IDs. Check how the intentional user-mention and room-mention rules are represented, then verify the UI still shows both rows and that toggling them updates those rules when the legacy rules are absent.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- frontend, web-dev
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 74/100