Commit Graph
1 Commits
Author SHA1 Message Date
David F GliddenandClaude Opus 5 9bc84a6f16 [FIX] vault-links.py: resolve Obsidian links from the files, with controls
An Obsidian link census is only worth acting on if it can be trusted, and twice
on 2026-08-23 we were one step from acting on numbers that were wrong: a regex
census that read 52 path-form links as broken, and a fuzzy matcher that offered
to rewrite [[2025-05-30]] as [[2025-08-30]] — different days, not aliases.

Implements Obsidian's resolution order (exact path, basename, alias, then
case-insensitive; ambiguous basenames to the shortest path) over the files
themselves. Not the app's index: that is a 43 MB LevelDB cache which, measured
this afternoon, was 78 minutes stale and held ZERO entries for a note created
the same day (control: 29 entries for a note months old). It also carries a
LOCK — freshest while Obsidian runs, readable only while it does not.

NEVER fuzzy-matches. Date- and week-shaped targets get no candidate at all,
with a positive control proving that is a refusal and not a broken function.

The first run was PASS-BUT-FALSELY and the log records it: selftest green at
18/18 while the live vault reported 8,296 dead targets, of which 7,830 were web
paths and app URLs the tool had no business judging. The fixture contained no
web links, so the selftest certified its author's blind spot. Now 23/23 with
two positive controls proving the new filter did not silence real breakage.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQKeKY9T9d95KpvHwwok8T
2026-08-23 20:00:01 +02:00