Files
dotfiles/claude/memory/project-obsidian-vault-practice.md
T
David F GliddenandClaude Opus 5 4235430a73 Memory: reconstruct the 2026-08-19 session record, which died unwrapped
The session ran 2026-08-18T16:35Z to 2026-08-19T19:05Z and ended in a
Request timed out mid-turn; the host went down overnight and no /wrap-up
ran. Its record is written now from the transcript and the git history,
and says so at the top: reconstruction, not wrap, nothing recalled.

Names the two pieces of work the steward said would come first and that
MEMORY.md had been carrying as "not yet named" for a day: the Obsidian
vault spec, which ran to a ratified v1.0.0 and two applied passes, and
Trial 09, which was prepared and then held un-run because its ground
truth leaks into PENDING.md:92-96 and CLAUDE.md Constraint 6, so every
STRONG grade would have been an ECHO. The exclusion hash-list passed:
absence was verified at the wrong granularity, file rather than content.

New canonical tracker for the vault workstream, which had none. Carries
the operational facts worth not re-deriving — the vault folder is not a
git repository, it mirrors to ~/_Dev/david-root-and-branch-vault-git, an
automated job commits mirror syncs on its own schedule — and the open
tail, including the reminder that the stated goal (a capture workflow)
has not been started and the frontmatter work must not stand in for it.

One defect of our own, found only because the crash forced a
reconstruction: see_canonical: "[[Index]]" on the Atlas of Roots index
was converted from a path to a file that does not exist, and resolves to
the wrong note or none. One of the three pointers section 3 wrote. It is
the same basename-resolution flaw the jurist corrected that afternoon as
a number, uncorrected as a mechanism.

The steward's three broken links were checked against git rather than
inferred: all pre-existing. But flattening nested links.parents to top
level made 194 already-unresolvable targets render as clickable-and-
broken in Obsidian's properties UI. Surfaced, not caused — and the pass
report did not predict it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JQKeKY9T9d95KpvHwwok8T
2026-08-20 11:10:15 +02:00

