Claude Obsidian v2.2.0 closes the open backlog after a full review of every issue, pull request, and branch: lint scoping, lock recovery, host validation, a layout change required for claude.ai plugin distribution, a single page-type vocabulary, gitignore-aware link resolution, and a ZCode host adapter.
Highlights
- Lint skips dot-prefixed directories by default (
.raw/,.claude/,.trash/), gains a repeatable--exclude GLOBflag with a matching engine parameter and vault-config array, and drops gitignored candidates from ambiguous wikilink resolution (#159, #163, #183, #184). --force-stale-lockcan reap a confirmed-dead same-host owner before--stale-after, for both the mutation lock and the capture queue lock, and runtime reads tolerate metadata-only mtime touches while still failing closed on any content change (#157).- The public-host validator rejects hex-dotted, octal-dotted, and short-form loopback spellings.
- The five setup scripts moved from
bin/toscripts/, because claude.ai rejects organization-distributed plugins with a top-levelbin/; package validation now guards against its return (#138). Invocations change frombash bin/setup-*.shtobash scripts/setup-*.sh. - The page-type vocabulary is declared once in
claude_obsidian/page_schema.py,questionis routable in every mode, andwiki-mode.py routeexplains rejections (#148, #149). - Twelve skills state how
../wiki/references/links resolve, enforced by package validation (#170). - Native Windows: CRLF frontmatter parses in contextual prefixes (#179, #180), test runs no longer crash on non-ASCII labels (#178), and the docs explain the
python3interpreter requirement for hooks plus the Claude Code release requirement (#162, #168). - New ZCode host adapter (
--host zcode) withZCODE.md(#146); scaffolded vaults pin absolute wikilinks (#182); wiki-ingest prefers markdown links for citable URLs (#171, #176). ATTRIBUTION.mdcredits the adopted reranker designs from #62 and #77.
Contributor pull requests merged in this release: #146, #149, #159, #176, #178, #180, #182. Maintainer fixes were promoted through PR #186 and the release through PR #187.
Upgrade and migration
Upgrade the product independently from your vault. If you call the setup scripts from your own automation, change bin/ to scripts/. If you rely on the linter walking dot-prefixed directories, pass --exclude patterns explicitly or add a name to _DOT_DIR_KEEPLIST; no known vault content lives under dot-prefixed folders. Existing mode.json files gain the questions_folder key through the documented migration path.
See the install guide and the Windows and WSL guide.
Verification
- 10 of 10 GitHub Actions jobs passed across Ubuntu, macOS, Windows portable, and the reproducible release artifact gate on the release PR; every merged PR ran the same matrix green.
- Full hermetic suite and executable contracts passed on every merged branch.
- Every fix landed with a regression test shown failing before the change.
- Fresh-context verifier over the integrated diff: one blocker found and closed before merge (the runtime read retry now requires a byte-identical confirmation read).
- Final archive built twice from merge commit
32ac5a02c4e082e4a5628ca810776375e134708eand matched byte for byte.
Artifact integrity
- File:
claude-obsidian-v2.2.0.zip - SHA-256:
6207f8aff60366adb441f4311e542fed42ef1edec1b303e78ee215cec8b64ffa - Size: 3,145,865 bytes
- Payload: 203 files, 3,059,517 bytes
- Artifact audit: 0 errors
Known limitations
- Native Windows interactive testing was not available; the Windows portable automated surface passed, and the CRLF and interpreter findings rest on reporter reproductions plus code reading.
- Wildcard-DNS loopback names (for example
127.0.0.1.nip.io) remain a documented residual gap in the host validator. - The
.canvas/.basestem-addressing andName.md.mdresolution-order divergences noted in #163 are not addressed in this release.
Full changes: v2.1.1...v2.2.0