personal memory agent

chat: replace universal bar chrome with compact bar + talent-view modal (lode 3b) master

Delete the 680-line inline/panel JS block in app.html and the conversation_panel.html template. In their place: - convey/templates/chat_bar.html: compact always-visible bar with a single-line sol-message slot, talent icon tray (max 8 + overflow), and composer row. Subscribes to the new "chat" tract (from 3a). - convey/templates/app.html: shared talent-view modal (role=dialog, aria-modal, ESC-closes, focus-return). Static mode fetches /api/chat/talent-log/<use_id>; running mode also short-polls and watches the chat tract for terminal events. - window.openConversation(text?) repurposed: focus bar input, pre-fill text. Panel semantics gone. Gating decision: add app_bar: bool = True to the App dataclass so /app/chat (lode 3c) can opt out. Body .has-app-bar class and the bar include both gate on app_registry.apps[app].app_bar. Workspace bottom-space reservation moved under body.has-app-bar .workspace so a bar-less app reclaims the space. Deleted DOM/CSS/JS: conversationBackdrop, conversationMessages, chatBarResponsePanel, chatBarThinking, chatBarResponse, chatBarDismiss, conversation-separator, app-bar--focused/dismissing/glance, expand button, panel focus trap, pagehide saves, the two solstone:*State localStorage keys, and the /api/chat/result recovery path. One-time localStorage cleanup remains. Guard extended: tests/test_no_legacy_chat_imports.py now text-scans .html and .js files (excluding itself and fixtures) for the deleted DOM literals, so they can't creep back in. net: -1084 lines old / +735 lines new across 7 files. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>