Files
dotfiles/claude/memory/MEMORY.md
T
David F GliddenandClaude Opus 5 cc9788862c [FIX] Declare wake-digest.py's selftest exemption; correct a stale tracker line
Two unrelated things found while establishing what PENDING-134 actually
needs, which turned out to be nothing.

1. governance-mcp.py --selftest was FAILING. The delegate read-only
   guarantee flagged five undeclared mutating calls in wake-digest.py,
   all inside selftest(), all added by yesterday's REVIEWED-131 (e)/(c)
   build: a job dir with state.json, and two transcripts with and
   without a human turn.

   Declared rather than detector-widened, because failing until someone
   names it is the mechanism's design, not an obstacle to it. Why it is
   safe: every write goes to a tempfile.mkdtemp() tree the same function
   removes, and selftest is reachable from --selftest alone, never from
   a tool call. Its weakness is declared in the same comment: this is a
   FUNCTION-level exemption, so a future non-tempdir write inside
   selftest now passes silently. The narrower rule — "writes confined to
   a tempdir" — is not expressible in this check without data-flow
   analysis, and naming that limit is preferred to a detector that would
   be wrong in a harder-to-see way. Selftest now PASSES, 62 controls.

2. MEMORY.md said "ratio_A_to_B VOID until PENDING-134 lands" and
   "NEXT: rule PENDING-134". Both stale by 18 days: PENDING-134 was
   ruled REVIEWED-121 on 2026-08-14. REVIEWED-121's own closing sets the
   real condition — re-derive ONCE after BOTH it and PENDING-137 land —
   and PENDING-137 is still [PROPOSAL], awaiting a jurist ruling. The
   live blocker on the fr cell is -137, and it needs the jurist, not the
   executor.

   Corrected in place with the superseded text quoted, per the memory
   discipline: a conflict between a memory layer and the substrate is a
   verification trigger, and the substrate wins.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017vKkg2EJF1rGwdFdBogwqx
2026-09-01 10:34:39 +02:00

25 KiB
Raw Blame History

name, metadata, permalink
name metadata permalink
node_type title type permalink originSessionId modified
memory MEMORY note claude-memory/memory 22915403-bc5d-4796-9c7d-196b7c30d2f9 2026-08-17T13:20:44.481Z
claude-memory/memory

Claude Code Memory

Standing preferences

Entries keep their rule inline when they fire at a moment I would not recognize as needing a lookup; they shrink to a pointer when the trigger is loud enough that I'd open the file anyway. A ⚠ constraint always travels with the workaround it limits.

