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. 1.Identify scope
  2. 2.Inspect evidence
  3. 3.Apply host control
  4. 4.Run negative cases
  5. 5.Compare benign behavior
  6. 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

reliability.mjs
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 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.