
<p><b>Key facts.</b></p>
<ul>
<li>Knowledge conflict is a leading driver of hallucination, not an edge case: ConflictBank built 7,453,853 claim-evidence pairs to measure it and names three causes, misinformation, temporal change, and semantic divergence (Su et al., <a href="https://arxiv.org/abs/2408.12076" target="_blank" rel="noopener">ConflictBank, arXiv:2408.12076</a>, NeurIPS 2024).</li>
<li>When retrieved evidence conflicts with what the model already believes, accuracy drops 9.7% to 29.9%, and the model fails two ways: it clings to its own prior, or it over-corrects to the wrong context (<a href="https://arxiv.org/abs/2506.08938" target="_blank" rel="noopener">FaithfulRAG, arXiv:2506.08938</a>, 2025).</li>
<li>Stronger retrieval models are not safer here: they show a Dunning-Kruger pattern, over-trusting internal memory even when the supplied evidence is correct (Jin et al., <a href="https://arxiv.org/abs/2402.14409" target="_blank" rel="noopener">Tug-of-war, arXiv:2402.14409</a>, 2024).</li>
<li><!-- conviction-start -->It trusts training over conflicting chunks; a better model inherits the rework.<!-- conviction-end --> (<a href="https://arxiv.org/abs/2408.12076" target="_blank" rel="noopener">arXiv:2408.12076</a>)</li></ul>
<h2>What does stale or conflicting context actually mean?</h2>
<p>Stale context and conflicting context are two different problems that look the same from the outside. Stale is when the index still holds last quarter's price, the old policy, or the deprecated API. The document changed. The vectors did not. Conflicting is when the top-k retrieval pulls chunks that disagree with each other. A current doc next to an archived one. Two sources with different numbers. Nothing in the prompt tells the model which to believe.</p>
<h2>Why does the model trust the wrong chunk?</h2>
<p>What looks like hallucination is often bad data. The model is working correctly, surfacing what the index contains. The index contains the wrong thing. The model has no way to distinguish a current chunk from a stale one unless you provide that signal. It does not know the policy changed last Tuesday. It knows what is in the index, and it answers from that.</p>
<h2>Why does a fresh index still go stale?</h2>
<p>Vector indexes are not live databases. They are snapshots. The update pipeline is a separate process that runs on its own schedule, and gaps accumulate between every document edit and the next re-embed. In fast-moving content: pricing, regulatory text, internal policy. That gap matters. An agent that found the right answer six weeks ago is giving stale information today. The index is authoritative from its own perspective. It just does not know what it does not know.</p>
<div class="fig"><img src="/blog/article12-diagram.png" alt="A retrieval pipeline showing a changed source document, a stale vector still in the index, two conflicting chunks entering the context window, and the model picking the outdated one"/></div>
<h2>What does this look like in a live system?</h2>
<p>Inter-context conflict is as dangerous as staleness. The model gets three retrieved chunks that disagree and synthesizes a confident answer from all of them. Nobody sees the seam. The agent cites a policy version that was superseded. Reports a price from Q4. Quotes a deprecated API endpoint. All from a fully functional retrieval system, returning exactly what it was asked for.</p>
<pre style="background:#0d1117;color:#e6edf3;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:0.9rem;line-height:1.65;padding:16px 18px;border-radius:12px;overflow-x:auto;margin:1.8rem 0;border:1px solid #20262e;white-space:pre;"><span style="color:#8b949e;">// Stamp every chunk so recency can win a conflict</span>
{ "text": "Return window is 30 days.", "source": "policy/returns.md", "version_date": "2026-05-18", "supersedes": "2025-11-02" } // Retrieval boosts the newest version; the stale one loses.
How do you stop it?
| Symptom | Cause | Fix |
|---|---|---|
| Old value returned | Stale index, no re-embed | Timestamp every chunk, recency boost, scheduled re-index |
| Two chunks disagree | Intra-context conflict | Rerank and dedupe, prefer newest, surface the conflict |
| Right fact ignored | Parametric over-trust | Conflict-aware decoding (CD2), instruct to cite and reconcile |
| Slow accuracy decay | Embedding / corpus drift | Monitor drift, re-embed on model upgrade, hybrid search |
| Confident wrong answer | No conflict check | Post-retrieval contradiction check, allow "uncertain" |
Source discipline, not a better retrieval model. Tag every chunk with a version date and a canonical flag. Expire stale documents from the index on a schedule tied to the document's own update cadence. When chunks conflict, surface the conflict explicitly rather than letting the model pick. Close the feedback loop: if a retrieved answer gets corrected, add the correction to the training signal. Knowing which parts of your retrieval pipeline are fresh and which are drifting is the pattern-level reliability VibeModel builds as the Pattern Intelligence Layer.
Frequently asked questions
Is this a model problem or a data problem?
Mostly a retrieval problem. The model resolves whatever context it is handed; if that context is stale or self-contradictory, a fluent wrong answer is the expected output. The fix is in freshness, conflict handling, and a grounding check, not in swapping the model.
How do I know my agent is using stale context?
Trace the retrieved chunks and their timestamps for a sample of answers. If the cited chunk predates the latest source edit, or two retrieved chunks disagree and neither is flagged, you have found it. Measuring only the final answer hides this entirely.
Which matters more, freshness or conflict handling?
Both, and they compound. Freshness keeps the wrong version out of the context; conflict handling decides correctly when two versions still reach it. Recency-aware ranking plus a contradiction check covers the common cases.
Does a bigger context window fix conflicting chunks?
No. A larger window often pulls in more contradictory sources, not fewer, and gives the model more to misweigh. Rerank to fewer, fresher, deduplicated chunks rather than flooding the context.

