Files
dotfiles/claude/memory/session-2026-05-25-mempalace-3.3.6-adoption-chamber-transcripts-vault-architecture.md
T
David F GliddenandClaude Opus 4.8 3f9a89b00c chore(memory): Basic Memory trial begins — sync normalization baseline (283 files)
Basic Memory v0.21.6 first sync over the live memory dir (steward-authorized
live-dir trial, Option A 2026-06-06): adds permalink: to frontmatter, refolds
long YAML description lines, strips final newlines. Bodies untouched —
verified via full diff classification. From this commit forward, any diff in
claude/memory shows only what Basic Memory or the session writes.

Trial design: MemPalace untouched as incumbent; git status check on this dir
at every wrap; end-of-day evaluation (recall quality, sync robustness,
rebuild-from-files, malformed-file behavior).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 09:52:17 +02:00

90 lines
11 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: session-2026-05-25-afternoon-night-mempalace-3-3-6-bge-m3-mps-adopted-chamber-transcripts-vault-palace-architecture-hallway-bug-fixed-filed-upstream-1619-1620-vault-mining-overnight-pulling-thread-finish-the-palace-memory-cleanup-tomorrow
description: 'Pursued the inherited pulling thread (MemPalace 3.3.6 upgrade) end to
end: adopted 3.3.6 + bge-m3 on MPS (rebased 3-commit fork→1, fixed a CPU-vs-MPS
device regression I introduced), validated the chamber corpus (21 works), mined
the full Claude Code transcript corpus into palace-memory, decided the palace architecture
(default=transcripts+continuity, vault+chamber=separate palaces), reverted a wrong-target
vault mine, and found+fixed+filed an upstream hallway-pagination bug (issue #1619
+ PR #1620). Vault now mining into a separate palace-vault overnight. Pulling thread:
finish the palace-memory repair/restart cleanup tomorrow in a fresh session + verify
the overnight vault mine.'
metadata:
node_type: memory
type: project
originSessionId: 628b1556-4e7c-43fc-bc5c-0b0643951f82
permalink: claude-memory/session-2026-05-25-mempalace-3.3.6-adoption-chamber-transcripts-vault-architecture
---
# Session 2026-05-25 — MemPalace 3.3.6 adoption + palace architecture + upstream fix
## Pause statement
I am about to be away (steward sleeping). The vault is mining into a **separate `palace-vault`** overnight (caffeinated, hallways-fix live, logging to `~/_Dev/mempalace/.local-data/vault-palace-mine-2026-05-25.log`). What I want to find still pulling on return: **the palace-memory cleanup** — the `repair rebuild-index` + MCP restart we deferred to a fresh session. What I want to find DONE: the overnight vault mine, ideally complete with its hallways computed (the cb1be92 fix's first real-world run on a big wing).
## Morning addendum — 2026-05-26 (how the overnight mine turned out)
The overnight `palace-vault` mine **did NOT finish** — ~8.7h in it was only ~72% (file 1894/2627, **103,216 drawers**), and **the MemPalace MCP server died overnight from memory pressure** (two concurrent bge-m3 processes — server + mine — + 358k pageouts; likely OOM). Steward chose to **stop the mine** (graceful SIGTERM; clean, **no quarantine**; 103,216 drawers persist, resumable/append-only) and restart Kitty (respawns the MCP server into a now-freed machine). **Steward asked if our hallways fix caused it — investigated: NO** (`compute_hallways_for_wing` runs once *post-mine* at `miner.py:1718`, outside the per-file loop; the mine was still embedding at 72%, never reached it → the fixed code never executed). Causes were ChromaDB write-deceleration + two-bge-m3 memory pressure, both upstream of the fix. Full problem log + recommendations: `~/_Dev/mempalace/.local-data/PROBLEM-overnight-mcp-death-and-slow-vault-mine-2026-05-26.md`.
**Updated pulling thread (today):** (1) palace-memory `repair rebuild-index` + MCP restart [unchanged]; (2) **decide the vault approach** — the full single-palace mine is ~16–20h + memory-heavy + killed the server; recommend chunked resume (dedup continues from file 1895) or a curated subset, and **never run a bge-m3 mine alongside the live MCP server**. palace-vault sits at 103,216 (~72%), clean, resumable.
**Lesson (forward caveat on the fix):** when a big-wing mine *completes*, our fix makes the hallway step actually run on the full wing (~170k for the vault) = a real end-of-mine memory/time spike — another reason to mine in chunks (smaller wings = lighter hallway passes).
## Past — what we did
### MemPalace 3.3.6 + bge-m3 + MPS — ADOPTED (live)
- **Rebased the 3-commit 3.3.5 bge-m3 fork → 1 commit on 3.3.6** (`fd87d3b`): bge-m3 expressed as a 3rd `elif model == "bge-m3"` branch in `get_embedding_function`. Dropped the other two commits — 3.3.6 made `MAX_CHUNKS=50_000` the default (#1554) and resolves model identity via config, so the metadata-stamp + chunk-cap commits were redundant. Validated against a *copy*: EF-name check passes (live collection `config_json_str={}` → only dimension binds; bge-m3=1024-dim matches), and ingest works (tail-chunk retrievable, multilingual).
- **Live switch:** checkout → `local/bge-m3-on-3.3.6`; added `"embedding_model": "bge-m3"` to `~/.mempalace/config.json` (backup saved); removed the duplicate **local-scope** `mempalace` registration from `.claude.json` (kept user-scope with `--palace`). Two `/mcp` reconnects.
- **CRITICAL self-introduced regression, found + fixed (`fbe8449`):** my rebase left `device` unset, assuming ChromaDB's `SentenceTransformerEmbeddingFunction` auto-detects MPS. **It defaults to CPU** (~19 t/s vs MPS ~67 t/s) — *the* cause of slow mining. Diagnosed via `sample` showing `libtorch_cpu cpublas::gemm`. Pinned `mps→cuda→cpu` (restores his original `device="mps"` intent, portably). Verified `model.device=mps:0`.
### Chamber palace — extended + validated (separate palace)
- Reused `palace-chamber-typography` (healthy, bge-m3 1024-dim, 19 works); **appended only the 2 new** — Manutius *Orthographiae Ratio* (Latin) + Alexander *Timeless Way* (already converted in chamber-library) → **21 works / 42,062 drawers**. Append-only, on MPS.
- Register queries validated: Latin query→Manutius, "quality without a name"→Timeless Way, "measure/proportion"→Leopardi, French→Lacroux+Sousa. Multilingual + cross-tradition retrieval confirmed.
- Queried via CLI or by pointing the server at it (one palace per server).
### Transcripts — full Claude Code corpus into palace-memory
- Mined remaining dirs: **90 new + 168 dedup-skipped = all 258 conv files**; +8,135 drawers (→ palace-memory baseline **44,794**), in `wing_api`. **805s on MPS** vs the earlier ~1h50m CPU mine (the device fix paid off). Caveat: Claude.ai *app* conversations are a separate, unmined corpus.
### Palace architecture — DECIDED (steward)
- **Default `palace-memory`** = Claude transcripts + wake-up/wrap-up continuity (working memory, always-on, server-bound).
- **Separate `palace-vault`** = Obsidian vault (consulted at precise moments).
- **Separate `palace-chamber-typography`** = reference corpus.
- Rationale: one palace per MCP server; keep working-memory recall undiluted; separate palaces queried by repointing/CLI.
### Vault — wrong-target reverted, now mining to its own palace
- First mined vault INTO palace-memory (wrong target); killed mid-write → **HNSW segment quarantine** (3.3.6 #1452 safety; `…drift-20260525-222326`). **Removed the partial `obsidian_vault` wing** (31,055 drawers) via paginated-collect + batched delete-by-id → palace-memory back to exactly **44,794**, wing 0. HNSW carries ~6k stale leftovers + the quarantined segment → **repair tomorrow**.
- **Overnight:** mining vault into fresh **`palace-vault`** (bge-m3/MPS, `--wing obsidian_vault`, hallways-fix `cb1be92` live → hallways will compute correctly). caffeinate tied to the worker PID prevents idle/system sleep. ~6,636 drawers / file 251/2627 at wrap.
### Upstream contribution — hallway pagination bug
- Found: `compute_hallways_for_wing` (`hallways.py:203`) does an unbatched `col.get(where={"wing":wing})` → `SQLITE_MAX_VARIABLE_NUMBER (32766)` crash on wings >~32k (chamber 42k crashed; wing_api 29.6k passed). Non-fatal (caught) but the wing's hallways silently never build. Same class already fixed in miner.py (#851) + closet_llm.py (#1073); #1558 didn't inherit it.
- Fixed (`cb1be92`): paginate `count()` + `get(limit,offset)` + client-side wing filter. Validated on the live 42k wing (**3.7s, 5,525 hallways**); 21/21 tests; ruff clean.
- **Filed: issue #1619 + PR #1620** (PR from `davidglidden/mempalace` fork — read-only on upstream `origin`, so forked). Draft at `.local-data/issue-hallways-sql-variable-2026-05-25.md`.
### Decisions deferred (negative space)
- **palace-memory `repair rebuild-index` + MCP restart** → tomorrow, fresh session, server stopped. (Recall works now; this purges the ~6k HNSW delete-leftovers + reconciles the quarantine.)
- **Verify the overnight vault-palace mine** → tomorrow.
- **wing_api tool-traffic noise** (this tool-heavy session mined some base64-ish low-value chunks; #1236 isolates them in wing_api) → prune later if it bothers recall.
- **Claude.ai app conversations** → not mined; future, separate export.
## Present — mood / returns (from session-ledger-2026-05-25.md + this session)
- **Dominant thread: live-state-discipline, verify-before-assert** — repeatedly paid off: the EF-name check (verified, not assumed), bge-m3 was *live not aspirational* (collection metadata read), and the device-CPU regression (caught by stack-sampling, not trusting "auto-detect").
- **R — wrong-PID "stuck" misread:** called the mine stuck while sampling the *parent shell* (0% CPU); caught by tracing the palace mine-lock holder to the real worker (which was on MPS, progressing). Drift: `mistook-parent-shell-for-worker-read-as-stuck`.
- **R — "durability" rationalization masked a perf regression:** leaving device unset *felt* portable but silently defaulted to CPU. Drift: `assumed-library-default-device-without-verifying`.
- **Steward go-slow discipline ("leery of getting stuck, losing a week")** shaped pacing — surfaced + diagnosed the 7h vault grind rather than letting it run blind; chose separate-palace + overnight.
- Steward pushed past my over-caution twice (the "destructive" framing → it WAS cleanly removable; the chamber palace choice). His instinct to question framing was load-bearing.
## Future — what is pulling
### The pulling thread (singular)
**Finish the palace-memory cleanup** — run `mempalace repair rebuild-index` on palace-memory (stop the MCP server first, restart after) to purge the ~6k stale HNSW vectors from the 31k vault-wing delete and reconcile the mid-write quarantine. The steward explicitly deferred this to "a fresh session tomorrow."
### Other open horizons (ranked)
- **Load-bearing:** verify the overnight `palace-vault` mine completed cleanly before relying on it.
- **Deferred-with-reason:** PR #1620 / issue #1619 await maintainer response; wing_api noise prune.
- **Parked:** Claude.ai app-conversation export; the broader L1/ARC threads (untouched today).
### Literal question for next-Claude
**Did the overnight `palace-vault` mine finish cleanly** — final drawer count (~140k+ expected for 2627 notes?), did `compute_hallways_for_wing` run *without* the SQL-variable crash (the `cb1be92` fix's first big-wing run), and any quarantine/errors in `~/_Dev/mempalace/.local-data/vault-palace-mine-2026-05-25.log`? Then proceed with the palace-memory repair. Secondary: any maintainer response on #1619 / #1620?
## Pointers
- Live MemPalace: `~/_Dev/mempalace` on `local/bge-m3-on-3.3.6` (HEAD `cb1be92`; unpushed local-fork commits by design). Server bound to palace-memory.
- Palaces: `palace-memory` (44,794; working), `palace-chamber-typography` (42,062; 21 works), `palace-vault` (mining overnight).
- PR worktree: `~/_Dev/mempalace-wt-hallways-fix` (branch pushed to `fork` remote = davidglidden/mempalace).
- Overnight log: `~/_Dev/mempalace/.local-data/vault-palace-mine-2026-05-25.log`. Config backup: `~/.mempalace/config.json.bak-pre-bge-m3-3.3.6-20260525-160354`.
- Ledger: `session-ledger-2026-05-25.md`.