db8ff4eb75
Bot canonical chats open as workspace tiles (workspaceMode: 'bots') and are deliberately hidden from $sessions/$messagingSessions, so the sessions.changed transcript refresh skipped them twice over: it covers only the main pane's selection, and its resolveSession() bails on hidden sessions. A background delivery (bot-to-bot DM via bot_relay.deliver, a cron run's output, another machine) therefore never reached an open bot chat — the roster updated but the pane stayed stale until remount (#93942 scenario A). Fix: the sessions.changed tick now also reconciles every visible workspace tile through a dedicated signature-gated path. Each tile carries its own stored↔runtime id pair so no resolution step is needed; per-tile signatures make no-change ticks free; busy tiles are skipped (their own stream owns the view); closed/superseded tiles discard their in-flight read. Slice 1 of 2 for #93942 (scenario A only). Scenario B (stream re-key after mid-conversation model switch) follows separately. Fixes part of #93942