vouch lint (health.lint) is documented as the "user-actionable problems"
subset of the health checks. its stale-claim check runs over every claim with
no status guard, so a retired claim — superseded, archived, or redacted —
whose freshness anchor is older than stale_after_days is reported as a
stale_claim warning.
that is non-actionable noise: a retired claim is terminal and is not expected
to be refreshed. the two sibling surfaces that compute the same "stale" notion
both already exempt retired claims, and their comments explicitly describe this
as lint's intended behaviour:
metrics.py: retired = {SUPERSEDED, ARCHIVED, REDACTED}; stale is only
measured on live claims — "matching lint, which only warns on claims a
reader would still trust" and "retired claims are intentionally exempt —
they're not expected to be refreshed."
digest.py: skips c.status in _RETIRED_CLAIM_STATUSES before the stale
test — "same freshness anchor and thresholds as vouch metrics /
vouch lint."
so lint is the odd one out.
repro
register a source, then add an archived claim whose updated_at is
older than the freshness window (e.g. 400 days). vouch lint emits a
stale_claim finding for it; vouch metrics and vouch digest do not.
expected
lint exempts retired statuses from the stale check, matching metrics/digest.
vouch lint(health.lint) is documented as the "user-actionable problems"subset of the health checks. its stale-claim check runs over every claim with
no status guard, so a retired claim —
superseded,archived, orredacted—whose freshness anchor is older than
stale_after_daysis reported as astale_claimwarning.that is non-actionable noise: a retired claim is terminal and is not expected
to be refreshed. the two sibling surfaces that compute the same "stale" notion
both already exempt retired claims, and their comments explicitly describe this
as lint's intended behaviour:
metrics.py:retired = {SUPERSEDED, ARCHIVED, REDACTED}; stale is onlymeasured on live claims — "matching lint, which only warns on claims a
reader would still trust" and "retired claims are intentionally exempt —
they're not expected to be refreshed."
digest.py: skipsc.status in _RETIRED_CLAIM_STATUSESbefore the staletest — "same freshness anchor and thresholds as
vouch metrics/vouch lint."so lint is the odd one out.
repro
register a source, then add an
archivedclaim whoseupdated_atisolder than the freshness window (e.g. 400 days).
vouch lintemits astale_claimfinding for it;vouch metricsandvouch digestdo not.expected
lintexempts retired statuses from the stale check, matching metrics/digest.