- _on_image_download_failed called self.statusBar() which does not
exist on a QWidget -> AttributeError crash; use status_bar label.
- Ctrl+Shift+P no longer disables the privacy overlay while the session
is password-locked (lock bypass).
- Registration code confirmation no longer touches Qt widgets from the
asyncio thread; new AsyncBridge.confirm_result signal carries the
result back to the Qt thread.
- MainWindow.closeEvent now disconnects all bridge signal connections
(tracked in _bridge_connections), removes the theme listener and
stops the periodic refresh timer — every logout/login cycle leaked a
window that kept handling notifications (duplicate mark_read, tray
toasts).
- AsyncBridge logout rewires _key_change_cb onto the fresh ChatClient
(key-change MITM warning was dead after logout) and clears
_pending_send_queue so queued messages cannot be sent under a
different identity.
- CLI: fix await precedence crash in the react-to-message prompt.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>