Status auto-clear only works on the device that set it, and only while that device is open #300

Open
opened 2026-10-04 21:09:04 -04:00 by jared · 1 comment
Owner

Settings → Account → Status Message → Auto-clear after (for example 1 hour) stores the expiry in localStorage on that device (lotus-status-expiry-<user>). StatusExpiryMonitor (src/app/pages/client/ClientNonUIFeatures.tsx) clears the server status only while that tab or app is running.

So "🍔 Lunch, clear after 1 hour" set on a laptop that is then closed stays on the server (presence.status_msg) until that laptop opens Lotus again, which could be days. The user's other devices actively adopt the server status (resolveStatus in usePresenceUpdater) and never clear it, because they don't know the expiry.

Fix: store the expiry with the status where every device sees it, either Lotus account data (io.lotus.status_expiry) or a field in the synced settings, and let any running device perform the clear. The status-presets work (d0614710) is the natural place.

Related: #283 (DND overwrites the status).


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.

Settings → Account → Status Message → **Auto-clear after** (for example 1 hour) stores the expiry in **localStorage on that device** (`lotus-status-expiry-<user>`). `StatusExpiryMonitor` (src/app/pages/client/ClientNonUIFeatures.tsx) clears the server status only while that tab or app is running. So "🍔 Lunch, clear after 1 hour" set on a laptop that is then closed stays on the server (`presence.status_msg`) **until that laptop opens Lotus again**, which could be days. The user's other devices actively adopt the server status (`resolveStatus` in `usePresenceUpdater`) and never clear it, because they don't know the expiry. **Fix:** store the expiry with the status where every device sees it, either Lotus account data (`io.lotus.status_expiry`) or a field in the synced settings, and let any running device perform the clear. The status-presets work (d0614710) is the natural place. Related: #283 (DND overwrites the status). --- _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: lowarea: settings labels 2026-10-04 21:09:04 -04:00
Author
Owner

Related (#339): a large share of the "status vanished" reports may not be the expiry. Closing or reloading any Lotus tab sends PUT presence {"presence":"offline"} with no status_msg (usePresenceUpdater.ts handlePageHide), and Synapse clears the status on that write (verified directly). So closing the setting device usually wipes the status at once, before the timer matters. This issue becomes the visible behaviour once that's fixed.

Related (#339): a large share of the "status vanished" reports may not be the expiry. Closing or reloading *any* Lotus tab sends `PUT presence {"presence":"offline"}` with no `status_msg` (`usePresenceUpdater.ts` `handlePageHide`), and Synapse clears the status on that write (verified directly). So closing the setting device usually wipes the status at once, before the timer matters. This issue becomes the visible behaviour once that's fixed.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#300