- Ya
- 28 Agosti 2026, 01:02 UTC
- Mwandishi
- Kamo
- Ahadi ya
- bb48c64
The notification centre and its settings drew every kind to everybody. A member with no Leads app was shown a "Lead callback" filter that could only ever return nothing, and a mute switch for a kind they could not receive — and the same for the calendar kinds and meeting reminders. Both surfaces mapped one hardcoded array and read neither the organisation nor the member's rights. A kind belongs to an app, so it is gated the way that app's own door in the nav is gated: the organisation has the app AND the member holds the app's viewing right. The app is never written down — each kind names a RoleRightType, and the right carries its own ServiceType, which is also how this stays in step with EmailService's gate: both sides state the right and derive the app, so they cannot come to disagree about which app a kind belongs to. The two surfaces answer slightly different questions. The settings tiles are strict: muting a kind you cannot receive changes nothing, and offering the switch says otherwise. The centre's filter rail additionally keeps any kind the member has notifications of, because access can be withdrawn after the fact — a member moved off the sales team still has last week's callbacks, and hiding the filter would leave those rows reachable only under "Everything", which is not a filter at all. Hiding a switch never clears what it stored, so a member whose access comes back finds their mutes as they left them. Rights arrive a beat after first paint, exactly as they do for the nav rail, so the gate fails closed for that beat rather than flashing every kind. hasFeature() now takes anything carrying a name rather than AppType specifically: the same enum is mirrored twice, as AppType and as ServiceType, and a caller reaching an app through a right holds the latter. Widening the parameter is what stops it having to translate between two mirrors of one enum. Enforcement is not here — EmailService refuses to write the notification at all. This is what the member is offered.