Action routing:
- Button clicks now route through PA→Expert in v4 (was missing has_pa check)
- Previously crashed with KeyError on missing thinker node
WS error handling:
- Exceptions in WS handler caught and logged, not crash
- Frontend receives error HUD event instead of disconnect
- Prevents 1006 reconnect loops on action errors
Nodes panel:
- Fixed pipeline order (no re-sorting on events)
- Deduplicated node names (pa_v1→pa, expert_eras→eras)
- Normalized names in state tracker
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- /api/graph/active now includes node_details (model, max_tokens per node)
- graph.js calls initNodesFromGraph() after fetching active graph
- Nodes panel shows all nodes with models immediately on load (before first message)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Eras Expert domain context:
- Full Heizkostenabrechnung business model (Kunde>Objekte>Nutzeinheiten>Geraete)
- Known PK/FK mappings: kunden.Kundennummer, objekte.KundenID, etc.
- Correct JOIN example in SCHEMA prompt
- PA knows domain hierarchy for better job formulation
Iterative plan-execute in ExpertNode:
- DESCRIBE queries execute first, results injected into re-plan
- Re-plan uses actual column names from DESCRIBE
- Eliminates "Unknown column" errors on first query
Frontend:
- Node inspector: per-node cards with model, tokens, progress, last event
- Graph switcher buttons in top bar
- Clear button in top bar
- Nodes panel 300px wide
- WS reconnect on 1006 (deploy) without showing login
- Model info emitted on context HUD events
Domain context test: 21/21 (hierarchy, JOINs, FK, PA job quality)
Default graph: v4-eras
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>