2aeeb0a096
Auto-update (no manual step, no version confusion): - New code now applies ITSELF. The client polls /api/build and, as soon as it's SAFE, silently hard-reloads onto the new build. Safe = not in a call, no live screen session, no dialog open, nothing half-typed; if the user is busy we wait and apply the moment they're free. A brief "Updated to the latest version" toast confirms it. - Removed the "web build" row from Settings: users must never have to reason about an app version vs a web build. The only version surfaced is the desktop app's (auto-updater). DP bug: a contact showed their photo in a GROUP but fell back to initials in the 1:1. Two causes, both handled: - Duplicate rows for one person (signed in by email once and by mobile another time before the bizgaze_user_id merge landed) — only one row carries the DP, and the group happened to reference the row WITH the photo. avatarsFor() now keys rows by stable person identity (bizgaze person id → email → name) so a photo-less row borrows its twin's photo. Applied to contacts, conversations, group members and group info. - A DM whose counterparty was merged away is now keyed by the SURVIVING account, so the row carries that account's name/photo/presence (and split threads collapse into one). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>