RAG Incident Case Study: A Stale Vector Index Invented a Refund Policy
Impact
For 47 minutes, a support assistant told 23 customers that annual plans could be refunded within 60 days. The approved policy was 30 days. Seven refunds entered manual review before support disabled AI-generated replies.
The generation model had not changed. The deployment that triggered the incident only rebuilt the vector index.
---
Investigation
Engineers replayed the question and inspected retrieval before reading model traces. The top result was an archived 2024 policy chunk containing the 60-day rule. Its metadata said status=active because the migration script defaulted missing status fields to active.
The index also contained vectors from two embedding models. Both produced 384 dimensions, so the vector store accepted them. Dimensional compatibility hid semantic incompatibility. Query vectors from the new model ranked some old-model chunks unpredictably.
The final prompt included source text but the response API discarded source IDs. The model gave a fluent answer, and the release evaluation checked keyword overlap rather than whether each claim was supported by the retrieved source.
Why Existing Checks Passed
- Collection count matched the expected chunk count.
- Dimension validation passed because both models used 384 values.
- Smoke tests asked evergreen product questions, not changed policies.
- The evaluator rewarded the words
refundand60 daysbecause its reference set was stale too. - No release gate asserted that only active document versions could be cited.
Fix
The team created versioned collections whose schema includes embedding model digest, chunker version, source checksum, and policy effective date. Rebuilds write to a new collection, run evaluation, then atomically switch an alias. Archived documents are excluded by an explicit filter rather than a default.
Responses now return source IDs and effective dates. A faithfulness check rejects claims that cannot be mapped to supplied context, and high-impact policy answers require a current authoritative source. The evaluation dataset lives with the policy version and includes changed, ambiguous, and no-answer questions.
Lessons
A matching vector dimension is necessary but not sufficient. Retrieval quality is a versioned data contract. Index counts do not prove semantic correctness, and a language model should not be asked to compensate for bad evidence.
Practice the technical failures in Repair a RAG Dimension Mismatch, Recover Dataset Drift, and Gate RAG Faithfulness.