Skip to content

ADR 0127: Map freshness ships file-linked facts, not verdicts

Status: accepted

Context

§

The no-argument map overview originally treated any tracked path beneath a linked path as covered. Orientation pages often link broad directories such as src/, src/engine/, and templates/, so unrelated work anywhere below them made a region read behind. Four minutes after one disciplined landing, five of this repo's eight regions read behind, including pages updated eleven minutes earlier.

That verdict was least useful on the agent-facing JSON surface. It carried no calibrated threshold, while code_paths exposed the entire inferred coverage set. The review payload was 12,201 bytes, about half of it the regions block and roughly 4 KB of that path lists.

Decision

§

A region's freshness coverage consists only of the specific tracked files its pages link. A directory link is an orientation gesture, not evidence that the region documents every descendant.

Each serialized region carries pages_changed_at and code_changes_since directly when Git can derive both facts. Both fields are absent when freshness is unknown. The wire carries no status, threshold, sentinel, or coverage paths. The human view renders the same facts or a short unknown line from that shared shape.

No interpretive verdict will return until repository evidence can calibrate one. Facts are additive-safe; a prematurely shipped semantic would be costly to correct after clients depend on it.

Consequences

§
  • Regions that cite only directories, or cite no tracked files, honestly report unknown freshness instead of inheriting changes from an entire subtree.
  • CLI JSON and MCP stay identical because both render the same result core and schema. Their payload is smaller and no longer tells an orienting agent to distrust the map it was sent to consult.
  • File links now do double duty as navigable documentation and precise freshness coverage. Pages that need freshness facts must cite the files that ground their claims.
  • Commit count remains the measurement grain. Removing the verdict de-fangs its atomicity penalty while leaving future calibration open.
choose openEsc close