4.2 KiB
4.2 KiB
Nexus — Scope & Acceptance Criteria
Issue: #1208 Date: 2026-03-23 Status: Initial implementation complete; teaching/RL harness deferred
Summary
The Nexus is a persistent conversational space where Timmy lives with full access to his live memory. Unlike the main dashboard chat (which uses tools and has a transient feel), the Nexus is:
- Conversational only — no tool approval flow; pure dialogue
- Memory-aware — semantically relevant memories surface alongside each exchange
- Teachable — the operator can inject facts directly into Timmy's live memory
- Persistent — the session survives page refreshes; history accumulates over time
- Local — always backed by Ollama; no cloud inference required
This is the foundation for future LoRA fine-tuning, RL training harnesses, and eventually real-time self-improvement loops.
Scope (v1 — this PR)
| Area | Included | Deferred |
|---|---|---|
| Conversational UI | ✅ Chat panel with HTMX streaming | Streaming tokens |
| Live memory sidebar | ✅ Semantic search on each turn | Auto-refresh on teach |
| Teaching panel | ✅ Inject personal facts | Bulk import, LoRA trigger |
| Session isolation | ✅ Dedicated nexus session ID |
Per-operator sessions |
| Nav integration | ✅ NEXUS link in INTEL dropdown | Mobile nav |
| CSS/styling | ✅ Two-column responsive layout | Dark/light theme toggle |
| Tests | ✅ 9 unit tests, all green | E2E with real Ollama |
| LoRA / RL harness | ❌ deferred to future issue | |
| Auto-falsework | ❌ deferred | |
| Bannerlord interface | ❌ separate track |
Acceptance Criteria
AC-1: Nexus page loads
- Given the dashboard is running
- When I navigate to
/nexus - Then I see a two-panel layout: conversation on the left, memory sidebar on the right
- And the page title reads "// NEXUS"
- And the page is accessible from the nav (INTEL → NEXUS)
AC-2: Conversation-only chat
- Given I am on the Nexus page
- When I type a message and submit
- Then Timmy responds using the
nexussession (isolated from dashboard history) - And no tool-approval cards appear — responses are pure text
- And my message and Timmy's reply are appended to the chat log
AC-3: Memory context surfaces automatically
- Given I send a message
- When the response arrives
- Then the "LIVE MEMORY CONTEXT" panel shows up to 4 semantically relevant memories
- And each memory entry shows its type and content
AC-4: Teaching panel stores facts
- Given I type a fact into the "TEACH TIMMY" input and submit
- When the request completes
- Then I see a green confirmation "✓ Taught: "
- And the fact appears in the "KNOWN FACTS" list
- And the fact is stored in Timmy's live memory (
store_personal_fact)
AC-5: Empty / invalid input is rejected gracefully
- Given I submit a blank message or fact
- Then no request is made and the log is unchanged
- Given I submit a message over 10 000 characters
- Then an inline error is shown without crashing the server
AC-6: Conversation can be cleared
- Given the Nexus has conversation history
- When I click CLEAR and confirm
- Then the chat log shows only a "cleared" confirmation
- And the Agno session for
nexusis reset
AC-7: Graceful degradation when Ollama is down
- Given Ollama is unavailable
- When I send a message
- Then an error message is shown inline (not a 500 page)
- And the app continues to function
AC-8: No regression on existing tests
- Given the nexus route is registered
- When
tox -e unitruns - Then all 343+ existing tests remain green
Future Work (separate issues)
- LoRA trigger — button in the teaching panel to queue a fine-tuning run using the current Nexus conversation as training data
- RL harness — reward signal collection during conversation for RLHF
- Auto-falsework pipeline — scaffold harness generation from conversation
- Bannerlord interface — Nexus as the live-memory bridge for in-game Timmy
- Streaming responses — token-by-token display via WebSocket
- Per-operator sessions — isolate Nexus history by logged-in user