Rules that fire silently — keep these in front of me

  • Fowler's rules for quotation — single quotes primary, double for nested, logical British punctuation order. All writing.
  • Canadian spelling in ARC prose — centre/colour ("almost EU"). Draft all steward-voiced prose this way; corpus "center" = autocorrect drift (cleanup open).
  • Close thoroughly — no frequent deferrals — frequent deferrals ARE how the cloud accumulated. Close ALL of a block that's closable-now; for the rest, name the specific dependency.
  • Shorter, concentrated sessions — ONE tightly-scoped high-leverage bite taken all the way, then wrap; hold the rest as ranked horizons.
  • Constitution-as-block, then pull-based corpus — finish the constitution as one block FIRST, then corpus-into-spec pulled by what each engine phase needs. Bounded question → bounded answer; keep open-thread count LOW.
  • Removing a claim ≠ removing the reliance — cutting an unsupported sentence can hide the gap; the dependency survives, now invisible. Test: does the conclusion still need it?
  • Derive the rule from the consumer, not the survivor — choosing between two disagreeing implementations is selection, not derivation. Derive from what a CONSUMER must do.
  • Rank on fields you actually write — a consumer ranking by an evaluative field nothing populates degrades to trivial order while claiming to rank. Verify scoring fields end-to-end; prefer signals already captured.
  • The central path — answerability, not purity — the contamination recursion is probably irresolvable, so bind the claims, don't certify the parties. Route by claim-type: checkable → produce the check + a falsifier; judgment → disclose standpoint in one line, decide, record; undecidable → name it open. One layer, then act — never audit the audit.
  • Notes are part of the work — footnotes/endnotes are integral: KEEP+CONVERT (<sup><a>→[^N]), never drop on graduation.
  • One-shot instruments are proportionate — a measurement answering a question asked once is NOT a directive violation; its counterfactual is an assertion, not a durable tool. The violation is re-writing what's already banked (rule of three → ladder). Too few promoted, not too many built.
  • A checkable question over a self-authored corpus — counting events in a record I wrote is self-report with extra steps. Before leaving any question: who authored the corpus it reads, and would a different author have written it differently? Narrow until it turns on what entries literally say.
  • Grounding finds my errors, not my support — three packages running, every omission cut AGAINST my own case. Ground in TWO passes: (1) what did I get wrong? (2) what already says this? Search the register for the CONCLUSION, not just the citations. ⚠ Quote from the FILE, never from the relayed message — placement adds and cuts.
  • A null search is evidence about the query — a search that finds nothing is a fact about the QUERY until the query is proven able to find the thing; and acting on a handle (filename, regex, path) without inspecting the referent is the same error reversed. ⚠ Never report "you don't have X" from a name search. Four instances, two sessions, 2026-08-31.
  • Resurface banked notes before re-deriving · Checkable claim surfaces bugs · Census by mechanism, not proxy · Completion is a tripwire · Trust prior pass frame — the five epistemic disciplines. Kernels: read the banked note before re-deriving · a checkable claim over a soft classification is itself a defect-detector · census by RUNNING the real pipeline · the feeling of "done" is the cue to verify the tail · re-run a prior verification at the scope of your extension. ⚠ Also carried as Symmetria §3 flags — two surfaces, deliberately: §3 loads only when Symmetria is invoked, so these stay here for sessions where it isn't.

