One function
The RAG service is a single function: build_rag_context(query) -> str | None. It was designed for Claude-Pippa's chat route first — no thought given to variants. Each variant route adds a one-liner: rag_context = await build_rag_context(prompt_text). The function doesn't know which brain will consume it.
Cross-cutting without cross-contamination
RAG is shared because the underlying operation (semantic search over ChromaDB) is genuinely the same regardless of brain. The service is shared; the routes are still independent.
Graceful degradation
If Ollama isn't running, build_rag_context returns None. The route proceeds without retrieved context. Better degraded chat than a hard error.