db127f7502
Two profiles can hold sessions with the SAME stored id (restored backups, copied state.dbs, cross-profile imports). mergeSessionPage keyed rows by bare id, so the twins collapsed into one sidebar row whose title/activity carry stitched one profile's content onto the other's route — clicking a row previewing profile A resumed profile B and wedged on an eternal 'Waking up…' when the mismatched resume never completed (live-reproduced on main). - mergeSessionPage: identity + lineage + dedupe keys are now (profile, id); a kept twin in another profile survives the incoming page dedupe. Local profile normalize (importing @/store/profile would be circular). - Sidebar clicks carry the ROW as the identity: onResumeSession passes the clicked SessionInfo, and wiring pins the row's own (connection, profile) as the resume owner via requestSessionResume before navigating. Untagged rows keep the id-only path.