Implements the Nexus: a dedicated conversational-only interface where Timmy
maintains a persistent session backed by his live memory store. Unlike the
main dashboard chat (which includes tool-approval flow), the Nexus is pure
dialogue with semantic memory context surfaced on every exchange.
Changes:
- src/dashboard/routes/nexus.py — GET/POST/DELETE routes; uses dedicated
`nexus` session_id so history is isolated from the main dashboard chat
- src/dashboard/templates/nexus.html — two-column layout: chat left,
memory sidebar + teaching panel right
- src/dashboard/templates/partials/nexus_message.html — chat partial with
OOB memory-hits swap
- src/dashboard/templates/partials/nexus_facts.html — teaching confirmation
+ facts list partial
- src/dashboard/app.py — import and register nexus_router
- src/dashboard/templates/base.html — NEXUS link in INTEL dropdown
- static/css/mission-control.css — Nexus layout, memory sidebar, teaching
panel styles (no inline CSS)
- tests/dashboard/test_nexus.py — 9 unit tests, all green
- docs/nexus-spec.md — full scope + acceptance criteria for #1208Fixes#1208
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds /db-explorer page and JSON API to browse all 15 SQLite databases
in data/. Sidebar lists databases with sizes, clicking one renders all
tables as scrollable data tables with row truncation at 200.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Major:
- Extract all inline <style> blocks from 22 Jinja2 templates into
static/css/mission-control.css — single cacheable stylesheet
- Add tox lint check that fails on inline <style> in templates
Minor:
1. Connection status indicator in topbar (green/amber/red dot) reflecting
WebSocket + Ollama reachability, with auto-reconnect
2. Jinja2 {% macro panel(title) %} in macros.html — eliminates repeated
.card.mc-panel markup; index.html converted as example
3. SVG favicon (purple T + orange dot)
4. 30-second TTL cache on _check_ollama() to avoid blocking the event loop
on every health poll (asyncio.to_thread was already in place)
5. Toast notification system (McToast.show) for transient status messages —
wired into connection status for Ollama/WebSocket state changes
Enforcement:
- CLAUDE.md updated with conventions 11-14 (no inline CSS, use panel macro,
use toasts, never block the event loop)
- tox lint + pre-push environments now fail on inline <style> blocks
https://claude.ai/code/session_014FQ785MQdyJQ4BAXrRSo9w
Co-authored-by: Claude <noreply@anthropic.com>