From 8b26bf2ac349e08df038e90be89abb6a46ebc3a9 Mon Sep 17 00:00:00 2001 From: Igor Lins e Silva <4753812+igorls@users.noreply.github.com> Date: Mon, 13 Apr 2026 03:44:22 -0300 Subject: [PATCH] chore: sync main hotfixes into release/3.2.0 (#763) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: disambiguate hook block reasons to name MemPalace explicitly (#666) Replace "your memory system" with explicit MemPalace references and tool names (mempalace_diary_write, mempalace_add_drawer, mempalace_kg_add) in stop and precompact hook block reasons. This prevents Claude Code from misinterpreting the hook as a native auto-memory save instruction. Updated in both Python (hooks_cli.py) and standalone shell scripts. Also fix CONTRIBUTING.md Getting Started to show the fork-first workflow, matching the PR Guidelines section. * fix: remove chromadb <0.7 upper bound — blocks 1.x installs The current constraint `chromadb>=0.5.0,<0.7` forces pip to install chromadb 0.6.x, but palaces created with chromadb 1.x (which is what the mempalace dev environment actually uses — 1.5.7 per uv.lock) have an incompatible SQLite schema. Specifically, chromadb 0.6.x fails with `KeyError: '_type'` when opening a collection written by 1.x. This means a fresh `pip install mempalace` gives users a chromadb version that cannot read palaces created in the maintainer's own environment. The fix removes the upper bound so pip can resolve to the current stable chromadb release. Reproduction: python3 -m venv .venv && source .venv/bin/activate pip install mempalace # installs chromadb 0.6.3 # Try opening a palace created with chromadb 1.x: # -> _get_collection() returns None, tool_status() returns "No palace found" pip install chromadb==1.5.7 # force upgrade # -> tool_status() returns real data (26k drawers in our case) --------- Co-authored-by: z3tz3r0 Co-authored-by: AlyciaBHZ <50111876+AlyciaBHZ@users.noreply.github.com> Co-authored-by: Ben Sigman <1872138+bensig@users.noreply.github.com> --- CONTRIBUTING.md | 5 ++++- hooks/mempal_precompact_hook.sh | 2 +- hooks/mempal_save_hook.sh | 2 +- mempalace/hooks_cli.py | 22 +++++++++++++--------- pyproject.toml | 2 +- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aa4f177..2772b11 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,8 +5,11 @@ Thanks for wanting to help. MemPalace is open source and we welcome contribution ## Getting Started ```bash -git clone https://github.com/MemPalace/mempalace.git +# Fork the repo on GitHub first, then clone your fork +git clone https://github.com//mempalace.git cd mempalace +git remote add upstream https://github.com/MemPalace/mempalace.git + pip install -e ".[dev]" # installs with dev dependencies (pytest, build, twine) ``` diff --git a/hooks/mempal_precompact_hook.sh b/hooks/mempal_precompact_hook.sh index 550a813..784080a 100755 --- a/hooks/mempal_precompact_hook.sh +++ b/hooks/mempal_precompact_hook.sh @@ -72,6 +72,6 @@ fi cat << 'HOOKJSON' { "decision": "block", - "reason": "COMPACTION IMMINENT. Save ALL topics, decisions, quotes, code, and important context from this session to your memory system. Be thorough — after compaction, detailed context will be lost. Organize into appropriate categories. Use verbatim quotes where possible. Save everything, then allow compaction to proceed." + "reason": "COMPACTION IMMINENT (MemPalace). Save ALL session content before context is lost:\n1. mempalace_diary_write — thorough AAAK-compressed session summary\n2. mempalace_add_drawer — ALL verbatim quotes, decisions, code, context\n3. mempalace_kg_add — entity relationships (optional)\nBe thorough — after compaction, detailed context will be lost. Do NOT write to Claude Code's native auto-memory (.md files). Save everything to MemPalace, then allow compaction to proceed." } HOOKJSON diff --git a/hooks/mempal_save_hook.sh b/hooks/mempal_save_hook.sh index a0e4681..df6715e 100755 --- a/hooks/mempal_save_hook.sh +++ b/hooks/mempal_save_hook.sh @@ -145,7 +145,7 @@ if [ "$SINCE_LAST" -ge "$SAVE_INTERVAL" ] && [ "$EXCHANGE_COUNT" -gt 0 ]; then cat << 'HOOKJSON' { "decision": "block", - "reason": "AUTO-SAVE checkpoint. Save key topics, decisions, quotes, and code from this session to your memory system. Organize into appropriate categories. Use verbatim quotes where possible. Continue conversation after saving." + "reason": "AUTO-SAVE checkpoint (MemPalace). Save this session's key content:\n1. mempalace_diary_write — AAAK-compressed session summary\n2. mempalace_add_drawer — verbatim quotes, decisions, code snippets\n3. mempalace_kg_add — entity relationships (optional)\nDo NOT write to Claude Code's native auto-memory (.md files). Continue conversation after saving." } HOOKJSON else diff --git a/mempalace/hooks_cli.py b/mempalace/hooks_cli.py index b6d2290..2ce13f4 100644 --- a/mempalace/hooks_cli.py +++ b/mempalace/hooks_cli.py @@ -18,18 +18,22 @@ SAVE_INTERVAL = 15 STATE_DIR = Path.home() / ".mempalace" / "hook_state" STOP_BLOCK_REASON = ( - "AUTO-SAVE checkpoint. Save key topics, decisions, quotes, and code " - "from this session to your memory system. Organize into appropriate " - "categories. Use verbatim quotes where possible. Continue conversation " - "after saving." + "AUTO-SAVE checkpoint (MemPalace). Save this session's key content:\n" + "1. mempalace_diary_write — AAAK-compressed session summary\n" + "2. mempalace_add_drawer — verbatim quotes, decisions, code snippets\n" + "3. mempalace_kg_add — entity relationships (optional)\n" + "Do NOT write to Claude Code's native auto-memory (.md files). " + "Continue conversation after saving." ) PRECOMPACT_BLOCK_REASON = ( - "COMPACTION IMMINENT. Save ALL topics, decisions, quotes, code, and " - "important context from this session to your memory system. Be thorough " - "\u2014 after compaction, detailed context will be lost. Organize into " - "appropriate categories. Use verbatim quotes where possible. Save " - "everything, then allow compaction to proceed." + "COMPACTION IMMINENT (MemPalace). Save ALL session content before context is lost:\n" + "1. mempalace_diary_write — thorough AAAK-compressed session summary\n" + "2. mempalace_add_drawer — ALL verbatim quotes, decisions, code, context\n" + "3. mempalace_kg_add — entity relationships (optional)\n" + "Be thorough \u2014 after compaction, detailed context will be lost. " + "Do NOT write to Claude Code's native auto-memory (.md files). " + "Save everything to MemPalace, then allow compaction to proceed." ) diff --git a/pyproject.toml b/pyproject.toml index 4ab1a1d..3a3c100 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ classifiers = [ "Topic :: Utilities", ] dependencies = [ - "chromadb>=0.5.0,<0.7", + "chromadb>=0.5.0", "pyyaml>=6.0,<7", ]