Skip to content

Commit ca68e3a

Browse files
jpheinclaude
andcommitted
docs: document MemPalace#1115 attempt + withdrawal
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>
1 parent 3dafdd3 commit ca68e3a

2 files changed

Lines changed: 4 additions & 3 deletions

File tree

CLAUDE.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Ruff for linting (`ruff check`), line length 100, target Python 3.9.
4848
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.
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.
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.
5252

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

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

9494
## Upstream PRs
9595

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`.
9797

9898
| PR | Status | Description |
9999
|----|--------|-------------|
@@ -123,6 +123,7 @@ As of 2026-04-23: 14 merged, 6 open, 7 closed. PRs target `develop`. Fork `main`
123123
| #663 | **closed** | Stale HNSW mtime detection (upstream wrote #757) |
124124
| #626 | **closed** | Split into #681-684 |
125125
| #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 |
126127

127128
## Two-Layer Memory Architecture
128129

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Size (lines of diff) and Risk (maintainer-appetite + chance of a rework request)
2525
| Area | Change | Status | Size | Risk | Files |
2626
|---|---|---|---|---|---|
2727
| **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` |
2929
| **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` |
3030
| **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` |
3131
| **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

Comments
 (0)