Loud trigger — pointer suffices

  • Chamber work: ground in constitution + charter + runbook FIRST — any chamber work or talk about it begins there (incl. reanchor:). Repo CLAUDE.mds are pointers, not state; corpus claims come from a self-tested tool, never a hand grep.
  • Governance files are dotfiles symlinks — Edit/Write refuse to write through a symlink, so edit the real ~/dotfiles/… path when appending — PENDING/REVIEWED only. ⚠ That refusal is a tool artifact, not a permission check, and this note is the documented route past the only friction guarding the constitution (PENDING-107). ~/CLAUDE.md/~/REVIEWED.md/L2 = [ESCALATE], steward's hand — a jurist sign-off does not authorize one.
  • Verification ladder — the named instruments; reach for the gate the claim's shape demands instead of re-deriving one. ⚠ FROZEN — REVIEWED-123 (2026-08-17): no additions, rewordings, removals or reorderings, from ANY source, whatever its authorization, until the trial is graded (N-now 44/84 as of 2026-08-31 — DOWN 7 from 51 on 08-25, and the direction is the point: the window is shedding faster than it gains, so grading may RECEDE rather than approach; the counter is a 30-day ROLLING WINDOW per PENDING-147, so it rises and falls as transcripts age in and out. Re-measure, never relay: len(glob('~/.claude/projects/-Users-davidglidden/*.jsonl')), the trial's own method at governance-drift-check.py:331). Entries earned meanwhile queue in PENDING-141's owed-entries list (4 rows). Reading it is unaffected — that is the point of the freeze.
  • Skill-harvest register — canonical home for proposed skills (governed analog of PENDING.md for tooling); /wrap-up §1.6 proposes, steward authorizes. Rebuilt 2026-08-07 from the archive: 154 live proposals, grouped by kind, each with an exact archive:L### pointer. ⚠ The 2026-08-01 compaction was lossless but illegible (55 scraped header rows, 95% of cells cut mid-word) — the count it advertised, 177, was never the number. ⚠ THE STROKE-2 BATCH IS AUTHORIZED BUT SHOULD NOT BE EXECUTED YET — PENDING-141. 41 rows stamped S2 are authorized (2026-07-19, execution not a ruling) and 22 are S2? (unsettled). BUT appending them triples the ladder from 20 entries WHILE a pre-registered trial is measuring whether the ladder is reached (baseline 14%, graded at 84 transcripts). Ladder size is an uncontrolled variable in that design, so executing the authorized batch would confound the only check behind REVIEWED-95's causal claim. ⚖ RULED — REVIEWED-123 (2026-08-17): AUTHORIZED (a) HOLD, on six conditions, and the freeze is GENERAL rather than S2-specific. Grading does NOT authorize the append — the batch returns for a ruling. Report N-now at every wake until lifted; 30-day review is a live DEFERRED-DECISION. ⚠ Filing new proposals now requires a declared firing moment (/wrap-up §1.6); one that cannot name it is documentation and must say so.
  • Copy-paste-clean governance drafts — draft PENDING/REVIEWED blocks as plain fenced markdown; display formatting leaks into the placed record.
  • Verify-before-compose hook — chamber constitutional writes are BLOCKED without <!-- GROUNDED-IN: … --> + verbatim Grounding. Don't fight the block.
  • Tool review after each use — review every tool we built after each run, success OR failure. PASS-BUT-FALSELY is the priority signal. Log: chamber-library/_curation/tool-evolution-log.md.
  • Every canon doc's source lives in Chamber Sources — a canonical's source = whatever resolve_archived_source returns, never the master library or a path in frontmatter. Read the banked record before calling a mismatch a defect.
  • Engine sources graduate to the permanent chamber — work added for the engine ALSO becomes permanent collection unless stated otherwise; take it all the way (clean→verify→graduate→catalogue→sidecar). Never leave staged.
  • Bulk indexing runs in tranches, gated on READBACK — never one multi-day mine; order by criticality; prove each tranche by reading back, not by write-success (933k drawers once stored fine and were unreadable). Steward rule 2026-05-04, learned on MemPalace, applies now to engine corpus work.
  • Studium Engine charter — the engine's constitutional doc. Read before building. · Sixtus-V collaboration — build freely, surface only vision-forks; constraint-candidates = 3rd governed instrument. Studium-engine only.
  • CapableHands standing authorization — M4 mini david@10.0.1.136 durably authorized for remote OCR/inference; don't re-ask (steward 2026-07-01).
  • Steward's notebooks + transcription provenance — three notebooks (Journal I B6-slim · A6 field book · A6 "real life"); provenance cites the NOTEBOOK, not the photo; dates are a red rubber stamp; file under the date RECORDED, arrival is metadata. ⚠ Ask each notebook's own archiving form.
  • Typography palace — query via CLI — ~20 type masters at ~/.mempalace/palace-chamber-typography; mempalace --palace <that> search "…". For ARC typography; don't re-ask where it lives.
  • Steward maps live in ~/dotfiles/maps — a map = an artifact David reads directly to orient. Write to ~/dotfiles/maps/, symlink to Desktop, never straight onto the Desktop.
  • Plane coordination workflow — CENTRAL to steward↔Seb: app.plane.so/capablemind, thin effort-tasks [BM #N] over canonical GH issues. ⚠ BBF = BetterBridge product, NOT the board.
  • MemPalace is an unaffiliated stopgap — third-party; don't conflate with BMF/CapableMind. MemPalace PRs await MemPalace's maintainers, not Seb.
  • The maturation of the chamber — a dialogue — the 2026-06-28 exchange on the chamber's telos (fidelity-without-trust; reading-is-unsolvable-is-the-feature). Companion to project-studium-engine-telos-chamber-of-voices.

Canonical Workstream Trackers

Read the tracker for any active workstream at /wake-up before composing the briefing. Append substantive moves at /wrap-up — to the chronological log, not only "current state". Per feedback-canonical-workstream-tracker-discipline.md.

  • Chamber as versioned releases — THE GOVERNING FRAME for all library work. The 2000-year Chamber as versioned releases with soft borders, each serving a PURPOSE; scope every library bite through this. Open decision: which purpose anchors V1. Read the file, not this line — it holds the reframe that resolved the purpose/scope paralysis.
  • Studium Engine — canonical engine tracker. N0–N2 + R0 + voice_stamp built; corpus 14 sources, trilingual, fleet 9 suites / 285. fr cell all but closed — 8 grounded (1 A + 7 B), ratio_A_to_B VOID until PENDING-137 lands. ⚠ PENDING-131 (c) never bound the engine (chunker.py has char_range since Cluster A). ⚠ CORRECTED 2026-09-01 — this line read "VOID until PENDING-134 lands / NEXT: rule PENDING-134" and was stale by 18 days. PENDING-134 was ruled REVIEWED-121, 2026-08-14. The re-derivation condition is REVIEWED-121's own closing: ratio_A_to_B is re-derived ONCE after both REVIEWED-121 and PENDING-137 land and all dispositions are recorded. PENDING-137 is still [PROPOSAL], awaiting a JURIST ruling then steward authorization — it is the live blocker, not -134. NEXT: the jurist rules PENDING-137; the MCP surface it needs is verified live (v2-stratum-tags key reads; governance-mcp.py --selftest PASS, 62 controls, 2026-09-01).
  • Studium engine telos — the chamber of voices — the ultimate goal, above the build plan: the childhood chamber of hero-voices, rebuilt so the counsel is accountably theirs. Why verbatim fidelity is load-bearing.
  • The Chamber touchstone — the why — seven questions to test work against when lost in the trees. Read at Step 0 of any chamber work. Holds no state; does not decay.
  • The Chamber vision is NOT in one place — it lives in seven sources across two repos + memory. A single home would become an eighth unless it supersedes or points.
  • L1 reliability — canonical L1 tracker. BLOCKED ON SEB (PENDING-94); BMF is down and staying down. The replay has never resumed, only restarted (minCursor is a minimum over 11 modules, two never participate ⇒ every start rebuilds from seq 0). Completion is gated by uninterrupted run length, not rate. Recall never worked either (retrieval_count = 0). Read the tracker before ANY L1 work — walked past once on 2026-08-03.
  • Instrument censuses — have our gates ever fired? — census 01 (has each gate a real negative instance? → decay, not construction, is the failure mode) + census 02 (has it fired at all? → the record divides by whether a human invokes it). Both pre-registered. Read before trusting any gate's silence.
  • ARC open-work register — the single code-verified source of truth for what is OPEN on ARC. Read THIS for remaining ARC work, not the chronological tracker. · ARC — chronological record; Stage G DONE/SEALED (GPG ac0a7ee) — reactive mode governs.
  • Source library — link + dedupe — master ebook library ~/Documents/___The Library [ePub_AWZ3]/ (2190 ebooks). GOAL: link chamber↔sources + dedupe; a real link needs EPUB/PDF internal metadata + edition-identity, not filenames.
  • Sidecar typology — protocol-dependent reading-indexes — .meta.json structural sidecar = PROTOCOL-NEUTRAL (the graduated bar); reading-indexes = PROTOCOL-DEPENDENT and probably PLURAL — don't design the schema yet.
  • Character-as-image hazard — EPUBs rendering diacritics as inline images are SILENTLY MUTILATED by image-drop. Mechanism built + wired; per-source glyph-maps still owed. VIEW the glyph; map to SOURCE form.
  • Making sequence source set — COMPLETE against the ReadingList (reconciliation-verified). Sourced ≠ ingested. Read before any Making/studium source work.
  • Studium = CM's unfettered sandbox — experiment freely on library/engine without risking CM's runtime; breakthroughs transfer back. Steward-framed 2026-07-08.
  • Be (laundromat) — Skemantix startup (Seb+David) funding CapableMind's ladder; bridge, not venture. Decisions LOCKED. Pre-revenue WTP gate = renovate Pat → charge her; no new spec until it clears ⇒ nothing for executor on be.
  • The Fool — Tarbuckle — THE ACTIVE WORKSTREAM. Bones derived once 2026-08-25 (peak SUCCESSION 96 · dump ABSENCE 8); name + soul sealed, never regenerate (soul). Doctrine = BUDDY-PATTERN-jurist-draft-v2-2026-08-22.md; §8 has no blanks (20 min · frequency UNKNOWN · empty-window consumes · body correlates with nothing). ⚠ CORRECTED 2026-08-31 — the line here read "NOTHING WIRED — no statusLine, no script, §13.1 spec unwritten" and was FALSE ON ALL THREE CLAUSES. Substrate, verified today: .claude/settings.json runs dotfiles/scripts/tarbuckle-body.py as statusLine (refreshInterval 60) · 5 scripts (body·invoke·mumble·seam·wrap) · TARBUCKLE-SPEC-13.1-2026-08-25.md exists · 7 state files under ~/.claude/state/. It is wired and running. ⚠ Found by a concurrent sibling session, which held the correction rather than racing this one's memory write; its counts (7 scripts, 6 state files) were themselves off in both directions — re-measured here, not relayed. What is unbuilt is a separate question and this line no longer answers it. Trial 09 VOID (REVIEWED-124), void now recorded in all three docs. ⚠ Subject matter lives in CapableMind-AI, instruments in dotfiles, and nothing in CapableMind points back.
  • Obsidian vault — from archive to practice — canonical vault tracker. Read it; it holds the four-purpose brief (steward, 2026-08-24) that is now the design brief. ⚠ The vault is NOT a git repo — it mirrors to ~/_Dev/david-root-and-branch-vault-git. The capture practice STARTED 2026-08-23 (two predecessors died at 3 and 4 entries; the measure is week four, not week one) — ⚠ this line previously read "has not been started", which went stale the day it began, and previously carried "paper bridge working" as state the tracker did not hold. Item 0 is new and steward-owed: photographed pages of physical BOOKS with margin notes — a different object from the three notebooks, untracked until 2026-08-24.
  • Chamber-typography — tracker not yet established; moves live in per-session memories (2026-05-11 →) + project-chamber-cruft-restoration.md + project-chamber-typography-mining-plan-2026-05-15.md.

Active Session

✅ THE 270 GOT READ — 40 of them, and the backlog is real. PENDING-164 AMENDMENT 1's declared-owed classification pass ran, pre-registered and committed ALONE (5ba5842) before any commit body was read. Systematic sample: 12 of the 17 rows that decide about a mechanism name one the register NEVER mentions — incl. a log-chain spec bump to v0.6 (logchain = a named constitutional constraint, 29 register mentions; data-portability/ImportProvenance/import trust = 0), a whole session-memory protocol retired, and a stopgap env var retired by a plan that calls it a stopgap. 3 of the 5 RECORDED rows arrived 25/46/53 days LATE — recovery, not routing. → PENDING-164 AMENDMENT 2 (1d46d48). 🔑 THE POPULATION WAS NEVER 270 — IT IS 362, and the two biggest holes are the doctrine repo and the L1 repo. prior-art.py's owned_repos() tests remotes against a fragment of the steward's account name, so CapableMind-AI (35), BetterMemories.io (42) and be (12) are invisible. ⚠ Both its positive controls are satisfied by the broken predicate — third instance this month of a control encoding what was already expected. Six of the twelve findings live in those repos. → PENDING-171, open. ⚠ Deliberately NOT repaired in-session (it would change the pre-registered population); fix AFTER the result is read, not inside it. 🔑 THE HEAD OF A REVERSE-CHRONOLOGICAL CENSUS IS A SAMPLING FRAME, NOT EVIDENCE. The literal inherited question — the first 20 — returns 1, and the pre-registration said in writing, in advance, that 1 there refutes nothing: 18 of 20 rows are dotfiles and 9 of 20 WRITE TO THE REGISTER IN THE SAME COMMIT, so they cannot be silent by construction. Both samples reported rather than quietly substituting the better one. ⚠ The prior wrap handed forward "first 20, in register order" as if it were well-defined. It is not. ⚠ MY OWN PROBE RETURNED FIVE CONFIDENT FALSE ZEROES (grep -m8 -n -o ".\{0,70\}TERM.\{0,70\}" matched nothing while looking like it had looked) — and for some minutes it read as two instruments disagreeing about the register, the shape this thread treats as a finding. It was not one. The next mismatch must not inherit the assumption that a mismatch is always meaningful. ⚠ THE JUDGEMENT IS EXPOSED, NOT HIDDEN: band 10–13, ruling 12. Every term string is recorded so any verdict is re-runnable in one command and contestable on the term. The reading rule (an occurrence counts only if it is about the mechanism) moved four rows in BOTH directions. 📌 STEWARD OWES: rule the block — as amended, or send it back (the jurist will draft the placeable REVIEWED block on request) — the one thing that cannot proceed without you · un-exclude /Volumes/on ice in System Settings (tmutil refuses whole volumes; no completed TM backup to BlockBuster Addendum is verifiable) · place REVIEWED-129's amendment · rule PENDING-160 · -168 · -171 · restart Claude Desktop · the §5 regrade ruling. ⚠ THE §5 REGRADE GATE IS NOW UNTOUCHED FOR A FOURTH SESSION. Recorded, not dropped. ⚠ 322 of the 362 REMAIN UNREAD, and today refuses to extrapolate from 40. The next tranche must be another systematic draw — never the head of the list.

⚠ TWO SESSIONS RAN ON 2026-08-31 AND BOTH WRAPPED. Per PENDING-174 the memory protocol is date-keyed and single-writer, so this second wrap would normally promote-and-demote the first. It did not. Both records stand; neither supersedes the other. Read both.

  • Session 2026-08-31 afternoon — the loop was removed by a restart — a binary auto-update respawned a parked worker with --reply-on-resume and the wake digest became its only instruction: an executor worked and committed with no human in the loop, and nothing in the apparatus noticed. PENDING-172/-173/-174/-175 filed, jurist ruled (REVIEWED-131/132), both builds landed with controls in both directions. Then the Lleida Brahms preparation, from the sources. ⚠ The null-search pattern fired four times today, the last inside this wrap. NEXT: the 322 — but rule PENDING-171 first.

  • Session 2026-08-31 — the 270 got read, and the population was wrong — the pulling thread named at two consecutive wraps, taken all the way: 12/17 register-silent, population 362 not 270, PENDING-171 filed. NEXT: of the twelve silent mechanisms, how many SHOULD the register contain? — criterion written down BEFORE re-reading the rows; no mechanical form exists and none must be invented.

Historical reference → MEMORY-reference.md

Older archived-session pointers and the stable reference layer (steward profile · project-state detail · L1/L2/Chamber inventories · legacy pending-work · reference-file list) live in MEMORY-reference.md — consult on demand; not loaded at wake. Recent cross-session trajectory comes from the Active Session entry above + the recent session-*.md files (wake §2.b.1).

Index discipline (self-bounding — keep this file lean)

Wake-loaded live index; hard budget well under the harness load ceiling. Keep to: Standing preferences · Canonical Trackers as one-line pointers (chronological detail lives in the linked tracker files, not here) · Active Session · these pointers. Rotation + budget-breach handling are wired into /wrap-up (demote prior Active Session on promote) and /wake-up (truncated load = flag + trim). Back up before restructuring. Compaction history relocated to MEMORY-reference.md at the 2026-08-20 wrap — pure history, not wake-critical.