Repository navigation
Emit Obsidian URIs using internal vault id (0.4) - #13
Merged
Merged
Conversation
Adds docs/planning/{backlogs,epics,milestones,tasks}/ from the
sdlc plugin's /sdlc:setup, with Obsidian Bases files per entity.
Includes the obsidian-vault-id-uri task spec.
Emit Obsidian URIs using internal vault id (0.4)
Switch `build_uri` to format URIs as `vault=<id>` instead of `vault=<name>`. When two registered Obsidian vaults share a folder basename (e.g. `~/work/notes` and `~/personal/notes`), the basename form was ambiguous and Obsidian's URI resolver picked one non-deterministically. The internal vault id is stable and unique, so launches are now deterministic. - `Vault.id` is now load-bearing; `#[allow(dead_code)]` moves to `name` (retained for diagnostic context and test fixtures). - New test `uri_disambiguates_vaults_with_identical_basename` proves the fix. - `vault=<name>` and `vault=<id>` are equivalent in Obsidian's URI scheme, so unique-name vaults behave identically. - Bumps version to 0.4.0 with a BREAKING-IF-OBSERVED note for downstream consumers that scrape the URI.
sksizer
added a commit
that referenced
this pull request
May 20, 2026
Shipped via #13 (path-opener 0.4.0).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
build_urito emitobsidian://open?vault=<id>instead ofvault=<name>. Eliminates non-deterministic launches when two registered Obsidian vaults share a folder basename (e.g.~/work/notesand~/personal/notes).Vault.idbecomes load-bearing;#[allow(dead_code)]moves toVault.name(still retained for diagnostic context and test fixtures).Task
docs/planning/tasks/2026-05-19-obsidian-vault-id-uri.mdAcceptance criteria
build_uriemitsvault=<id>for both vault-root and file-in-vault arms;pathfallback is unchanged. (auto —cargo test obsidian::tests::)uri_disambiguates_vaults_with_identical_basenameproves two same-name vaults produce distinct URIs. (auto)Vault.idis no longer#[allow(dead_code)]. (auto —cargo clippy -- --deny warningsviajust full-check)CHANGELOG.mddocuments the 0.4.0 behavior change with the BREAKING-IF-OBSERVED callout. (auto — visible in diff)path-opener0.4.0 published to crates.io. (deferred-user —cargo publishis irreversible and must be authorized by the maintainer; will run after merge)just full-checkpasses. (auto)Test plan
cargo publishpost-merge for AC-6.sksizer/polish) bumps topath-opener = "0.4"and confirms duplicate-name vaults route to the right one. Tracked in polish task2026-05-19-obsidian-uri-vault-id.Follow-up tasks spawned
Plugin-side gaps surfaced during the run were filed against
sksizer/dev(the plugin repo), not this project — see https://github.com/sksizer/dev/pull/42:2026-05-20-setup-obsidian-backlog-dir-mismatch—/sdlc:setup --obsidianwrites into singularbacklog/dir; needed manual fix mid-run.2026-05-20-task-work-rebase-frontmatter-conflict— Step 5b's gate-then-flip produces a deterministic rebase conflict every run.2026-05-20-task-work-worktree-init-language-agnostic— Step 4's init block assumes JS/pnpm/lefthook; no-op on pure-Rust repos.