← All patterns

FFA-005 · externally-reported · executable

Fresh review, stale citation

Scope and affected architecture

Applies when an automated reviewer re-runs for a new revision but carries human-readable citations forward from an earlier document layout. The outer review receipt can be fresh while a line range inside its evidence no longer identifies the claimed rule or code.

Symptom and observable signature

The review names the current commit and reports a recent run, yet following one of its citations opens unrelated content.

Root mechanism

The producer stores a positional label and later rebuilds only the URL or commit part of the citation. Commit freshness and citation freshness become separate facts, but the consumer validates only the first. Line numbers are presentation coordinates, not stable evidence identity.

Minimal safe fixture

The fixture starts with a synthetic rule at line 3, inserts four harmless lines above it, and models a new review receipt bound to the new synthetic head SHA. The receipt keeps the old line number, so the vulnerable gate accepts a fresh review whose citation now resolves to a heading instead of the rule.

python3 atlas.py run FFA-005 --mode reproduce

The fixture is offline and uses only in-memory strings and synthetic commit identities.

Deterministic detector

Resolve every citation against the exact referenced revision and compare the retrieved content with the stable rule ID or expected content digest. Report both a content mismatch and positional drift when the anchor exists elsewhere in the same file.

python3 atlas.py run FFA-005 --mode detect

Repair invariant

Stable rule identity or a content anchor selects evidence from the exact referenced blob. File and line ranges are then rendered from that retrieval for display; a cached range never serves as the identity of the rule.

Regression check

The repaired fixture locates the stable rule ID in the current document, verifies its content digest, and only then emits the current line number. It proves that moving unchanged content does not detach the citation from its meaning.

python3 atlas.py run FFA-005 --mode regress

False positives and non-applicable cases

A line range can be reliable when the cited blob itself is immutable and the range was computed from that exact blob. Stable anchors can also be ambiguous; duplicate or missing IDs must fail closed rather than selecting the first match. The detector validates citation integrity, not whether the cited prose is a correct or sufficiently precise policy.

Provenance

Externally reported. A public DEV discussion identified the split between a fresh review and stale citations and linked a public reproduction pull request. On 2026-09-10, the public review page said the review was updated through commit 3ffacd9 while its body still displayed earlier line ranges for the cited rule and source. The fixture above is an independent clean-room model with synthetic text and identities; it copies no repository content and makes no claim about frequency, impact, or cause inside the named review service.