Skip to content

Commit 8eb5ce8

Browse files
jpheinclaude
andcommitted
docs: refresh README + CLAUDE.md for 2026-04-25 state
After today's work: - Merged upstream/develop (29 commits), absorbing MemPalace#976 (HNSW + mine_global_lock + PreCompact attempt-cap), MemPalace#1179 (CLI BM25), MemPalace#1180/MemPalace#1182/MemPalace#1183/MemPalace#1185 features. - Filed PR MemPalace#1198 (`_tokenize` None guard) upstream. - Closed PR MemPalace#1171 (adapter-level flock) — superseded by MemPalace#976 + daemon-strict. - palace-daemon migration commits (c09582c + 0e97b19) make the daemon the single canonical writer; in-tree adapter flock no longer carries its weight. README: - Lead paragraph: 2026-04-21 → 2026-04-25 sync date, 165,632 → 151,420 drawer count, daemon-on-disks topology, listed absorbed upstream PRs. - Fork change queue: dropped MemPalace#1171 row, added MemPalace#1198 row. - "Multi-client coordination" section: rewrote — palace-daemon is now the fork's primary answer (was "deferred"), MemPalace#1171 retired, narrative shifted to defense-in-depth around MemPalace#976 + daemon. - Two-layer memory model: storage path is now palace-daemon HTTP, not ~/.mempalace/palace. - Ecosystem palace-daemon row: marks integration as complete (commits cited). - Open upstream PRs table: refreshed to MemPalace org URLs, added MemPalace#1198 row, removed MemPalace#1171, added 2026-04-25 develop sync to merged list, added MemPalace#1171 to closed list with rationale. - Test count 1096 → 1334. CLAUDE.md: - Row 20 (MemPalace#1198): "Upstream PR pending" → "Filed as MemPalace#1198 on 2026-04-24". - Row MemPalace#1171 in PR table: open → closed (with MemPalace#976 supersession). - Added MemPalace#1198 row to PR table. - Top-of-section count: "14 merged, 7 open, 9 closed" → "14 merged, 7 open (including MemPalace#1198), 10 closed (added MemPalace#1171)" + sync date 2026-04-25. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 7a3ee80 commit 8eb5ce8

2 files changed

Lines changed: 47 additions & 37 deletions

File tree

CLAUDE.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ Ruff for linting (`ruff check`), line length 100, target Python 3.9.
4949
17. **feat: configurable chunking parameters**`chunk_size` (800), `chunk_overlap` (100), `min_chunk_size` (50) written to `config.json` and exposed via `MempalaceConfig` properties.
5050
18. ~~**fix: PID file guard prevents stacking mine processes**~~**merged upstream via #1023 in v3.3.2.** Includes the Windows `os.kill``OpenProcess` cross-platform fix. No longer fork-ahead.
5151
19. **fix: `.claude-plugin/` venv-aware Python resolution** — hooks (`mempal-stop-hook.sh`, `mempal-precompact-hook.sh`) and `.mcp.json` resolve Python in this order: `MEMPALACE_PYTHON` env → `$PLUGIN_ROOT/venv/bin/python3` → system `python3`. Upstream's `5fe0c1c` + `be9214a` (fatkobra) and `9f5b8f5` (Pim) regressed to PATH-only lookups and bare `"mempalace-mcp"` command, which break editable dev installs where `mempalace`/`mempalace-mcp` only live in the repo venv. Documented here so future `upstream/develop` merges surface the conflict rather than silently re-regress. Attempted via #1115 on 2026-04-22; withdrew 2026-04-23 as premature pending #1069 arbitration — CI correctly caught the #942 PATH-only contract violation. Re-submit after bensig's direction on #1069.
52-
20. **fix: `_tokenize` None-document guard** (commit `a3a7132`, 2026-04-24) — `searcher.py:50` short-circuits to `[]` when document text is `None`, preventing `AttributeError: 'NoneType' object has no attribute 'lower'` during `_hybrid_rank → _bm25_scores → _tokenize`. Observed in production daemon log on 2026-04-24 21:07:05. Closes the gap left by upstream's #999 None-metadata audit, which covered metadata read loops but not the BM25 reranker helpers. Three regression tests in `TestBM25NoneSafety`. Upstream PR pending.
52+
20. **fix: `_tokenize` None-document guard** (commit `a3a7132`, 2026-04-24) — `searcher.py:50` short-circuits to `[]` when document text is `None`, preventing `AttributeError: 'NoneType' object has no attribute 'lower'` during `_hybrid_rank → _bm25_scores → _tokenize`. Observed in production daemon log on 2026-04-24 21:07:05. Closes the gap left by upstream's #999 None-metadata audit, which covered metadata read loops but not the BM25 reranker helpers. Three regression tests in `TestBM25NoneSafety`. Filed as #1198 on 2026-04-24.
5353

