"Remind me" fires as a 4-second in-app toast only (no OS notification, no sound) and then deletes the reminder, so a reminder that comes due while you're away is lost #338

Closed
opened 2026-10-06 00:16:36 -04:00 by jared · 0 comments
Owner

ReminderMonitor (src/app/pages/client/ClientNonUIFeatures.tsx:780-850) checks every 30 s. When a reminder is due it:

  1. pushes an ordinary toast (setToast({ displayName: 'Reminder', … })). It isn't sticky, so LotusToastContainer dismisses it after 4000 ms;
  2. immediately calls removeReminder(), deleting it from io.lotus.reminders.

There is no OS notification, no sound, and no list of past reminders anywhere (RemindMeDialog is the only reminders UI).

Measured (local Synapse; notification permission granted, Notification constructor instrumented): a reminder set for t+20 s fired at t+23 s.

  • The "Reminder" toast was visible for ~4 s and then disappeared.
  • OS notifications created: 0.
  • The reminder was gone from account data afterwards.

A reminder exists to get your attention when you aren't looking at the app. Cases where it's lost silently:

  • Lotus is in a background tab, or minimised to tray on desktop: the interval still runs (throttled), so the toast shows unseen for 4 s and the reminder is deleted. visibilitychange re-runs check(), but by then there's nothing left.
  • You're looking at another monitor or away from the desk for those 4 s.
  • More than 5 toasts are queued: MAX_TOASTS = 5 drops the oldest.

Fix:

  • Make reminder toasts sticky (stay until clicked or dismissed).
  • Also raise an OS notification through the existing notify() path when permission is granted (it's an explicit user request, so it should bypass the room's notification level, but respect DND/quiet hours with the reminder held until they end). Optionally play the notification sound.
  • Only delete the reminder once it has been seen: the toast is clicked/dismissed or the notification clicked. Alternatively, keep fired reminders for a while under "Reminders" (e.g. in the Inbox) with Snooze / Done.
  • Snooze buttons on the toast (10 min / 1 h / tomorrow) would match what people expect from other chat apps.

Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny 30e2dbcd, cinny-desktop 8f67ec7, element-call 3b0050e8.

`ReminderMonitor` (src/app/pages/client/ClientNonUIFeatures.tsx:780-850) checks every 30 s. When a reminder is due it: 1. pushes an ordinary toast (`setToast({ displayName: 'Reminder', … })`). It isn't `sticky`, so `LotusToastContainer` dismisses it after **4000 ms**; 2. immediately calls `removeReminder()`, deleting it from `io.lotus.reminders`. There is no OS notification, no sound, and no list of past reminders anywhere (`RemindMeDialog` is the only reminders UI). **Measured** (local Synapse; notification permission *granted*, `Notification` constructor instrumented): a reminder set for t+20 s fired at t+23 s. - The "Reminder" toast was visible for **~4 s** and then disappeared. - OS notifications created: **0**. - The reminder was **gone** from account data afterwards. A reminder exists to get your attention when you aren't looking at the app. Cases where it's lost silently: - **Lotus is in a background tab, or minimised to tray on desktop:** the interval still runs (throttled), so the toast shows unseen for 4 s and the reminder is deleted. `visibilitychange` re-runs `check()`, but by then there's nothing left. - **You're looking at another monitor or away from the desk** for those 4 s. - **More than 5 toasts are queued:** `MAX_TOASTS = 5` drops the oldest. **Fix:** - Make reminder toasts `sticky` (stay until clicked or dismissed). - Also raise an OS notification through the existing `notify()` path when permission is granted (it's an explicit user request, so it should bypass the room's notification level, but respect DND/quiet hours with the reminder held until they end). Optionally play the notification sound. - Only delete the reminder once it has been *seen*: the toast is clicked/dismissed or the notification clicked. Alternatively, keep fired reminders for a while under "Reminders" (e.g. in the Inbox) with Snooze / Done. - Snooze buttons on the toast (10 min / 1 h / tomorrow) would match what people expect from other chat apps. --- _Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny `30e2dbcd`, cinny-desktop `8f67ec7`, element-call `3b0050e8`._
jared added the bugpriority: mediumarea: notifications labels 2026-10-06 00:16:36 -04:00
jared closed this issue 2026-10-11 23:22:57 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#338