Origin: the os-dev run for #12516 (symbol-anchor citation grammar). Filed unassigned as the scope report that card's dispatch prescribed — the mechanism + the two measured-rotted entries landed there; adoption across the rest of the ledger is this card.
What exists now
Since #12516's PR, a liveness citation may anchor the consuming symbol — packages/path/file.ts#symbolName — and check:liveness fails red when the symbol leaves the cited file. The anchor lives inside the existing evidence/producer string (no ledger schema change), so adoption is per-citation. Day-one anchored population: the two action.json entries (target, requiredPermissions).
Why adoption is a real worklist, not polish
The remaining ~298 live-entry local line citations still rot IN RANGE (the #12516 class: file exists, line in range, file names the key, consumer moved to another line). Measured on the tree at 2b4178aa5 during the route decision: requiring the property key within a window of the cited line misses 173/298 at W=10, 143/298 at W=20, 117/298 at W=40. That population mixes true in-range drift with matcher limitations (keys read via helpers, destructured locals, citations at declaration sites), and the two cannot be told apart without re-closing each call graph by hand — which is exactly why the window detector was NOT switched on as a gate (the 48-of-227 noise lesson in evidence.mts's header), and why this migration cannot be mechanical.
Shape of the work
Per entry, oldest verifiedAt first, hot files first (action-execution.ts is 1670 lines and drifted twice in one day):
- Re-close the call graph (read the code, not the diff).
- Re-cite anchored to the consuming symbol (
file.ts#symbol, line optional), stamp verifiedAt.
- Where the consumer is gone or foreign, take the other two repairs the gate's guidance names (re-attribute with a realm marker, or re-classify under ADR-0049).
Batchable by ledger file; each batch is independently landable. The census script used for the numbers above is reproducible from the #12516 report (window key-proximity over live-entry local citations).
Blocked-by: the #12516 PR (the anchor grammar must be on main first).
Dedup (searched 2026-08-28)
#11210 / #11457 (closed) built the line bound and the key-mention check and each names the in-range residual without covering adoption; #7142 (closed) was the objectui-side citation-repair sweep; #12516 (open) delivers the mechanism and exactly two repoints, and its dispatch explicitly scoped the sweep OUT. No open card covers anchor adoption.
⚠️ Dedup channel deviation: repo-scoped REST reads return HTTP 403 from this dev seat (probed this session: labels and issues endpoints both 403 with the seat token), so the REST-first dedup rule could not be followed; this search used one targeted MCP semantic search (non-empty result set, channel self-validating) over the PM-supplied dedup readings carried by the #12516 dispatch.
Generated by Claude Code
Origin: the os-dev run for #12516 (symbol-anchor citation grammar). Filed unassigned as the scope report that card's dispatch prescribed — the mechanism + the two measured-rotted entries landed there; adoption across the rest of the ledger is this card.
What exists now
Since #12516's PR, a liveness citation may anchor the consuming symbol —
packages/path/file.ts#symbolName— andcheck:livenessfails red when the symbol leaves the cited file. The anchor lives inside the existingevidence/producerstring (no ledger schema change), so adoption is per-citation. Day-one anchored population: the twoaction.jsonentries (target,requiredPermissions).Why adoption is a real worklist, not polish
The remaining ~298 live-entry local line citations still rot IN RANGE (the #12516 class: file exists, line in range, file names the key, consumer moved to another line). Measured on the tree at
2b4178aa5during the route decision: requiring the property key within a window of the cited line misses 173/298 at W=10, 143/298 at W=20, 117/298 at W=40. That population mixes true in-range drift with matcher limitations (keys read via helpers, destructured locals, citations at declaration sites), and the two cannot be told apart without re-closing each call graph by hand — which is exactly why the window detector was NOT switched on as a gate (the 48-of-227 noise lesson in evidence.mts's header), and why this migration cannot be mechanical.Shape of the work
Per entry, oldest
verifiedAtfirst, hot files first (action-execution.tsis 1670 lines and drifted twice in one day):file.ts#symbol, line optional), stampverifiedAt.Batchable by ledger file; each batch is independently landable. The census script used for the numbers above is reproducible from the #12516 report (window key-proximity over live-entry local citations).
Blocked-by: the #12516 PR (the anchor grammar must be on main first).
Dedup (searched 2026-08-28)
#11210 / #11457 (closed) built the line bound and the key-mention check and each names the in-range residual without covering adoption; #7142 (closed) was the objectui-side citation-repair sweep; #12516 (open) delivers the mechanism and exactly two repoints, and its dispatch explicitly scoped the sweep OUT. No open card covers anchor adoption.
Generated by Claude Code