Context
Parent: #8757. RAG audit finding: with LOOPOVER_REVIEW_RAG=true and a provider chain of only CLI-subscription providers (e.g. AI_PROVIDER=claude-code) and no AI_EMBED_BASE_URL, every embed call throws (claude_code_no_embed, src/selfhost/ai.ts:965) and the index never populates — surfaced only as per-batch runtime ERROR logs (rag.ts:437-449). The review-CLI path already gets a fail-LOUD boot preflight (#1566 pattern in src/server.ts); RAG's embed dependency does not.
Requirements
- At boot, when RAG is enabled and neither AI_EMBED nor any embed-capable member of the AI chain exists, log the same class of loud structural warning as selfhost_ai_cli_missing (do not crash — degrade exactly as today, but say so once, at startup).
- Add AI_EMBED_BASE_URL/AI_EMBED_MODEL mentions to docker-compose.yml's qdrant/ollama profile hint comments (today only .env.example line ~791 explains it).
Deliverables
Test Coverage Requirements
99%+ patch coverage, branch-counted on the preflight.
Context
Parent: #8757. RAG audit finding: with LOOPOVER_REVIEW_RAG=true and a provider chain of only CLI-subscription providers (e.g. AI_PROVIDER=claude-code) and no AI_EMBED_BASE_URL, every embed call throws (claude_code_no_embed, src/selfhost/ai.ts:965) and the index never populates — surfaced only as per-batch runtime ERROR logs (rag.ts:437-449). The review-CLI path already gets a fail-LOUD boot preflight (#1566 pattern in src/server.ts); RAG's embed dependency does not.
Requirements
Deliverables
Test Coverage Requirements
99%+ patch coverage, branch-counted on the preflight.