5454
### Merged into upstream (post-v3.3.1)
5555

@@ -94,7 +94,7 @@ Ruff for linting (`ruff check`), line length 100, target Python 3.9.
9494

9595
## Upstream PRs
9696

97-
As of 2026-04-24: 14 merged, 7 open, 9 closed. PRs target `develop`. Fork `main` tracks `upstream/develop`.
97+
As of 2026-04-25: 14 merged, 7 open (including #1198), 10 closed (added #1171). PRs target `develop`. Fork `main` tracks `upstream/develop` (synced 2026-04-25).
9898

9999
| PR | Status | Description |
100100
|----|--------|-------------|
@@ -105,9 +105,10 @@ As of 2026-04-24: 14 merged, 7 open, 9 closed. PRs target `develop`. Fork `main`
105105
| #1087 | open (`MERGEABLE`, 6/6 CI green) | `mempalace purge --wing/--room` CLI — destructive drawer removal (fork-ahead Row 4) |
106106
| #1094 | open (`CLEAN`, 6/6 CI green) | Coerce `None` metadatas → `{}` at `ChromaCollection.query/.get` boundary (closes #1020) |
107107
| #1142 | open (filed 2026-04-23) | `docs/RELEASING.md` with `mempalace-mcp` pre-release grep — fulfills #1093's release-checklist proposal, accepted by @bensig 2026-04-23 via email |
108-
| #1171 | open (filed 2026-04-24, CI green) | Cross-process write lock at `ChromaCollection` adapter — prevents HNSW corruption from concurrent MCP servers + mine subprocesses. Moved to RFC 001 backend seam from mcp_server-only approach. |
109108
| #1173 | open (filed 2026-04-24, CI green) | Call `quarantine_stale_hnsw()` in `make_client()`; lower threshold 3600→300s (production 0.96h-drift segfault). Complementary to #1062 which covers server startup. |
110109
| #1177 | open (filed 2026-04-24, CI green) | `.blob_seq_ids_migrated` marker guard — skip `sqlite3.connect()` on already-migrated palaces. Closes #1090. |
110+
| #1198 | open (filed 2026-04-24) | `_tokenize` None-document guard — closes the gap upstream's #999 None-metadata audit left in BM25 helpers. Three regression tests in `TestBM25NoneSafety`. |
111+
| #1171 | **closed** 2026-04-25 | Cross-process write lock at `ChromaCollection` adapter — superseded by [#976](https://github.com/MemPalace/mempalace/pull/976) (`mine_global_lock` at the right layer) plus this fork's daemon-strict architecture. |
111112
| #659 | **merged** 2026-04-23 | Diary wing parameter (`tool_diary_write` / `tool_diary_read` accept `wing`, hook derives from transcript path) |
112113
| #661 | **merged** 2026-04-22 | Graph cache with write-invalidation |
113114
| #673 | **merged** 2026-04-22 | Deterministic hook saves (broader than upstream's #966) — config-flag-gated, strictly safer save semantics |

0 commit comments

Comments
 (0)