106 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: project-obsidian-vault-practice
description: "Canonical tracker for the Obsidian vault workstream — turning root-and-branch from an archive into a practice, beginning with a ratified Frontmatter Specification v1.0.0. Holds the operational facts (the vault is NOT a git repo; it mirrors to ~/_Dev/david-root-and-branch-vault-git), the applied-pass record, and the open tail. Read before any vault work."
metadata:
node_type: memory
type: project
modified: 2026-08-20T09:08:17Z
---
# Obsidian vault — from archive to practice
**Steward's goal, stated 2026-08-19:** *"optimizing my Obsidian usage and setting up a regular
workflow to have the important parts of our work captured there… My instinct is that I could
make better use of it. I want to create an Obsidian 'spec' like we have done for all of our
serious projects."*
**The tool boundary, from the steward, so it is not re-elicited:**
| tool | role |
|---|---|
| **Drafts.app** | scratchpad; ephemeral text, or text destined elsewhere. Kept essentially empty at the end of every week. |
| **Notes.app** (Mac/iOS) | confidential material, as locked notes. |
| **Obsidian** (`root-and-branch`) | notes that must not be lost. *"So far, a sort of archive."* |
**Scope note:** the vault is *also* the Compass — the steward's personal operating system.
`~/CLAUDE.md` says: reference it, never write to it. **That standing rule was suspended for this
workstream by explicit authorization** (`"I authorize the Compass ones too"`, 2026-08-19), for
the named mechanical passes only. It is not a general licence.
---
## Operational facts — do not re-derive
- **The vault folder is NOT a git repository.** `~/Library/Mobile Documents/iCloud~md~obsidian/Documents/David, root-and-branch`
has no `.git`.
- **It mirrors to `~/_Dev/david-root-and-branch-vault-git`** (remote:
`git.skemantix.com/David/david-root-and-branch-vault-git`). An automated job commits
`Mirror sync <timestamp>` on its own schedule — so steward hand-edits land in git without
anyone asking.
- **Working reports and machine-readable changelogs live in `~/dotfiles/obsidian/`**:
`vault-frontmatter-inventory-2026-08-19.md`, `vault-frontmatter-pass1-followups-2026-08-19.md`,
`vault-governance-block-round2-2026-08-19.md`, `vault-round3-archive-and-relations-2026-08-19.md`,
plus `fm_inventory.json`, `pass2-changelog.json`, `pass2-flags.json`.
- **The spec is in the vault, not in dotfiles:** `00. Compass/Frontmatter Specification.md`.
- ⚠ **`verify-before-compose.sh` fires on `Write|Edit`, and this work runs through Bash.** A vault
hook wired the same way would not fire on how the work actually runs. Noted 2026-08-19, unfixed.
---
## Chronological log
### 2026-08-19 — census, spec, two passes (session died unwrapped; see [[session-2026-08-19-the-vault-got-a-spec-the-links-were-already-broken]])
- **Four read-only census rounds before any edit.** 2,519 notes parsed, no sampling. 400 distinct
keys over 5,867 instances; **68% of notes have no frontmatter at all.** 66 keys consumed, 29
written-by-template-and-read-by-nothing, 305 orphaned.
- **Round 2/3 findings that changed the design:** `owner` was one job in three spellings (cut);
`canonical` was **one name doing two jobs** (self-descriptive vs pointer-elsewhere); the
hypothesis that pointer-form marks archival **tested negative** — 65 of 67 pointers sit outside
`99. Archive`. What actually distinguishes Archive is **decay in practice, declaration in name
only**: `status: archived` on 2.3% of it, 90% receiving no wikilink from any live note, and **no
archival policy note anywhere in the vault.**
- **Frontmatter Specification v1.0.0 ratified** and placed in `00. Compass/`. First principle:
*storage and lifecycle are orthogonal* — the folder says nothing; only `status:` declares.
- **Pass 1 and pass 2 applied and pushed.** `949ff14` `31d8e1f` `3d47bd2` `00e741d` `4c364e9`
`fab8fb0` (**511 edits / 268 files**) `aee615d`.
- **End state:** `owner` 0 · `change_log` 0 · `domain` 0 · `revisions` 90 · `canonical` 159 ·
`see_canonical` 3 · `confidence` 9 · `links` 8 kept-and-flagged. **YAML parse errors 16,
unchanged.**
- **Two executor tooling defects caught before applying** (§6 handler covered block-style lists
only — would have done 29 notes of 90 and reported success; §7 logged a retirement it did not
perform). Both found by **re-censusing an applied copy, not by reading the changelog.**
- **The jurist corrected its own "88 recoverable" reading**: those were self-descriptive values
resolving to themselves by construction. **Only 3 of 66 pointers were genuinely recoverable.**
### 2026-08-20 — the steward opened Obsidian, and the links were already broken
Checked against the mirror's history, not inferred. **Coffee log** (`brew_temp: [[94–96°C]]`) and
**homeopathy** (`[[Ignatia amara — The Medicine of the Sigh]]` naming a *title* where the file is
`Ignatia amara.md`) are both **pre-existing**; pass 2 never touched the homeopathy note and
touched only `linked_note`→`linked_daily_note` in the coffee log.
**But the passes are not innocent.** §7 flattened nested `links.parents` — inert YAML Obsidian did
not render — into top-level `parents/children/peers`, which **made 194 already-unresolvable targets
render as clickable-and-broken in the properties UI.** The breakage was surfaced, not created. The
pass report did not predict this, and it should have.
---
## Current state — OPEN
1. ⚠ **A defect of ours: `see_canonical: "[[Index]]"`** in `09. Atlas of Roots/00. Atlas of Roots — Index.md`,
converted from `canonical: 09. Atlas of Roots/index.md`, **a file that does not exist**. The only
`Index.md` notes are `08. Notes/Tools & Workflow/Index.md` and a Catalan `00. Index/index.md`.
**It resolves to the wrong note or none — 1 of the 3 pointers §3 wrote.** Same basename flaw the
jurist corrected as a *number* that afternoon, landed in an applied edit as a *mechanism*.
2. **194 unresolvable `related` targets**, left bare and flagged by §6.
3. **63 residual `canonical` pointers** — each a note that named an authority for itself and lost
track of where it lives. Steward's eyes wanted here most: this is the population `canonical` was
actually describing, invisible while 157 path-strings sat behind one field name.
4. **16 YAML parse errors**, unchanged across both passes — never in scope, never addressed.
5. **The actual goal has not been started.** Everything so far is hygiene on an archive. *"A regular
workflow to have the important parts of our work captured there"* — the capture practice, the
thing that would make the vault a practice rather than a tidier archive — **has not been
designed.** Do not let the frontmatter tail stand in for it.