CI / Build & Quality Checks (pull_request) Successful in 3m49s
CI / Trigger Desktop Build (pull_request) Skipped
CI / Docker image build & smoke test (pull_request) Skipped
CI / Secret scan (gitleaks) (pull_request) Successful in 10s
CI / Playwright smoke (e2e) (pull_request) Successful in 13m50s
usePresenceUpdater sent a one-off PUT /presence, but the SDK kept long-polling /sync with the default set_presence=online and Synapse treats every sync as "online", so Invisible / Hide Online Status / Idle / DND flipped back within seconds — a privacy setting that silently didn't work. The presence helpers now also call mx.setSyncPresence(): offline for Invisible / Hide Online Status, unavailable for Idle / DND (and auto-mode idle / hidden tab), online otherwise. The PUT stays for the immediate change. Verified on the local Synapse, another account polling every 5 s for 60 s after a reload in each mode: invisible → offline ×12, hidePresence → offline ×12, idle → unavailable ×12, dnd → unavailable ×12, online → online (currently_active) ×12; /sync carries set_presence=offline / unavailable / online accordingly (before: online* throughout). Fixes #282 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017PCb59uY3UKqDqt7B6hzd5