You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sweep caught three adjacent issues I hadn't cross-referenced:
- MemPalace#854 (silent_save flag never read) — closed by MemPalace#673; added to row + PR body
- MemPalace#848 (remove drawers from a wing) — closed by MemPalace#1087; added to row + PR body
- MemPalace#390 (default chunk exceeds MiniLM token cap) — addressed by MemPalace#1024
(configurable unblocks the user without changing default)
Posted explanatory comments on all three issues pointing users to the
relevant PRs. PR bodies updated via REST API (gh pr edit's GraphQL path
was failing on a deprecation warning around projectCards).
Copy file name to clipboardExpand all lines: README.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -27,17 +27,17 @@ Size (lines of diff) and Risk (maintainer-appetite + chance of a rework request)
27
27
|**CLI**|`cmd_export` CLI wrapper — wires upstream's existing `export_palace()` from `exporter.py` to a CLI entry point; upstream has the module but no CLI. |[#1086](https://github.com/MemPalace/mempalace/pull/1086)| tiny | none |`cli.py`|
28
28
|**Hooks**|`mempal_save_hook.sh` auto-detects Python — checks `MEMPAL_PYTHON` env var, then repo venv at `../../venv/bin/python3`, then system `python3`; no hardcoded path required. Same pattern applied to `.claude-plugin/` stop and precompact hooks. |[Replied on #1049 on 2026-04-21](https://github.com/MemPalace/mempalace/issues/1049#issuecomment-4292554161) offering our autodetect; waiting on maintainer arbitration vs. [#1069](https://github.com/MemPalace/mempalace/issues/1069)'s consolidation direction before PR. | small | low |`hooks/mempal_save_hook.sh`, `.claude-plugin/hooks/mempal-stop-hook.sh`, `.claude-plugin/hooks/mempal-precompact-hook.sh`|
29
29
|**Reliability**|`quarantine_stale_hnsw()` should also validate the HNSW `index_metadata` file integrity — a process killed mid-write leaves a corrupt file with zero mtime drift, so the 1h threshold doesn't fire and the next palace open segfaults. Fix: attempt to deserialize the file in the quarantine check and quarantine on failure regardless of mtime. | Blocked on [#1062](https://github.com/MemPalace/mempalace/pull/1062) — @Samaara-Das's PR wires the quarantine caller that v3.3.2 shipped without (fixes [#1061](https://github.com/MemPalace/mempalace/issues/1061)). File our integrity-check extension as a follow-up after #1062 merges. | small | low |`backends/chroma.py`|
30
-
|**CLI**|`cmd_purge` CLI — delete drawers by wing/room, nuke-and-reinsert retained drawers to avoid HNSW ghost entries left by `collection.delete()`. Substantive new command. |PR pending (file directly; reference[#521](https://github.com/MemPalace/mempalace/issues/521) for the hnswlib race that motivates the nuke-and-reinsert pattern)| medium | medium |`cli.py`|
30
+
|**CLI**|`cmd_purge` CLI — delete drawers by wing/room, nuke-and-reinsert retained drawers to avoid HNSW ghost entries left by `collection.delete()`. Substantive new command. |[#1087](https://github.com/MemPalace/mempalace/pull/1087) · closes [#848](https://github.com/MemPalace/mempalace/issues/848) (@robottwo's wing/room drawer removal feature request); references[#521](https://github.com/MemPalace/mempalace/issues/521) for hnswlib motivation| medium | medium |`cli.py`|
31
31
|**Hooks**|`hooks/mempal_precompact_hook.sh` transcript auto-mining — session ID parsed from JSON input, transcript resolved by direct path or `find`-by-session-id fallback, then mined inline (chunk_exchanges → upsert) before compaction fires; includes Python auto-detection |**On hold** — [#1083](https://github.com/MemPalace/mempalace/issues/1083) (@raphaelsamy, 2026-04-21) reports hook auto-mine with default flags produces polluted mega-wings; demanding opt-out. Our proposal adds *more* hook auto-mining in the same direction — possibly opposite to where maintainer wants to go. Engage #1083 before filing. | medium | low-medium |`hooks/mempal_precompact_hook.sh`|
32
32
|**Performance**|`bulk_check_mined()` paginated pre-fetch + `--workers` ThreadPoolExecutor concurrent mining |[Issue #1088](https://github.com/MemPalace/mempalace/issues/1088) filed 2026-04-21; [cross-ref comment](https://github.com/MemPalace/mempalace/issues/1088#issuecomment-4292570126) ties it to [#357](https://github.com/MemPalace/mempalace/issues/357) (parallel-mining corruption we could fix) and gates the PR on [#1071](https://github.com/MemPalace/mempalace/pull/1071) landing first (ORT thread cap, for bounded parallelism). | medium | medium |`palace.py`, `miner.py`|
33
33
|**Reliability**|`_get_client()` tries `get_collection` before `create_collection` — `get_or_create_collection` segfaults ChromaDB 1.5.x when the existing collection's metadata differs from the call-site metadata |[Issue #1089](https://github.com/MemPalace/mempalace/issues/1089) filed 2026-04-21 — documented the crash + fork workaround, cross-referenced [#974](https://github.com/MemPalace/mempalace/issues/974) / [#1071](https://github.com/MemPalace/mempalace/pull/1071) interaction (metadata drift risk post-merge), offered three paths: interim guard PR, chroma-core bug report, or close as covered. | small | medium |`backends/chroma.py`|
34
34
|**Reliability**| Skip `_fix_blob_seq_ids` sqlite open after first successful migration via `.blob_seq_ids_migrated` marker — opening sqlite3 against a live ChromaDB 1.5.x file corrupts the next PersistentClient |[Issue #1090](https://github.com/MemPalace/mempalace/issues/1090) filed 2026-04-21 — documented the post-migration re-open crash pattern, fork's sentinel workaround, adjacent issues ([#722](https://github.com/MemPalace/mempalace/issues/722), [#832](https://github.com/MemPalace/mempalace/issues/832), [#1035](https://github.com/MemPalace/mempalace/issues/1035)), asked whether other palaces repro this. | small | medium |`backends/chroma.py`|
35
35
|**Performance**| Graph cache — 60s TTL, invalidated on writes |[#661](https://github.com/milla-jovovich/mempalace/pull/661)| small | medium |`palace_graph.py`|
36
36
|**Performance**| L1 importance pre-filter — `importance >= 3` first, full scan fallback |[#660](https://github.com/milla-jovovich/mempalace/pull/660)| small | low |`layers.py`|
37
37
|**Performance**|`miner.status()` paginates `col.get()` in 10 K-drawer batches — upstream's single `col.get(limit=total)` hits SQLite's max-variable limit on palaces with many thousands of drawers | tracked upstream in [#851](https://github.com/milla-jovovich/mempalace/pull/851) (approved, MERGEABLE, also fixes #850); fork's paginated version has been running since 2026-04-10 | small | low |`miner.py`|
38
-
|**Config**| Configurable chunking parameters — `chunk_size` (default 800 chars), `chunk_overlap` (100), `min_chunk_size` (50) written to `config.json` and exposed via `MempalaceConfig` properties |[#1024](https://github.com/milla-jovovich/mempalace/pull/1024)| small | low |`config.py`, `miner.py`, `convo_miner.py`|
38
+
|**Config**| Configurable chunking parameters — `chunk_size` (default 800 chars), `chunk_overlap` (100), `min_chunk_size` (50) written to `config.json` and exposed via `MempalaceConfig` properties |[#1024](https://github.com/milla-jovovich/mempalace/pull/1024)· addresses [#390](https://github.com/MemPalace/mempalace/issues/390) (default 800 exceeds MiniLM's 256-token cap; this lets users override) | small | low |`config.py`, `miner.py`, `convo_miner.py`|
39
39
|**Search**| Warnings + sqlite BM25 top-up when vector underdelivers — `search_memories` returns `warnings: [...]` and `available_in_scope: N` so callers see why recall was partial; fallback hits tagged `matched_via: "sqlite_bm25_fallback"`. The palace never silently returns fewer results than the scope contains (sibling of #951, addresses read-side of #823) |[#1005](https://github.com/milla-jovovich/mempalace/pull/1005)| medium | low |`searcher.py`|
40
-
|**Hooks**| Silent save mode — direct Python API, deterministic, zero data loss; extracts 2–3 topic words from recent messages for the diary title; optional desktop toast via `notify-send`|[#673](https://github.com/milla-jovovich/mempalace/pull/673) · approved externally 2026-04-12, rebased + squashed 2026-04-21, `MERGEABLE`| medium | low |`hooks_cli.py`|
40
+
|**Hooks**| Silent save mode — direct Python API, deterministic, zero data loss; extracts 2–3 topic words from recent messages for the diary title; optional desktop toast via `notify-send`|[#673](https://github.com/milla-jovovich/mempalace/pull/673) · approved externally 2026-04-12, rebased + squashed 2026-04-21, `MERGEABLE`· closes [#854](https://github.com/MemPalace/mempalace/issues/854) (silent_save flag never read) | medium | low |`hooks_cli.py`|
41
41
|**Hooks**| Honor silent_save when `stop_hook_active:true` — Claude Code 2.1.114 sets the flag on every plugin-dispatched Stop fire after the first, and the legacy block-mode loop guard was suppressing every subsequent auto-save (silent, no log entry, marker stuck). Fixed to only skip on the flag in block mode |[#1021](https://github.com/milla-jovovich/mempalace/pull/1021)| small | low |`hooks_cli.py`|
42
42
|**Hooks**| Write hook JSON to real stdout via `sys.modules` lookup — `mempalace.mcp_server` redirects stdout→stderr at import to protect MCP stdio from ChromaDB C-level noise; `_output()` checks `sys.modules` for an already-loaded `mcp_server` and reuses its `_REAL_STDOUT_FD`, otherwise writes directly to fd 1. Avoids triggering the redirect as a side effect. |[#1021](https://github.com/milla-jovovich/mempalace/pull/1021)| small | low |`hooks_cli.py`|
43
43
|**Features**| Diary wing routing — derive project wing from transcript path; `tool_diary_write` and `tool_diary_read` accept an optional `wing` parameter |[#659](https://github.com/milla-jovovich/mempalace/pull/659)| small | low |`hooks_cli.py`, `mcp_server.py`|
0 commit comments