fix: return empty status instead of error on cold-start palace (#830)#831
Merged
bensig merged 1 commit intoMemPalace:developfrom Apr 15, 2026
Merged
Conversation
f51ada3 to
fdbc8e2
Compare
17d3adc to
318df31
Compare
…lace#830) tool_status() called _get_collection() with the default create=False, which throws when the ChromaDB collection does not exist yet (valid palace, zero drawers). The exception was swallowed and status returned "No palace found" even though init had completed successfully. Switching to create=True bootstraps an empty collection on first status call, matching what the write path already does. Fix suggested by @hkevinchu in the issue.
318df31 to
2fc9d7f
Compare
bensig
approved these changes
Apr 15, 2026
Collaborator
bensig
left a comment
There was a problem hiding this comment.
Code reviewed — no issues found. CLAUDE.md compliance verified.
igorls
added a commit
that referenced
this pull request
Apr 16, 2026
Advisor caught: initial boundary (962776c..develop) skipped PRs that landed on develop after v3.3.0 tag but before the sync-back merge. Adds entries for #871 MEMPAL_VERBOSE, #811 research() local-only default, #866 init .gitignore, #864 MCP stdout redirect, #863 precompact hook, #865 searcher empty results, #831 cold-start palace, #862 init help, #815 Slack provenance, #840 save hook auto-mine. Also drops the awkward caveat on #846 created_at — it's post-v3.3.0.
shafdev
pushed a commit
to shafdev/mempalace
that referenced
this pull request
Apr 17, 2026
Advisor caught: initial boundary (962776c..develop) skipped PRs that landed on develop after v3.3.0 tag but before the sync-back merge. Adds entries for MemPalace#871 MEMPAL_VERBOSE, MemPalace#811 research() local-only default, MemPalace#866 init .gitignore, MemPalace#864 MCP stdout redirect, MemPalace#863 precompact hook, MemPalace#865 searcher empty results, MemPalace#831 cold-start palace, MemPalace#862 init help, MemPalace#815 Slack provenance, MemPalace#840 save hook auto-mine. Also drops the awkward caveat on MemPalace#846 created_at — it's post-v3.3.0.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #830. Fix suggested by @hkevinchu -- props for the clear diagnosis.
tool_status()called_get_collection()with the defaultcreate=False. On a valid palace whereinitcompleted but no drawers were added yet, the ChromaDB collection doesn't exist.client.get_collection()throws, the exception is swallowed, and status returns{"error": "No palace found"}with a misleading hint to re-run init.Fix:
_get_collection(create=db_exists)intool_status(), wheredb_existschecks whetherchroma.sqlite3is present on disk. This bootstraps the ChromaDB collection on a valid-but-empty palace (init ran, DB file exists, but no drawers yet) without accidentally creating a palace in a non-existent or misconfigured directory. When the palace path is genuinely wrong,_get_client()still fails and_no_palace()fires correctly.Changes (2 files, +24/-1):
mempalace/mcp_server.py:_get_collection()->_get_collection(create=db_exists)withdb_exists = os.path.isfile(...)guardtests/test_mcp_server.py: newtest_status_cold_start_no_collection-- calls status without pre-creating the collection, assertstotal_drawers: 0instead of error