wiki-lintlisted
Install: claude install-skill pivoshenko/pivoshenko.ai
# Wiki lint
Vault: `/Users/volodymyr.pivoshenko/Library/Mobile Documents/iCloud~md~obsidian/Documents/Vault`
Karpathy lint loop: scan -> report -> fix with approval. Read-only until user approves fixes.
## Preflight — before ANY fix
- iCloud eviction: `find <vault> -name '*.icloud'` → any hit = partially-synced vault. Report findings, **abort all fixes** (evicted notes look deleted; "fixing" corrupts the catalog).
- Conflicted copies: filenames matching `* 2.md` / `*conflict*` → flag for manual merge, never auto-pick a side.
## Checks
1. Read vault `CLAUDE.md` + `INDEX.md` first.
2. Sweep all `*.md` (skip `01 DAILY NOTES`, `97 MEMORY`, `98 ATTACHMENTS`, `99 TEMPLATES`, `.obsidian`):
- **frontmatter** — missing block, missing required keys per type contract, invalid `status`/`source_type` values, non-kebab tags
- **dead links** — `[[target]]` with no matching note (`rg -o '\[\[[^\]|#]+' | sort -u` vs file list)
- **orphans** — notes nothing links to and INDEX.md doesn't list
- **index drift** — notes missing from INDEX.md; INDEX.md entries whose note is gone
- **stale projects** — `status: active` + `updated` > 60 days ago
- **stale drafts** — `status: drafting|review` + `updated` > 30 days ago
- **inbox** — items sitting in `00 INBOX/`
- **secrets** — `rg -i 'api[_-]?key|secret|token|password|_pat_'` across ALL notes incl. daily notes → flag to user, never quote values
- **layout** — every top-level dir in `03 PROJECTS/` contains `<dirname>.md