Repository navigation
docs: record ADR-0016 and archive consolidate-vault-writes - #124
Merged
Merged
Conversation
Group 3 of consolidate-vault-writes: documentation only, no src/ or test/ changes. ADR-0016 records the decision the two preceding PRs implemented: one disk module (FsVaultProvider) owns note writes over a vault root; the VaultWriter seam is deleted rather than kept; VaultProvider survives resized to six note-file methods, as a stub point for tool tests and not as an abstraction over a plausible second backend; and FsVaultReader's errors-as-data convention is an explicit non-goal, left untouched. ADR-0009 stays Accepted and its body is unchanged. Its INDEX row gains a "VaultProvider method set refined in part by 0016" note, matching the 0003 -> 0015 precedent. Architecture docs brought back in line with the code: vault-provider.md (six methods, the two private resolution modes, why the seam survives), disk-write-path.md (edit_note added, plus the existing-note vs create-time error taxonomies), note-path-resolution.md, vault-registry.md, obsidian-lib.md (vault-writer.ts bullet removed, vault-aggregates.ts added), module-structure.md, and vault-reader.md. Refs #114 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Refs #114 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ult-writes Archive syncs two ADDED requirements (one identifier rule at one depth; one existing-note failure taxonomy, distinct from the create-time one) and two MODIFIED ones into openspec/specs/headless-vault-operations/spec.md. The spec's `## Purpose` enumeration gains `edit_note` by hand — a Purpose block is not expressible as a requirement delta, so this is a deliberate edit on the synced spec rather than a sync gap (task 3.7). Closes #114 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Group 3 (PR 3 of 3) of the
consolidate-vault-writesopsx change. Documentation only — nosrc/ortest/file changes.PR 1 (#122) folded
FsVaultWriterintoFsVaultProvider; PR 2 (#123) resizedVaultProviderto the six note-file methods and moved the aggregates out. This PR records the decision behind both and brings the docs back in line.ADR-0016
docs/adr/0016-one-disk-module-owns-note-writes.md, status Accepted. Per design D9 it states:FsVaultProvider) owns note writes over a vault root, over sharedreadRaw/writeRawhelpers with one fs-error mapping;VaultWriterseam is deleted, not kept — single consumer, failed the deletion test, and its divergence from the provider's mapping is what shipped edit_note write failure escapes as a bare Error without a code (ADR-0003 violation) #113;VaultProviderseam is actually for: a stub point for the operations tool tests, not an abstraction over a plausible second backend.docs/architecture/vault-provider.mdhad been claiming the latter ("a REST API, an Obsidian plugin bridge"); that claim is now gone;FsVaultReader's errors-as-data convention is untouched.ADR-0009 is not rewritten
Its body is unchanged and it stays Accepted. Its
INDEX.mdrow gains "VaultProvidermethod set refined in part by 0016", matching the 0003 → 0015 precedent for the same kind of narrowing.Its bullet (a) — "
listTagscounts frontmatter tags only, not inline#tags" — was flagged as a stale claim. It turns out to already carry its own correction: an italic_Follow-up (2026-08, change inline-tags-in-list-tags)_note sits directly beneath it, added by that change under this repo's append-don't-rewrite convention. It is a pre-existing item this change did not cause and does not need to fix; left alone deliberately, and recorded in the retrospective.Architecture docs
vault-provider.mdedit_note-goes-through-VaultWriterparagraph replaced; the two private resolution modes (resolveExisting/resolveNew) documented;resolveIdentifierPathreferences removed; "what it deliberately does not do" corrected — normalization is now at the tool layer for every write tooldisk-write-path.mdedit_notesection added; the existing-note error taxonomy stated against the distinct create-time one, as a tablenote-path-resolution.mdFsVaultWritervault-registry.mdwritertable row deleted; thereader/providerenumeration fixedobsidian-lib.mdvault-writer.tsbullet deleted;vault-aggregates.tsbullet added (the same directory gained a file in PR 2, and this doc enumerates it);vault-overview.tsdeps refreshed; entry-construction sentence fixedmodule-structure.mdFsVaultWritermermaid node + edge removed; the two prose sentences correctedvault-reader.mddocs/-wide sweep caught it asserting the reader feedsFsVaultProvider'slistTags/listProperties— the reader still scans, but it now feeds free functionsdocs/guide/andREADME.mdcame back clean from the sweep, as expected: theirlist_tags/list_propertiesmentions are user-facing tool docs and remain correct. No edits were invented there.Archive
openspec archivesynced two ADDED and two MODIFIED requirements intoopenspec/specs/headless-vault-operations/spec.md. The spec's## Purposeenumeration gainsedit_noteby hand — a Purpose block is not expressible as a requirement delta, so that is a deliberate edit on the synced spec, not a sync gap (task 3.7).verify.mdandretrospective.mdare included; all 19 tasks are ticked.Gates
openspec validate --all— 18/18 valid (19 before archive removed the change item)npm test— 110 files, 1371 tests passing (flat vs PR 2 by design; nosrc//test/changes)npm run lint— cleannpm run typecheck— cleanCloses #114
🤖 Generated with Claude Code