afe238ac7e
Multiple Desktop windows share one renderer origin (one localStorage area) while each window can be connected to a DIFFERENT gateway. The sidebar pin set (hermes.desktop.pinnedSessions), the manual session order, and the remembered last-session/route navigation keys were all persisted under single global (or profile-only) keys, so two windows on different gateways read and reconciled the same lists: pin-sync's pullRemotePins() in one window adopted/dropped pins belonging to the other window's backend, producing the overlapping mixed PINNED/SESSIONS lists reported after the v0.19.1 update relaunch. Introduce a connection-scope persistence layer (connectionScopedAtom in src/lib/connection-scoped.ts): the local connection keeps the bare legacy key (byte-identical for single-backend users, same contract as backendScopeKey), while remote connections persist under `<key>.remote.<encoded baseUrl>.<encoded profile>` — the shape workspaceCwdKey already established. setConnection() rescopes every scoped atom when the window's connection changes (null descriptors keep the current scope, as with syncCronModelImpactConnection), and pin-sync resets its mirrored/pending/unconfirmed bookkeeping on rescope so a reconcile never PATCHes one gateway's pins to another. Legacy globally-keyed values are deliberately not migrated into remote scopes: ownership of rows accumulated by every window is unknowable (the #67709 precedent), and backend-mirrored pins self-heal from the gateway's own `pinned` rows. Fixes #77318