Skip to main content

Notification matrix

Applies to: SimpleTwo 0.9.x · Checked: 20.09.2026

Two questions, deliberately kept apart: does a notification arrive at all, and what does it say. Both are below, and the first is a table whose every row is asserted by a test: a row changed in the product and not here is a defect in whichever was not changed.

1. The order the rules are applied​

Earlier rules win. This order is the policy.

  1. You wrote it → nothing.
  2. The conversation or the thread is muted → nothing. Mute beats every relationship, including your manager: a switch you can see must not do less than one you cannot.
  3. Your app is connected and awake → nothing: the socket already delivered it. Messages only — a call does not consult the socket at all. "Awake" is the client's own statement, not the existence of a connection: a suspended app holds a socket and reaches nobody.
  4. Your notification level says no → nothing.
  5. Do Not Disturb → only what is addressed to you, and only from somebody who passes the gate (§3).
  6. Otherwise it arrives.

2. The table​

The recipient is available unless the row says otherwise.

What happenedSenderRecipient stateArrives?How
Direct messageanyoneavailableyesbanner with sound
Direct messageanyoneDND, gate "favourites" (default)noheld
Direct messagefavouriteDNDyestime-sensitive, subtitle "★ Favourite"
Direct messagemanagerDNDyestime-sensitive, subtitle "★ Your manager"
Direct messagemanagerDND, gate "nobody"noheld — an explicit "nobody" is honoured
Mentioned in a groupanyoneavailableyestime-sensitive, "↗︎ Mentioned you"
Mentioned in a groupmanager / favouriteDNDyesbreakthrough
Mentioned in a groupanyone elseDNDnoheld
Mentioned in a groupanyonelevel "none"no"none" means none
Reply to your messageanyonelevel "all"yesbanner, "↩︎ Replied to you"
Message in a thread you followanyonelevel "mentions"yesbanner
Message in a thread you followmanagerDNDnofollowing is not being addressed
Ordinary room messageanyonelevel "all"yesbanner
Ordinary room messageanyonelevel "mentions"noheld
Ordinary room messagemanagerDNDnoa busy room is exactly what DND is for
Anythinganyoneconversation or thread mutednowhoever sent it
Channel postanyonelevel "all"yesbanner, lower relevance: a feed must not out-shout a colleague
CallanyoneiPhoneringsVoIP push → the system call screen
CallanyoneAndroidringshigh-priority push → full-screen call
CallanyoneMacbanner with soundAnswer / Decline; on macOS this is not a ring in the system sense
Callfavourite / managerDNDringsthe same gate as messages
Callanyone elseDNDno ringa missed-call record remains
Callanyonea pass holder: in the call, not in the chatringsthey are part of the signal's audience
Call cancelledthe callera device that rangstops the ringa second push on the same transport
Call cancelledthe callera device that did not ringnothinga withdrawal to an un-rung phone would itself be a ring
Call cancelledthe callerMacnothingthe banner stays until dismissed
Other call stepsanyoneanynothingjoin, end, decline, hold — these are not notifications
Presence changesomebody you subscribe toavailableyessilent, no sound, collapses per person
Presence changesomebody you subscribe toDNDnoheld

3. The Do Not Disturb gate​

Each recipient picks the widest circle they still accept in Do Not Disturb; every tier includes the ones below it:

GateWho gets through
organyone in the company
favoritesfavourites, priority contacts, your manager
prioritypriority contacts and your manager
manageryour manager only
nonenobody
The gate choice is not stored yet

The default is favorites and today everybody is on it: the per-user setting does not exist yet, and neither does the priority-contact list. Anybody expecting priority to mean something would get "your manager and nobody else", which is why the default stays at favorites until the list ships.

4. Where the manager comes from​

From a directory attribute that arrives as a claim at sign-in. Matching is by DN: the manager's distinguished name in one account matches the employee's own DN in another.

A mail address in that field matches nobody and is written to the audit log (directory.manager_unresolved). That matters here in particular: a misconfigured manager breaks no sign-in and shows nothing red — it simply never breaks through Do Not Disturb, and that looks like "breakthrough does not work". How to configure it: ADFS.

5. What a notification says​

ElementRule
Titlethe room's name; for a direct chat, the person
Subtitlewhy you are being told, then who, then about what
Bodythe message, cut at 240 characters
Structured messages📍 location · 👤 contact · 📎 attachment · 📌 pinned — never raw JSON
Secret chats🔒 an encrypted message: that something arrived and from whom, never what it says
Groupingone stack per conversation, by topic within one
Breakthroughalways names the relationship that let it in: an unexplained banner in DND reads as a broken setting

The text is composed by both sides: the server builds a complete notification and knows people by their logins, and the device rewrites it before display — substituting names from its own directory cache and the app's language. The server's version is not a fallback nobody sees: it is what appears whenever the device extension did not run. The rewriting rule is one — never make a notification worse: an unknown field, an empty cache or a payload from an older service all return the server's text untouched.

6. What does not exist yet​

  • the per-user gate setting and the priority-contact list (§3);
  • actions inside the notification (reply, mark as read) — the payload is ready for them;
  • the contents of secret chats on the lock screen: the extension cannot decrypt them either, because the key lives in the app's own keychain.

Next​