The 2026-06-06 normalization sweep (3f9a89b, 283 files) prepended a stray permalink-only frontmatter block to 39 memory files, 20 of them session wrap records. Any real frontmatter parser reads the FIRST block, gets `permalink` alone, and never sees name/description/type. The sharp case: `strip_frontmatter` exists specifically to stop thread extraction from matching inside `description:` — its docstring says so. On those 20 wrap records it strips the stray block and hands the real frontmatter back AS BODY, producing exactly the condition it was written to prevent. Repair merges permalink into the real block and drops the duplicate. Nothing retyped: frontmatter and body are carried as slices, body md5 asserted unchanged. TWO DEFECTS OF MY OWN, both found only after claiming success: 1. THREE FILES DAMAGED BY THIS SESSION'S OWN STAMPING COMMIT (ef6fa94). That script located frontmatter with a non-greedy `^---\n.*?\n---\n`, which on a stray-block file matches the STRAY block — so it appended superseded_by to the wrong block and orphaned the real frontmatter into the body. That is the same non-greedy-first-block blindness diagnosed in strip_frontmatter one hour earlier, reproduced in the tool written to clean up after it. And the post-stamp check reported "malformed: none" because it asked "does the file start with frontmatter then a banner" — true for all three — while the claim was "the stamp preserved the record's metadata". The control's subject was adjacent to the claim's, for the sixth time today and the first time in my own verification. Repaired, verified against the pre-stamp file from git: no key lost, prose preserved. 2. REPAIRING 20 APRIL-MAY WRAP RECORDS MOVED THEIR MTIMES TO TODAY, and `sec_pause` picked "newest wrap" by mtime — so the digest promoted an April session to `Last wrap` and lost both the pulling thread and the open question. Caught by the DEGRADED section, which is the honest-degradation mechanism doing its job. `sec_pause` now selects by git add-time, like `wrap_events`. Residual stated in the comment: add-time lags the wrap by hours, so `Last wrap` is an upper bound — wrong by hours where mtime was wrong by months. Verified after: 0 two-block patterns, 0 orphaned frontmatter, 16 stamps intact with name: present, 381 pointers resolve, 0 dead, selftest PASS, drift clean, digest reports 0 degraded sections and the correct last wrap. Not defects: context-discipline.md and relational-gap-analysis.md use the `title:`/`type: note` convention and have no `name:` — flagged by my check, correct as they stand. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013Y6t6qx7cpaCu5xGdD36u4
4.5 KiB
name: MemPalace bge-m3 mine — drawers stored, search broken (Internal error: Error finding id) description: 2026-05-03 diagnostic state. Three days of CPU/MPS time on the bge-m3 chamber-library mine produced 933,576 drawers in storage but functional semantic recall is broken. Real loss for the steward. type: project originSessionId: 8d9ac240-47df-4578-aec1-a9dd32965027 permalink: claude-memory/project-mempalace-bge-m3-mine-search-broken-2026-05-03 superseded_by: project-mempalace-winddown.md superseded_on: 2026-08-17
SUPERSEDED 2026-08-17. Diagnostic state of a palace that no longer exists.
Current record: project-mempalace-winddown.md. Kept for detail and provenance — do not read the status below as live.
Diagnostic state (2026-05-03 evening)
The good (storage)
~/.mempalace/palace/chroma.sqlite3is 6.3 GBmempalace_statusreturns instantly:total_drawers: 933,576mempalace_list_wingsreturns instantly:chamber_library: 933,576- All embeddings are dimension 1024 (bge-m3 confirmed)
- Two Chroma collections exist:
mempalace_drawers(1024d),mempalace_closets(1024d) - Last write to chroma.sqlite3: today (2026-05-03 17:34)
- Mining process is NOT running — terminated cleanly per machine cold
The bad (search)
mempalace_searchwith any wing-scoped query returns immediately with:Search error: Error executing plan: Internal error: Error finding id- Tried two queries — both errored:
- "Athenaeus herons curved necks seed-gathering grouse warblers sukallides fig season" (steward's verbatim test passage)
- "Bringhurst" (single keyword)
- Both returned the SAME error string → not a query-content issue
Working hypothesis
The bge-m3 + MPS mine produced the storage layer (Chroma's sqlite + embedding tables) but the LanceDB / vector index that backs search is incomplete or corrupted. Possible causes:
- Mine completed embeddings but never finished building/persisting the search index
- Index segment file got truncated or had write failure mid-build
- bge-m3 dimension change (was 384 with mxbai, now 1024) requires a fresh index that wasn't fully built
What this cost
Three days of CPU/MPS compute, per steward's accounting. The steward wrapped the prior session having already deferred the mine for fresh-session restart on MPS to get 5-10x speedup. That work appears to have run to completion on the storage side (drawer count went from 501k @ pause-point on 2026-05-01 to 934k now) — but the recall function the mine was meant to enable is non-functional.
This is not a "non-fatal" failure. The whole point of the mine was searchable verbatim recall via MCP. Storage without search is useless storage. The contamination-pattern frame: a system that reports "ready" via its own counters (status returns 933k drawers, list_wings returns the wing) but cannot deliver the actual function it was built for.
Important honesty correction
When the steward said "40 minutes for mempalace queries — must be slow," that was incorrect framing on my part. Mempalace queries themselves return in milliseconds — status and list_wings are instant; search returns the error string immediately. The 40 minutes was me getting deflected by a cascade of UI regressions (audit-induced) and never coming back to characterize the search failure. Mempalace is not slow; it is broken. That distinction matters because the diagnosis differs (slow → optimization; broken → repair).
Possible paths forward (not yet tried)
- Diagnose first, don't re-mine. Inspect the Chroma
segmentstable + on-disk index files (palace/<segment-uuid>/) to see whether the index files are present, what state they're in, and whether the search error refers to a specific missing segment ID. - Try
--force-rebuild-indexor equivalent mempalace mine flag (if one exists) — might rebuild the search index without re-embedding. Saves the 3 days. - Mine to a fresh palace path, keep the broken one for forensics. Worst case scenario; lose the 3 days.
- File issue upstream — Seb / mempalace repo. The "Internal error: Error finding id" is opaque enough that it warrants the maintainer's eyes.
Steward signal
"Please take note of the mempalace debugging. Three days of time that mining cost me." "40 minutes. I smell something rotten with mempalace. When you call it it takes forever."
The frustration is appropriate. Don't minimize. Don't reach for "still useful" framings. The mine cost real time and the result is not what was promised.