--- name: session-2026-08-19-the-vault-got-a-spec-the-links-were-already-broken description: "RECONSTRUCTED 2026-08-20 from the transcript — this session died unwrapped. The steward deferred the fence work and named two pieces that would come first: the Obsidian vault spec (ran to a ratified v1.0.0 and two applied passes, 511 edits over 268 files) and Trial 09, the jester arm (PREPARED AND HELD, never run — its ground truth leaks into PENDING.md:92-96, so every STRONG grade would be an ECHO). Transcript-archive leg (i) discharged: 47 jsonl preserved outside the pruned tree, 46/47 sha256-verified. PENDING-147 filed; N-now corrected 61 to 47 as a rolling window. PULLING THREAD: the fence, unblocked — the deferral has expired and both shaping pieces have run their course." metadata: node_type: memory type: project originSessionId: 0883c73d-9091-4508-aa31-592ddff5240a modified: 2026-08-20T09:07:34Z --- # Session 2026-08-19 — the vault got a spec, and the links it surfaced were already broken > ⚠ **THIS RECORD IS A RECONSTRUCTION, NOT A WRAP.** The session ran 2026-08-18T16:35Z → > 2026-08-19T19:05Z and ended in `Request timed out` after a 513-second turn, with the steward's > last message unanswered. The host or app then went down overnight — the transcript's final > write is 01:53 local with only untimestamped metadata rows (`last-prompt`, `mode`, > `ai-title`), the shape of a flush-on-shutdown, and the steward was asked to log in again the > next morning to an empty terminal. **No `/wrap-up` ran.** This was written 2026-08-20 by > reading `0883c73d-9091-4508-aa31-592ddff5240a.jsonl` and the git record. Everything below is > sourced from those; nothing is recalled. Where the transcript is silent, this record is silent. ## PAST — what moved, and why **The steward deferred the fence work, and named a reason.** 2026-08-19 ~11:15 CEST: *"I'd actually like to defer this work until tomorrow morning because I have two other things that I would like to do with you that could very well shape this very work."* MEMORY.md recorded the deferral but flagged that **the two were never named**. They are: 1. **Optimising the Obsidian practice**, beginning from a vault *spec* of the kind the serious projects have. Steward's own framing of the tool boundary: **Drafts.app** is the scratchpad, emptied weekly; **Notes.app** holds confidential material as locked notes; **Obsidian** is where notes go that must not be lost — *"so far, a sort of archive… my instinct is that I could make better use of it."* 2. **Trial 09 — the jester arm** (jurist-prepared 2026-08-17, revised 2026-08-19): proximity to the court, no standing, questions only. A new species, not a variant of 05–08; runs independently of the Control Kernel, uses no control document, so D-2 does not gate it. **First, though: "preserve the transcripts, then we shift."** PENDING-147 leg (i) discharged under that authorization. All 47 `*.jsonl` in `~/.claude/projects/-Users-davidglidden/` copied to `~/.claude-transcript-archive/raw/`, outside the tree the harness prunes at 30 days. **114 MB, span 2026-07-20 → 2026-08-19. Verified by readback rather than exit code: 46/47 confirmed sha256-identical.** The 47th was the live session's own transcript, still being appended at copy time — recorded in `MANIFEST.json` as a **snapshot**, not silently counted as verified. **PENDING-147 itself was filed that morning**, `[HARDENING]`, out of the standing N-now obligation rather than out of vigilance: re-measuring instead of relaying yesterday's figure gave **47, not 61**. `governance-drift-check.py` globs a directory the harness prunes at 30 days, so the counter is a **rolling window, not a cumulative count** — at ~1 session/day it converges to ~30 and `transcripts 84` very likely never fires. Every "N remaining" report, including the executor's own, was a false countdown. **Trial 09 was prepared and then HELD — it has never been executed.** Prompt file written and hashed, corpus manifest built (**11 documents, 166,088 words**), exclusion hash-list verified. The blocker is pre-run and structural: > `PENDING.md:92-96` — **inside an open item the wake surfaces every session** — names Fault > Lines 5, 3 and 4 by number, each with its substance in a parenthetical, plus OP-CN-01. And > Fault Line 5's proposition sits in `~/CLAUDE.md` Constraint 6, **stated more sharply than in > the ground truth itself**. Under the design's own rule, every STRONG grade would therefore be > an ECHO. The hash-list check *passed* — the excluded documents are absent **as documents**. The 2026-08-19 revision's content scan was scoped to REVIEWED.md and PENDING.md and would have caught the PENDING.md leak. **The exclusion was verified at the wrong granularity: absence of the file, not absence of the content.** That is the finding, and it is why the trial did not run. ## The Obsidian work — census, spec, two passes **Four read-only census rounds before a single edit.** Every `.md` parsed — **2,519 files, no sampling** — parser carrying four controls. **400 distinct keys over 5,867 instances; 68% of notes have no frontmatter at all.** Consumption cross-referenced against 357 dataview/tasks blocks, 23 templates and all 39 `.obsidian` configs: 66 keys consumed (62% of instances), 29 written-by-template-and-read-by-nothing, 305 orphaned. A **method correction is recorded in the report itself**: the first template pass matched key names anywhere in a file containing Templater syntax, which tests whether the *word occurs in prose*, not whether a template *writes the key*. Redone. **Rounds 2 and 3 were the jurist's doing, and they changed the answer twice.** The stop conditions held — `tool`/`tools` was not resolved by the suggested default because inspection gave no reason. Two fields investigated, two came back larger than their counts suggested, so the jurist required the same treatment for the other four governance-block fields before any decision: *"that assumption is exactly what got corrected twice already today."* - `owner` (153) — **one job, three spellings** (`David Glidden` 136, `David` 12, `David F. Glidden` 5), zero discrimination. Cut. - `canonical` (159) — **one name, two jobs**: self-descriptive (a note naming its own path) and pointer-elsewhere (a note declaring its live version is somewhere else). - The archival hypothesis **tested negative and that was the headline**: 65 of the 67 pointers sit **outside** `99. Archive`. If *"the live version is elsewhere"* were functioning as an archival marker they would cluster inside it; they do the opposite. **65 notes in the live vault declare their live version is elsewhere and not one was moved.** The declaration exists and has never been acted on. - What *does* distinguish Archive: frontmatter 11% vs 46% outside; `status: archived` on **25 notes, 2.3%** of it; **90% (965) receive no wikilink from any live note**. Seven notes inside Archive still declare themselves `Active`/`active`, in two capitalisations. **No archival policy note exists anywhere in the vault.** The operating criterion is **decay in practice, declaration in name only.** **The spec was then ratified and applied.** `00. Compass/Frontmatter Specification.md`, **v1.0.0**, drawn from the four-round census plus a reading of AldineXXI's Frontmatter specification (ARC) and the Chamber Library specification. Its first design principle: *storage and lifecycle are orthogonal* — which folder a note sits in says nothing about whether it is current; only `status:` declares that. Placement in `00. Compass/` root was **confirmed by inspection, not assumed** (that root already holds Vault Configuration Map, Vault Index, Pattern Index, A Guide to Your Vault; Foundations' Protocols and Annexes hold personal practice). The spec's own frontmatter conforms to itself. ### Operational fact worth not re-deriving **The vault folder is not a git repository.** It mirrors to `~/_Dev/david-root-and-branch-vault-git` (remote `git.skemantix.com/David/david-root-and-branch-vault-git`), and an automated job commits `Mirror sync ` on its own schedule. Looking for `.git` inside the vault finds nothing. ### The commits `949ff14` §1 spellings · `31d8e1f` §2 type instability · `3d47bd2` §3 template YAML · `00e741d` the 12 held `00. Compass` edits (steward-authorized separately: *"I authorize the Compass ones too"*) · `4c364e9` the spec · `fab8fb0` **pass 2 — 511 edits across 268 files** · `aee615d` `domain`→`domains` per the jurist's ruling that a field always list-shaped should not carry a singular name. **Pass 2 was one commit, not seven, and the reason is recorded**: 138 of the 268 files carry edits from more than one section, so per-section commits would have had titles that overstate what they contain *and* would not have given a per-section revert. An earlier attempt at per-section commits was abandoned mid-flight for exactly that — §3 got none and §5 got one file, because the first commit had already claimed the shared files. **End state:** `owner` 0 · `change_log` 0 · `domain` 0 · `revisions` 90 · `canonical` 159 (93 boolean, 66 string) · `see_canonical` 3 · `confidence` 9 · `parents` 69 / `children` 36 / `peers` 56 · `links` 8 kept-and-flagged. **YAML parse errors 16, unchanged across both passes.** ## What was corrected — and by whom **Two defects in the executor's own tooling, caught before applying, both by re-censusing an applied copy rather than reading the changelog:** 1. **The §6 handler covered block-style lists only.** 82 of 121 `related` instances are inline flow lists. It would have edited **29 notes of 90** and reported success. 2. **The §7 handler logged "links.canonical retired" without retiring it**, because it only rewrote the block when the flatten produced output lines. **The jurist corrected itself, in the open.** Round 2's "88 basename-resolvable, 63 not" was **tautological on one side**: the 88 were overwhelmingly the *self-descriptive* values, which resolve to their own filename by construction. The real pointer population (66) was almost entirely coincident with the unresolvable set — **only 3 of 66 were genuinely recoverable.** The jurist named this as a wrong read rather than an imprecise one, and refused to let it pass quietly in a changelog. The executor's share: the "88" came from *its* round-2 report, presented as a resolvability tier without noticing one tier was measuring "does this note exist." **The steward caught the last one by opening Obsidian**, as asked. Unanswered message, 20:57 CEST, the one the timeout swallowed: > *"coffee log link doesn't work, neither in homeopathy. in Atlas of Roots, i hand corrected the > context rot guidlines link. otherwose the children point to pages not yet created or that are > mislabled"* ## FUTURE — what pulls **The fence work is now unblocked by its own terms.** The deferral named 2026-08-20 and named two pieces that would come first. One ran to a ratified spec; one is held, un-run, with a live blocking finding. **Whether either reshapes the fence is a steward call the record cannot make.** **Trial 09 resumes at the leak, not at the run.** The prompt is written and hashed, the corpus is built. What is owed first is a decision about `PENDING.md:92-96` and `~/CLAUDE.md` Constraint 6 — the ground truth is inside the proximity corpus by construction, and no re-run fixes that. **The vault has a tail, and none of it is urgent.** 194 unresolvable `related` targets left bare and flagged; **63 residual `canonical` pointers** — each a note that named an authority for itself and lost track of where it lives, invisible while 157 path-strings sat behind one field name. Plus the defect in the CODA below. ## CODA — 2026-08-20, checking the steward's three broken links against git All three were checked against the mirror's history rather than inferred. **The broken links are pre-existing vault debt, not regressions from the passes** — but the passes are not innocent either. - **Coffee log** — `brew_temp: [[94–96°C]]`, a temperature wrapped as a wikilink. Present since the 2025-09-17 mirror sync. Pass 2 touched only `linked_note` → `linked_daily_note` in that file. **Not ours.** - **Homeopathy** (`Nux vomica`) — `links.related` targets `[[Ignatia amara — The Medicine of the Sigh]]` while the file is `Ignatia amara.md`. **The link names the note's `title`, not its filename**, which is what Obsidian resolves on. That note was one of the 8 kept-and-flagged §7 cases; its last commit is 2025-11-02. **Pass 2 never touched it.** - **Atlas of Roots** — pass 2 §7 flattened `links:` into top-level `parents/children/peers`, carrying every string verbatim, including the already-broken `[[00. Compass/00a. Foundations/Context Rot Guardrails Charter]]`. **Relocated, not authored.** The steward fixed the path by hand and also renamed the target file, which had been literally named `*Context Rot Guardrails Charter.md` with a leading asterisk. Both are captured in `e879c82`, an automated mirror sync at 21:18 — **13 minutes after the timeout.** **The honest finding is not "not our fault."** Nested `links.parents` was inert YAML that Obsidian did not render as links. Flattening it to top level made **194 already-unresolvable targets render as clickable-and-broken** in the properties UI. The passes did not create the breakage; they **surfaced** it. That is arguably the spec working, but it changed what the steward sees, and the pass report did not predict it. **One genuine defect of the executor's own, found only in this reconstruction.** Of the 3 `see_canonical` pointers §3 wrote, Atlas of Roots got `see_canonical: "[[Index]]"`, converted from `canonical: 09. Atlas of Roots/index.md` — **a file that does not exist.** The only `Index.md` notes in the vault are `08. Notes/Tools & Workflow/Index.md` and a Catalan `00. Index/index.md`. **It resolves to the wrong note or to none. One of three is wrong.** This is the same basename-resolution flaw the jurist corrected in the abstract that afternoon, landed in an applied edit — corrected as a *number* in the report, not as a *mechanism* in the tool. **Still open from 2026-08-17, and this session did not answer it:** across the last ~10 sessions, when a defect in the executor's own instrument was found, WHO found it — a mechanism firing unbidden, the executor re-checking, the jurist, or the steward? **This session adds four data points and they do not point one way:** two tooling defects found by the executor re-censusing; one number corrected by the jurist; one broken-link class found by the steward opening the app. The `[[Index]]` defect was found by neither — it surfaced a day later, in a reconstruction that only happened because the session crashed.