Retrieval-augmented eval harness is live
Rewrote the eval loop so it runs against a live vector index instead of a static snapshot. Numbers moved: p50 latency from 780ms → 460ms, hallucination rate on the internal QA set from 8.1% to 3.2%. Interesting failure mode: it now confidently refuses questions it used to hallucinate — feels like progress but I want to measure the refusal quality separately.