Sections in this lesson
Conflicting & Stale Evidence
Two documents can disagree because they describe different versions or effective dates.
Reviewed: · Content owner: Interview Preparator
What you will learn
- Time and authority are evidence fields
- Expose unresolved conflict
- Invalidate derived artifacts
Before you start
The flow
- 1.Identify scope
- 2.Inspect evidence
- 3.Apply host control
- 4.Run negative cases
- 5.Compare benign behavior
- 6.Review remaining risks
Time and authority are evidence fields
Two documents can disagree because they describe different versions or effective dates. Preserve source version, validity period and owner, not only retrieval similarity. A newer page is not automatically more authoritative.
The fixture excludes expired sources before claim checking. This is a validity policy; it does not resolve arbitrary contradictions between two natural-language documents.
Expose unresolved conflict
State the relevant version and conflict when evidence cannot support one answer. Ask for the missing context or abstain instead of blending incompatible statements into a plausible compromise.
A source ID with a matching field can still be outdated in the real world. Groundedness and factual correctness must remain separate review questions.
Invalidate derived artifacts
When a source changes, update embeddings and versioned cache entries and preserve the old evaluation reference for comparison. Deletion and permission revocation require current authorization checks as well.
Compare stale-source and contradictory-value cases with an independent answerability label. Do not silently relabel failures as unanswerable just to improve the reported score.
Try it
// Closed-world fact fixtures only. Equality of structured facts is NOT an NLI judge.const object = value => value !== null && typeof value === 'object' && !Array.isArray(value);export function authorizedSources(sources, scope, now) { if (!object(scope) || typeof scope.tenant !== 'string' || typeof scope.user !== 'string' || !Number.isFinite(now)) throw new Error('Invalid trusted scope/time'); return sources.filter(source => source.tenant === scope.tenant && source.approved === true && !source.deleted && source.expiresAt > now && source.readers.includes(scope.user));}export function verifyClaims(claims, sources, scope, now) { if (!Array.isArray(claims) || claims.length > 20) throw new Error('Invalid claims'); const evidence = authorizedSources(sources, scope, now); return claims.map(claim => { if (!object(claim) || Object.keys(claim).sort().join(',') !== 'key,sourceId,value' || ![claim.key,claim.sourceId,claim.value].every(value => typeof value === 'string' && value.length > 0 && value.length <= 200)) throw new Error('Invalid structured claim'); const source = evidence.find(item => item.id === claim.sourceId); const value = source?.facts[claim.key]; return { ...claim, label: value === undefined ? 'INSUFFICIENT_EVIDENCE' : value === claim.value ? 'SUPPORTED' : 'CONTRADICTED' }; });}export function answerPolicy(claims, sources, scope, now) { const labels = verifyClaims(claims,sources,scope,now); return { status:labels.length > 0 && labels.every(item => item.label === 'SUPPORTED') ? 'ANSWER' : 'ABSTAIN', claims:labels };}export function retrievalRecall(relevantIds, retrievedIds) { if (!relevantIds.length) return null; return [...new Set(relevantIds)].filter(id => retrievedIds.includes(id)).length / new Set(relevantIds).size;}export function judgeAgreement(human, judge) { if (human.length !== judge.length) throw new Error('Unpaired annotations'); return human.length ? human.filter((label,index) => label === judge[index]).length / human.length : null;}Run npm run examples:security and npm run eval:security. This source is a deterministic teaching fixture; it does not prove live model safety, NLI, production auth or OS/network isolation.
Interview questions
What boundary matters in Conflicting & Stale Evidence?
The fixture excludes expired sources before claim checking. This is a validity policy; it does not resolve arbitrary contradictions between two natural-language documents.
What does the executable fixture demonstrate?
A source ID with a matching field can still be outdated in the real world. Groundedness and factual correctness must remain separate review questions.
What remains a production integration responsibility?
Compare stale-source and contradictory-value cases with an independent answerability label. Do not silently relabel failures as unanswerable just to improve the reported score.
Practice
Extend one negative scenario and its authorized positive counterexample for Conflicting & Stale Evidence.
Check your solution
- State the trusted input and effect boundary.
- Assert the expected status and observed effect.
- Report coverage and limitations without claiming production readiness.
Official references
Continue learning
Category sequence
AI Reliability & Hallucinations
Lesson 7 / 10
Was this lesson useful?
Change notes: 2026-10-31: security/reliability curriculum and source-bound fixture.