triage_pending / score_proposal build duplication (and contradiction) pools from every approved claim and page title — including ARCHIVED / SUPERSEDED / REDACTED claims and ARCHIVED pages.
So if a human archives a claim and an agent re-files the same text, triage scores duplication_risk=1.0 and recommends reject, as if the archived twin were still live knowledge. Same for page titles.
where
src/vouch/triage.py — _claim_text_pool, _duplication_risk_structural (PAGE branch), embedding hit consumers, contradiction claim lookup
why it matters
Triage is the advisory gate on the pending queue. Archiving is how operators retire knowledge; treating archived twins as live duplicates makes lifecycle controls decorative and blocks legitimate re-proposals after a deliberate archive.
Same class as recall (#490/#494), search (#581), digest (#625), context packs: live advisory surfaces drop retracted artifacts.
repro
put_claim with text T, then set status: archived.
- Propose a claim with the same text T; enable triage (heuristic backend).
- Today:
duplication_risk.score == 1.0, often recommendation == reject.
- Expected: archived twin ignored; duplication stays low unless a live twin exists.
suggested fix — filter _RETRACTED_CLAIM_STATUSES from claim pools / embedding claim hits / contradiction partners; skip PageStatus.ARCHIVED in the page-title pool.
triage_pending/score_proposalbuild duplication (and contradiction) pools from every approved claim and page title — includingARCHIVED/SUPERSEDED/REDACTEDclaims andARCHIVEDpages.So if a human archives a claim and an agent re-files the same text, triage scores
duplication_risk=1.0and recommends reject, as if the archived twin were still live knowledge. Same for page titles.where
src/vouch/triage.py—_claim_text_pool,_duplication_risk_structural(PAGE branch), embedding hit consumers, contradiction claim lookupwhy it matters
Triage is the advisory gate on the pending queue. Archiving is how operators retire knowledge; treating archived twins as live duplicates makes lifecycle controls decorative and blocks legitimate re-proposals after a deliberate archive.
Same class as recall (#490/#494), search (#581), digest (#625), context packs: live advisory surfaces drop retracted artifacts.
repro
put_claimwith text T, then setstatus: archived.duplication_risk.score == 1.0, oftenrecommendation == reject.suggested fix — filter
_RETRACTED_CLAIM_STATUSESfrom claim pools / embedding claim hits / contradiction partners; skipPageStatus.ARCHIVEDin the page-title pool.