[[../INDEX]] or [[slack-agent/README]] — Obsidian resolves by basename, not relative path.
A vault accumulates entropy the way an old house does — quietly. This session built a tooling layer for the maintenance work that was getting deferred, then ran the first audit and repaired the navigation layer of one project subtree.
I asked whether an existing Obsidian skill covered three things: organizing the vault, cleaning up connections, and finding insights. The honest answer was that the kit existed in fragments — InfraNodus for insights, vault-ops for note management, mapupdate for the ecosystem graph — but no single workflow walked the vault to surface orphaned notes, broken wikilinks, or stale references.
The fix wasn't a single Swiss-army tool. The problem decomposes into three orthogonal concerns: a broad audit (find what's broken), a surgical repair (fix what's fixable), and a semantic scan (find what's structurally missing in a project's prose). Three skills, not one.
Three new slash commands, each with its own SKILL.md, scoped to a different concern. Read-only by default; modification requires an explicit --fix flag plus user confirmation. Output reports land in system/vault-hygiene/ with Bases-queryable frontmatter so they aggregate over time.
Walks the vault to detect orphan notes (zero inbound wikilinks), broken wikilinks (targets that don't resolve), and duplicate titles. Produces a Bases-friendly markdown report. Read-only.
system/vault-hygiene/YYYY-MM-DD-vault-sweep.md
Builds an InfraNodus knowledge graph from a folder's prose, surfaces structural gaps, isolated clusters, and gateway concepts. The targeted, project-scoped version of infranodus-expert.
system/vault-hygiene/YYYY-MM-DD-insight-scan-<slug>.md
Surgical wikilink audit with file:line precision. Categorizes every broken link into auto-fix-case / confirm-typo / stale / dead. With --fix, applies trivial repairs after explicit confirmation.
system/vault-hygiene/YYYY-MM-DD-connection-cleanup-<slug>.md
The three chain naturally. Sweep finds the scope, cleanup repairs the wikilinks, insight-scan tells you what's structurally missing in the prose before you build the next INDEX.
sweep → cleanup --fix → insight-scan → INDEX.md
First run scoped to projects/shur/ — 459 markdown files. The raw numbers looked terrifying (748 broken wikilinks, 194 orphans, 41 duplicates). After filtering, three real signals emerged.
The biggest finding wasn't a number — it was a discovery about the vault itself. Wikilinks in this vault serve two distinct purposes: file references (the conventional Obsidian use), and InfraNodus-style entity tagging where [[ReelShort]] is semantic markup, not a file link. Of 2,439 wikilink occurrences in the scope, 984 are conceptual markup. A naive broken-link audit conflates them and produces useless noise.
The skill now pattern-matches source files to disambiguate. Files matching *-ontology.md, vertical-*-ontology/, SESSION-TRANSCRIPT*, or state/brand-profiles/ have their broken wikilinks classified as conceptual-markup rather than file-target.
[[../INDEX]] or [[slack-agent/README]] — Obsidian resolves by basename, not relative path.
[[ShurAI]] referenced as bare shur (16x), [[SHUR IQ]] as case-variant of ShurIQ (9x), [[ontology]], [[consensus scoring]], [[palantir]] — referenced enough that a canonical reference note would tie the discourse together.
.venv/site-packages/*/licenses/LICENSE.md produced 100+ false-positive orphans. Filter additions baked back into the skill: .venv/, venv/, site-packages/, dist-info/, licenses/, __pycache__/, egg-info/.
The MOC layer is where every navigation path starts. 36 broken wikilinks there is the highest-leverage place to spend a half hour. Fixed across four files.
| File | Fixes | Pattern |
|---|---|---|
projects/shur/INDEX.md |
14 | Stripped value-flows/ prefix from 14 wikilinks; cross-project paths converted to markdown links; 6 phantom targets marked TBD |
projects/shur/hasbro/INDEX.md |
5 | Path-style → markdown links; case normalizations |
projects/shur/hasbro/competitive-intel/README.md |
4 | All [[../...]] path-style → markdown links |
projects/shur/content-factory/INDEX.md |
3 | Same pattern: path-style → markdown links |
The 10 remaining flagged wikilinks are classifier false positives — references to .base files (resolved by the Bases plugin, not standard Obsidian), intentional concept-tag markup ([[infranodus]], [[ShurAI]]), and one path-style link that does resolve in Obsidian. The strict-basename classifier doesn't recognize these cases yet.
Before building the value-flows INDEX, I ran /vault-insight-scan against the folder to inform the structure. Twenty-two markdown files, 141KB of corpus, fed into a new InfraNodus graph.
vault-shur-value-flows| Gap | What it means |
|---|---|
| Integration ↔ Valuation | InfraNodus/MCP/DEVONthink tooling isn't connected to investor-facing valuation narratives. The technical defensibility story isn't being told. |
| Brand Intelligence ↔ Knowledge Dynamics | Outputs (stack rankings, flywheel) are structurally isolated from the knowledge-graph processes that produce them. The production chain isn't documented. |
| Brand Intelligence ↔ Valuation | Traction story isn't connected to investment thesis. Two of the three gaps converge on the valuation cluster — that's the biggest under-bridged area. |
The clusters then mapped directly onto the structure of the new value-flows/INDEX.md. Methodology, Integration & Architecture, Brand Intelligence Outputs, Investment & Valuation, Operations & Economics, Future Revenue, Dated Engagement Analyses. The hub explicitly calls out the three gaps so a future reader knows what bridging notes are missing.
The first run was partly a calibration exercise. Three filter improvements were folded back into vault-sweep/SKILL.md so future runs benefit from today's learnings.
.venv/, venv/, site-packages/, dist-info/, licenses/, __pycache__/, egg-info/
Four immediate next moves and a small set of skill-maturity improvements. None are urgent; all are real.
vault-shur-value-flows. 13 clusters mapped onto INDEX structure.
/connection-cleanup projects/shur --fix for SHUR IQ → ShurIQ (9 refs) and the bare shur → ShurAI cases (16 refs). Manual review then apply.
.base extension) should resolve as valid wikilink targets, not get flagged as broken.
[[folder/file]] resolve in Obsidian when the path is valid. Classifier should recognize this pattern.