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
Opened MemPalace#1115 on 2026-04-22 attempting to land the `.claude-plugin/`
venv-aware Python resolution upstream; closed it on 2026-04-23 after
CI correctly caught the violation of the PATH-only contract MemPalace#942
established, and the realization that the `.claude-plugin/` side of
the autodetect work was explicitly waiting on MemPalace#1069 arbitration.
- CLAUDE.md PR tracker header: 7 → 8 closed
- CLAUDE.md PR tracker gains a MemPalace#1115 closed row with reason
- CLAUDE.md fork-ahead row MemPalace#19 language updated (was "Candidate for
PR upstream" → now notes the attempt, withdrawal, and gating on
bensig's MemPalace#1069 direction)
- README.md change queue: Hooks row reflects the MemPalace#1115 attempt +
withdrawal; still waiting on arbitration
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CLAUDE.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -48,7 +48,7 @@ Ruff for linting (`ruff check`), line length 100, target Python 3.9.
48
48
16.**perf: `miner.status()` paginated `col.get()`** — upstream's single `col.get(limit=total)` hits SQLite's max-variable limit on palaces with many thousands of drawers; fork paginates in 10 K-drawer batches.
49
49
17.**feat: configurable chunking parameters** — `chunk_size` (800), `chunk_overlap` (100), `min_chunk_size` (50) written to `config.json` and exposed via `MempalaceConfig` properties.
50
50
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.
51
-
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. Candidate for PR upstream — Claude Code plugin installs also get a `${CLAUDE_PLUGIN_ROOT}/venv/` and benefit from the fallback.
51
+
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
52
53
53
### Merged into upstream (post-v3.3.1)
54
54
@@ -93,7 +93,7 @@ Ruff for linting (`ruff check`), line length 100, target Python 3.9.
93
93
94
94
## Upstream PRs
95
95
96
-
As of 2026-04-23: 14 merged, 6 open, 7 closed. PRs target `develop`. Fork `main` tracks `upstream/develop`.
96
+
As of 2026-04-23: 14 merged, 6 open, 8 closed. PRs target `develop`. Fork `main` tracks `upstream/develop`.
97
97
98
98
| PR | Status | Description |
99
99
|----|--------|-------------|
@@ -123,6 +123,7 @@ As of 2026-04-23: 14 merged, 6 open, 7 closed. PRs target `develop`. Fork `main`
123
123
|#663|**closed**| Stale HNSW mtime detection (upstream wrote #757) |
124
124
|#626|**closed**| Split into #681-684 |
125
125
|#633|**closed**| Resubmitted as #673|
126
+
|#1115|**closed** 2026-04-23 |`.claude-plugin/` venv-aware Python + MCP — withdrew as premature pending #1069 arbitration; CI correctly caught the #942 PATH-only contract violation |
Copy file name to clipboardExpand all lines: README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,7 +25,7 @@ Size (lines of diff) and Risk (maintainer-appetite + chance of a rework request)
25
25
| Area | Change | Status | Size | Risk | Files |
26
26
|---|---|---|---|---|---|
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
-
|**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`|
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; attempted the `.claude-plugin/` side via [#1115](https://github.com/milla-jovovich/mempalace/pull/1115) on 2026-04-22, withdrawn 2026-04-23 as premature pending [#1069](https://github.com/MemPalace/mempalace/issues/1069) arbitration (CI correctly caught the #942 PATH-only contract violation). Re-submit after bensig's direction on #1069. | 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
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**| Transcript auto-mining in `hook_precompact()` with correct defaults — `--mode convos` + `wing_<project>` derived from transcript path, plus a `hook_auto_mine` config flag (default `true`) for explicit opt-out |[Commented on #1083 on 2026-04-21](https://github.com/MemPalace/mempalace/issues/1083#issuecomment-4292630330) with the two-part design (opt-out + correct defaults), asked @raphaelsamy whether `hook_auto_mine: false` boolean is sufficient or they want finer-grained control, asked @bensig for direction. PR to follow once direction is confirmed. | medium | low-medium |`hooks_cli.py`, `config.py`, `tests/test_hooks_cli.py`|
0 commit comments