chore(release): sync main back to develop after v3.3.5 - #1442
Conversation
release: v3.3.3 — sync develop → main for tag cut
Bumps every version source from 3.3.3 to 3.3.4: - pyproject.toml - mempalace/version.py (canonical) - .claude-plugin/plugin.json - .claude-plugin/marketplace.json - .codex-plugin/plugin.json - README.md badge Dates the CHANGELOG section and adds entries for the bug fixes that landed this cycle (#1135, #1191, #1230, #1231) plus expands the #1194 entry to credit the lookup-side recovery path from #1197. Pre-tag verification: - 1441 passed, 1 skipped (full suite minus benchmarks, all platforms) - ruff check + format clean - 44/44 in test_version_consistency + test_readme_claims (6-file sync) - JPH invariant: pyproject.toml + .claude-plugin/plugin.json both reference mempalace-mcp - Wheel build + fresh-venv install: mempalace --version reports 3.3.4, mempalace-mcp --help works (catches the v3.3.2-class regression)
Agent-Logs-Url: https://github.com/MemPalace/mempalace/sessions/01a1089d-da46-4dc8-85e8-d7e50763dd58 Co-authored-by: igorls <4753812+igorls@users.noreply.github.com>
The fix landed this cycle and is documented under 3.3.4. The 3.3.0 Bug Fixes block is shipped history and shouldn't grow new entries retroactively.
The PR documenting the fix is #1232; referencing it from inside its own changelog entry is circular.
Three fixes landed on develop after the initial release-prep cut and were brought in via the develop merge. Document them in the 3.3.4 Bug Fixes section so the release notes reflect what users will actually receive. - #1287 - HNSW divergence floor scales with hnsw:sync_threshold (resolves a silent-fallback regression introduced by the interaction between #1191 and #1227 in this release) - #1262 - ChromaBackend get_or_create_collection split, fixing the stop-hook SIGSEGV class on legacy palaces with mismatched stored metadata (#1089) - #1288 / #1254 - repair --mode max-seq-id heuristic now decodes BLOB-typed embeddings.seq_id, restoring the un-poison path added in #1135 for palaces where chromadb 1.5.x writes seq_ids natively
The same try/except split that #1262 applied at the backend layer (ChromaBackend.get_collection) was needed at the parallel call site in mcp_server._get_collection(create=True), which carries the same metadata payload directly to chromadb's Python client. Both reopen paths in mempalace now bypass get_or_create_collection on existing collections, closing the SIGSEGV class for both tool_add_drawer and tool_diary_write (the Stop hook's path).
chore(release): v3.3.4
# Conflicts: # .claude-plugin/marketplace.json # .claude-plugin/plugin.json # .codex-plugin/plugin.json # CHANGELOG.md # README.md # mempalace/version.py # pyproject.toml # uv.lock
Copilot review on PR #1434 caught that the existing 3.3.5 entry described the validator as it was authored under #1167 — accepting ``YYYY``/``YYYY-MM``/``YYYY-MM-DD`` and rejecting ISO datetimes — but PR #1417 (closes #1374) merged into develop on 2026-05-10 and inverted that: ``sanitize_iso_temporal()`` now rejects partial dates and accepts canonical UTC datetimes (``YYYY-MM-DDTHH:MM:SSZ`` / ``+00:00``). ``sanitize_iso_date()`` is kept as a backwards-compat wrapper. Update the bullet to describe the *shipped* behavior, name both functions, list both accepted and rejected forms, and call out the 3.3.4 → 3.3.5 behavior change for partial-date inputs that now error. Reference both #1167 (original) and #1374/#1417 (the expansion).
There was a problem hiding this comment.
Pull request overview
Syncs main back into develop after the v3.3.5 release so develop reflects the shipped release state (including the changelog corrections and the release-review follow-up fixes/tests that previously only existed on main).
Changes:
- Update
CHANGELOG.mdto reflect the shipped KG temporal validator behavior (sanitize_iso_temporal()semantics) and correct the v3.3.4 release date. - Align wing normalization in
palace_graphwith the sharednormalize_wing_name()rule (and treat empty/whitespace-only inputs as unset). - Add/adjust regression tests around
Nonedocuments in CLI search output andtool_check_duplicatebehavior when vector search is disabled.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
tests/test_searcher.py |
Adds regression coverage for CLI search rendering when Chroma returns None documents. |
tests/test_palace_graph_tunnels.py |
Adds a focused test for the updated wing normalization behavior in palace_graph. |
tests/test_mcp_server.py |
Adds a regression test ensuring tool_check_duplicate short-circuits when vector search is disabled. |
mempalace/palace_graph.py |
Switches _normalize_wing to use shared normalize_wing_name() and handle blank inputs. |
mempalace/mcp_server.py |
Updates typing for _vector_capacity_status and reorders tool_check_duplicate to probe vector-disabled status before touching Chroma. |
mempalace/entity_detector.py |
Updates documented detect_entities() output shape to include topics. |
CHANGELOG.md |
Corrects KG temporal validation entry and fixes the v3.3.4 date. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
There was a problem hiding this comment.
Code Review
This pull request enhances the MCP knowledge-graph tools by implementing more robust temporal validation via sanitize_iso_temporal(), which now supports full ISO-8601 UTC datetimes while rejecting partial or naive inputs. The entity_detector was updated to include a 'topics' category, and tool_check_duplicate in the MCP server now correctly short-circuits when vector search is disabled. Additionally, wing name normalization was standardized using a shared utility, and several tests were added to verify these changes and prevent crashes when handling null documents in search results. I have no feedback to provide.
Brings in the three commits that landed on main during the v3.3.6 release cycle but not on develop: - 62a555c fix(release): align ruff pin to 0.15.14 + hoist COCA imports out of hot paths (MemPalace#1614) - a1cf052 Merge pull request MemPalace#1614 from MemPalace/fix/release-3.3.6-ruff-pin-align - db1fbe8 Merge pull request MemPalace#1610 from MemPalace/release/3.3.6 Resolves conflicts in miner.py and palace.py where develop's MemPalace#1613 (known-systems lexicon, Tier 3) had added _apply_known_systems_prepass to module-top imports + the prepass call in build_closet_lines. Main side had only the COCA hoist from MemPalace#1614. Resolution: keep develop's side (the prepass additions). Mirrors the v3.3.5 sync-back pattern (MemPalace#1442).
Summary
Merges
mainback intodevelopafter the v3.3.5 release shipped (#1434). Mirrors the25bfd37 chore(release): sync 3.3.4 version bump back into developpattern from last cycle.What this brings to develop
From the 3.3.5 release prep:
CHANGELOG.md— corrected KG date validator entry on the v3.3.5 section (per Copilot review on chore(release): 3.3.5 #1434). The shipped entry now accurately describessanitize_iso_temporal()(acceptsYYYY-MM-DD+ canonical UTC datetimes, rejects partials/naive/non-UTC) instead of the pre-fix(kg): accept ISO datetimes for temporal inputs #1417 wording that survived into the original release-prep commit.CHANGELOG.md—[3.3.4]date corrected from2026-05-01(my mistake from UTCpublishedAt) to2026-04-30(the canonical local date the maintainer originally tagged).Catching up older 3.3.4-cycle work that was on main but never synced back:
The
25bfd37"sync 3.3.4 version bump" commit moved the version number but not the CHANGELOG/code tweaks that landed onchore/release-3.3.4-prep. Those are coming over now:CHANGELOG.md— drop duplicate max_seq_id entry from shipped 3.3.0 (446795a)CHANGELOG.md— drop chore(release): v3.3.4 #1232 self-reference from auto-ingest entry (d7ca3c5)CHANGELOG.md— extend fix(storage): stop ChromaDB from crashing when reopening an existing … #1262 entry to cover fix(mcp_server): split get_or_create_collection on reopen (follow-up to #1262) #1289 MCP server companion (58da0b1)mempalace/entity_detector.py,mempalace/mcp_server.py,mempalace/palace_graph.py(4cfbd60)tests/test_mcp_server.py,tests/test_palace_graph_tunnels.py,tests/test_searcher.pystyle: ruff format three test files(37f3731)Conflicts
None.
ortmerge strategy resolved cleanly — main has everything from develop plus these additions.Test plan
After merge
develop is fully aligned with the shipped 3.3.5 state. Next cycle's CHANGELOG entries can start under a new
## [3.3.6] — unreleasedheader at the top.For the next release, suggest the existing release-prep pattern should explicitly include a post-release sync PR in the runbook so this drift doesn't accumulate again.