Files
dotfiles/claude/memory/session-2026-06-02-plane-setup-mempalace-coldstart-fix.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

62 lines
9.6 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-06-02-afternoon-evening-plane-so-coordination-layer-stood-up-mempalace-recurring-drop-root-cause-found-fixed-1495-cold-start-warmup
description: CapableMind housekeeping pivot. Built the Plane↔GH effort-tracking bridge
(BMF project, 5 thin tasks, GH-mirrored labels) and diagnosed+fixed the weeks-old
MemPalace silent-drop (upstream
metadata:
node_type: memory
type: project
originSessionId: 4121cd33-7223-4181-8719-ca764ba5890a
permalink: claude-memory/session-2026-06-02-plane-setup-mempalace-coldstart-fix
---
# Session 2026-06-02 (afternoon/evening) — Plane setup + MemPalace cold-start fix
Re-wake same day (~3h after the ARC craft-morning wrap). Steward pivoted: **"CapableMind housekeeping."** Two arcs, both shipped to completion; one needs activation+verification next session.
## Past — what we did
### Arc 1 — Plane.so coordination layer (Seb's request: make the 6-hour gap a boon, not a bottleneck)
- **Added the official Plane MCP server** — `claude mcp add --transport http --scope user plane https://mcp.plane.so/http/mcp`. **OAuth, user-scoped, no secret stored.** (Reserved Seb's PAT for future automation — OAuth is cleaner for interactive use; Plane's own recommendation.) Connected after steward did `/mcp` browser auth + a Claude Code restart (mid-session MCP adds need a relaunch to appear).
- **Coordination model (Seb's, the load-bearing distinction):** GH issues = canonical/technical; Plane task = **thin effort overlay** — `[BM #N]` title tag, ONE effort/coordination line (no technical detail), GH issue attached as link, priority+labels mirror GH. Coupled-but-separated → no parallel-source-of-truth drift (honours CLAUDE.md "one canonical source per concern"). This dissolved my whole "canonical-role" question.
- **Home project = BMF** (Better Memories Framework, for `betterMemories_app` issues). **BBF = BetterBridge** is a *different beast* — an agent control-plane/observability **product** (Shopify embedded app), downstream of L1 (consumes BMF health/recall); spec `docs/specs/bbf/core/betterbridge-spec.md`. I misread BBF as the coordination board; steward corrected → I read the repo to ground it.
- **Cleared the 7 Plane demo tutorial cards** (kept BMF project — it's our home; MCP exposes no archive-project tool). **Seeded 5 thin tasks** grow-as-we-go: #165 (urgent, bug+priority:critical), #167 (high, bug+priority:high), #170 (tracking), #168 (documentation), #171 (bug+tracking). Each: effort-line + GH link + mirrored priority/labels.
- **Created 5 Plane labels** mirroring GH colours (bug #d73a4a, documentation #0075ca, priority:critical #b60205, priority:high #d93f0b, tracking #ededed).
- **Recorded Plane as NOW-CENTRAL** to the steward↔Seb workflow: `reference-plane-coordination-workflow.md` + MEMORY.md Standing-preferences pointer.
- **Steward decisions:** effort-description shape + assignees → "wait and see a few days, revisit." Labels → mirror GH. Grow-as-we-go (not full 35-issue backfill).
- **Tool gotcha caught:** `create_work_item` silently ignores `description_stripped` — needs `description_html`. Fixed via update; verified persisted.
### Arc 2 — MemPalace recurring silent-drop: ROOT CAUSE FOUND + FIXED (was "root cause unknown" for weeks)
- Steward's hypothesis (re-enable the every-15 auto-write to keep MCP from going idle) **disproven both ways:** (a) auto-write was never actually disabled — `~/.mempalace/config.json` has no `hooks` key → defaults `auto_save=true`, and the hook log shows it firing today; (b) it's a *separate process* (`mempalace mine &`) that never touches the MCP server's idle timer — can't keep the connection warm.
- **Real cause = upstream MemPalace/mempalace #1495:** first chromadb-write after a fresh `mempalace-mcp` boot must cold-load the embedder (5–30s); that exceeds Claude Code's MCP client timeout → **-32000** desync, **stderr uncaptured → no trace** (why the logs end clean with no death). `diary_write` AT WRAP is the classic first-write — exactly the steward's "red MCP error before I invoked wrap-up." Restart just re-arms the trap → recurs.
- **Fix `cf96e68` (merged #1530) is already in the steward's tree** (branch `local/bge-m3-on-3.3.6`, 0 behind origin/main) but **opt-in**.
- **Steward flagged the non-standard engine** (bge-m3 pinned on MPS, not the standard CoreML/ONNX #1495 describes). **VERIFIED** the warmup is embedder-agnostic: `_maybe_eager_warmup_embedder()` (mcp_server.py:2656, called from main() L2845) fires a throwaway probe through the *configured* EF → `embedding.py:259-279` wires `bge-m3` → `SentenceTransformerEmbeddingFunction(device="mps")`. So warmup WILL load bge-m3/MPS at boot. bge-m3 already cached (`~/.cache/huggingface/hub/models--BAAI--bge-m3`) → no 2.2GB download.
- **Note:** the bge-m3/MPS dispatch is a LOCAL patch (`embedding.py:22-23`) re-applied after each upstream merge — fragile; re-apply + re-confirm warmup on any future mempalace update.
- **FIX APPLIED** in `~/.claude/settings.json` `env`: `MEMPALACE_EAGER_WARMUP=1` + `MEMPALACE_LOG_FILE=/Users/davidglidden/.mempalace/mcp.log` (capture future traces) + `MEMPALACE_MCP_IDLE_HOURS=0` (idle-exit insurance). **Requires Claude Code restart to activate** (env applies at MCP subprocess launch). Startup will be a few seconds slower (bge-m3→MPS load moved to boot — the point). Dropped #2 (raise MCP timeout) — warmup makes it moot.
- **Defense-in-depth (steward-authorized):** patched `/wrap-up` SKILL.md §4.0 — liveness-ping MemPalace (lightweight `hook_settings`, NOT slow `status`) before the diary write; if down, surface loudly and let the file/ledger deposit carry the wrap. A drop can never silently eat a wrap again. (Provenance note added per skill convention.)
## Present — mood / returns
- **Steward corrected me twice, both caught real errors before I over-committed:** (1) BBF≠coordination board (I'd assumed from name+timing) → read the repo; (2) "our embedding engine is not the standard" → I'd been about to present the #1495 fix as clean without checking it warms bge-m3/MPS. Both are the *verify-before-assert / render-and-LOOK* through-line that recurs across recent sessions. Good catches, gracefully taken.
- **Time-discipline held:** steward flagged "we've lost more than a week already — don't lose a lot of time on this." I bounded the MemPalace diagnosis, and the upstream-issue check (#4) turned out to BE the win (#1495 named our exact bug). Lean beat thorough here because the answer was already written down upstream.
- **render-and-LOOK wins:** caught the `description_stripped` silent-drop by reading the returned objects; verified the warmup call-site + EF wiring + model cache rather than asserting.
## Future
- **Pulling thread:** the **MemPalace cold-start fix is applied but UNVERIFIED.** It only activates on a Claude Code restart, and the proof is a clean next-session wrap with no -32000. Until then it's a hypothesis with strong evidence, not a confirmed fix.
- **Actionable resumption point (as of wrap — re-judge against what changed):** `~/.claude/settings.json` env is set; restart pending. **First move next session:** at wake, check `~/.mempalace/mcp.log` exists + shows the warmup probe at boot, and that `mempalace_status`/first `diary_write` is fast (warm). If yes → fix confirmed, close the recurring item. If it still drops → the warmup didn't take for bge-m3/MPS; escalate (move the env onto the mempalace MCP server's own `env` in `~/.claude.json`, and/or confirm the probe actually exercises the configured EF on this branch).
- **Open horizons (ranked):**
- *Load-bearing:* verify the MemPalace fix (above).
- *Live, low-effort:* maintain the Plane board as we work (update task state as issues move — the relay). Steward revisits effort-description shape + assignees in a few days.
- *Housekeeping remainder surfaced at wake, NOT done this session:* 8 untracked CapableMind-AI files (deferred review since 2026-05-18); PENDING.md at 768 lines (archive CLOSED OP-/S-/CD- items); BMF runtime parked pending Seb's N6; L1 tracker current-state stale (2026-05-28); Seb gate-question (did his D1–D10 move the four Hindsight findings) — checkable now that he's back-ish.
- *Parked:* L2 (through end of May — now past; not re-opened this session).
## Pause statement
I'm about to be away from this. The MemPalace fix is applied but won't have been *exercised* until the restart + a real next-session MemPalace write. I want to find, on return, either confirmation it held (mcp.log shows warmup, no drop) or a clean signal it didn't (so we escalate the env placement) — not a silent re-arming of the same trap.
## Decisions deferred (and why)
- **#2 (raise MCP tool timeout):** dropped, not deferred — warmup amortizes the cold-load to startup, so the timeout never trips; raising it would treat a symptom the root fix removes.
- **Effort-description shape + Plane assignees:** steward chose "wait and see a few days" — don't tune the thin-task format or assign tasks until the board's been lived with.
- **The rest of the housekeeping list** (untracked files, PENDING bloat, BMF restart, L1 tracker refresh, Seb gate-question): not touched — Plane + MemPalace consumed the session; they remain open for the next housekeeping pass.
- **Did NOT restart Claude Code mid-wrap** to activate the fix — chose to wrap first so the deposit is safe, then the steward restarts.
## Literal question for next-Claude
After the restart: did the warmup actually prevent the cold-start drop — does `~/.mempalace/mcp.log` show the warmup probe at boot, and did the first `diary_write`/`search` succeed without -32000? If it still drops, the env didn't reach the bge-m3/MPS path and we escalate.