Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
217 commits
Select commit Hold shift + click to select a range
6165aa2
feat(miner): add C# and .NET file extensions to READABLE_EXTENSIONS
Davez69gto Apr 16, 2026
e039a67
feat(miner): add support for Swift and Kotlin file extensions
EVSalomon May 5, 2026
66b0c50
feat: add Pi agent JSONL session normalizer
adv3nt3 Apr 7, 2026
a9a2c35
feat: add Gemini CLI / AI Studio JSON session import support
FBISiri May 9, 2026
25b918e
feat(normalize): add Continue.dev session parser
sjhddh Apr 12, 2026
234343e
fix: preserve collection name on MCP search retry
trek-e May 26, 2026
071fa01
feat: add Cursor IDE support (hooks, plugin, skill, docs, tests)
undeadindustries May 27, 2026
df5db57
fix(cursor): address gemini-code-assist review on PR #1632
undeadindustries May 27, 2026
c420a9f
fix(cursor): address igorls review on PR #1632
undeadindustries May 30, 2026
f5d2212
style(tests): apply ruff 0.4.x format to test_normalize
sjhddh Jun 3, 2026
c4da6d5
fix(searcher): scope neighbor expansion by parent_drawer_id (#1580)
mvalentsev Jun 6, 2026
b1537be
fix(mcp): drop top-level anyOf from diary_write schema
Hexecu Jun 6, 2026
29d7e1e
docs(openclaw): catch up SKILL.md with 8 newer MCP tools
raman325 Jun 7, 2026
ca38ae8
docs(openclaw): address review round 1
raman325 Jun 7, 2026
ae415b8
fix: detect Java project manifests
jsiu93 Jun 7, 2026
74453ee
fix: handle rootless Java subprojects
jsiu93 Jun 7, 2026
6c5e1be
fix(mcp): fail closed when add_drawer idempotency pre-check fails
thismilktea Jun 7, 2026
24ad98d
feat: add mempalace-recall skill and optional Cursor recall rule
undeadindustries Jun 10, 2026
d057dee
fix(repair): run post-rebuild FTS5 cleanup on legacy cmd_repair path …
mvalentsev Jun 10, 2026
374400a
test(backends): live-substrate conformance module for pgvector
jphein Jun 10, 2026
47bddb0
review(gemini): marker-race stub, created-list lock, exact-order + ex…
jphein Jun 10, 2026
f31db69
merge: resolve CHANGELOG conflict with develop
igorls Jun 11, 2026
8e19e81
merge: resolve recall-protocol conflict with develop
igorls Jun 11, 2026
07f8789
fix(embedding): chunk EmbeddinggemmaONNX batches to bound ONNX memory…
mvalentsev Jun 11, 2026
4187521
fix(embedding): lock EF cache and lazy load, guard inputs (#1770)
mvalentsev Jun 11, 2026
bf71ae7
fix(hallways): scope hallway-file path to MempalaceConfig.palace_path…
ggettert Jun 11, 2026
4fd1231
fixup(hallways): drop _HALLWAY_FILE back-compat shim, migrate existin…
ggettert Jun 11, 2026
f5ee33b
fixup(hallways): address gemini-code-assist review on PR #1780
ggettert Jun 11, 2026
5024e90
fix(ids): use length-prefixed recipe v3
fatkobra Jun 11, 2026
0fc3a23
fix(mcp): treat chunked drawers as logical drawers
fatkobra Jun 11, 2026
7e45720
Merge pull request #1632 from undeadindustries/feat/cursor-hooks-support
igorls Jun 11, 2026
761ebf7
fix(mcp): avoid mutating drawer metadata
fatkobra Jun 12, 2026
5a8f025
fix(ids): simplify v3 length-prefixed hashing
fatkobra Jun 12, 2026
13d6c3e
chore(deps): bump docker/metadata-action from 5 to 6
dependabot[bot] Jun 12, 2026
38de37a
chore(deps): bump docker/build-push-action from 6 to 7
dependabot[bot] Jun 12, 2026
2b457a2
chore(deps): bump docker/login-action from 3 to 4
dependabot[bot] Jun 12, 2026
0b00d78
fix(hooks): normalize Windows transcript paths in shell hooks
fatkobra Jun 12, 2026
f6b6a69
fix(backends): serialize first connect in sqlite_exact and pgvector (…
mvalentsev Jun 12, 2026
41e5c20
fix(hooks): preserve fail-loud parse diagnostics
fatkobra Jun 12, 2026
950713e
fix(hooks): typo regression addressed
fatkobra Jun 13, 2026
c45d069
fix(tests): run fact_checker __main__ via subprocess to clear runpy w…
trek-e Jun 13, 2026
4fbdaf2
Merge pull request #1793 from mvalentsev/fix/1774-backend-connect-races
igorls Jun 14, 2026
528d711
Merge pull request #1782 from fatkobra/fix/1763-mcp-logical-chunked-d…
igorls Jun 14, 2026
c504345
Merge pull request #1749 from mvalentsev/fix/repair-legacy-fts5-postrun
igorls Jun 14, 2026
b286701
Merge pull request #1777 from mvalentsev/fix/1770-embeddinggemma-chun…
igorls Jun 14, 2026
80c3760
Merge pull request #1790 from fatkobra/fix/1772-shell-hooks-delegate-…
igorls Jun 14, 2026
75eb86a
Merge pull request #1781 from fatkobra/fix/1776-id-recipe-v3-clean
igorls Jun 14, 2026
7e4bd81
Merge pull request #1780 from ggettert/fix/hallway-file-palace-scoped
igorls Jun 14, 2026
0a2937d
Merge pull request #1582 from mvalentsev/fix/1580-neighbor-scope-pare…
igorls Jun 14, 2026
422edc2
Merge pull request #1717 from Hexecu/fix/diary-write-schema-anyof
igorls Jun 14, 2026
97ba05c
fix(mcp): avoid Chroma open when cached DB disappears
igorls Jun 14, 2026
f89bc08
test: stabilize release validation on develop
igorls Jun 14, 2026
5d5397b
fix(palace): clean source mine locks safely
igorls Jun 14, 2026
d860a00
fix: close blob seq sqlite migration connection
igorls Jun 14, 2026
8e53959
Merge pull request #1802 from MemPalace/codex/develop-341-ci-polish
igorls Jun 14, 2026
9f16295
Merge pull request #1721 from thismilktea/fix/mcp-add-drawer-idempote…
igorls Jun 14, 2026
58c45a9
Merge pull request #1804 from MemPalace/codex/close-blob-seq-sqlite
igorls Jun 14, 2026
a40e0b7
fix: address mine lock review feedback
igorls Jun 14, 2026
0cb4508
Merge pull request #1624 from trek-e/fix/search-retry-preserve-collec…
igorls Jun 14, 2026
7f5bbd8
Merge pull request #1803 from MemPalace/codex/1800-mine-lock-cleanup
igorls Jun 14, 2026
160a852
test: stabilize closet boost fixture on Windows
igorls Jun 14, 2026
68a971b
Merge pull request #1807 from MemPalace/codex/develop-341-windows-clo…
igorls Jun 14, 2026
b5c79a1
chore(release): 3.4.1
igorls Jun 14, 2026
327da58
Merge pull request #1809 from MemPalace/chore/release-3.4.1
igorls Jun 14, 2026
868b4c9
fix(hooks): portable mtime in macOS hook throttles; doc cleanup
igorls Jun 14, 2026
3f20305
style(hooks): single-quote the static python -c mtime snippet
igorls Jun 15, 2026
db6e4f0
Merge pull request #1811 from MemPalace/fix/3.4.1-review-followups
igorls Jun 15, 2026
9f434e0
test(migrate): cover swap-failure rollback
eldar702 Jun 15, 2026
d486aef
feat(mcp): add mempalace_delete_by_source bulk-cleanup tool (#1722)
arnoldwender Jun 8, 2026
f56e306
fix(mcp): harden delete_by_source per review — strip surrogates + typ…
arnoldwender Jun 8, 2026
c2f42cd
feat(miner): add PHP ecosystem file extensions
ManuelReschke Jun 18, 2026
ad5e7df
fix(claude-plugin): run final mine on SessionEnd
fatkobra Jun 18, 2026
d8d88f4
fix reviewer feedback: To prevent a KeyError and provide a clear, act…
fatkobra Jun 18, 2026
d704433
fix(chroma): route stale hnsw divergence to sqlite fallback
fatkobra Jun 18, 2026
ea71c52
fix reviewer feedback for chroma and tests
fatkobra Jun 18, 2026
e594bad
fix(mcp): refuse second writer for same palace
fatkobra Jun 18, 2026
f0b5cbf
fix(mcp): cache writer lock setup failures
fatkobra Jun 18, 2026
617aa0c
feat(miner): add PHP ecosystem file extensions (#1819)
igorls Jun 18, 2026
d4391ab
Merge pull request #1368 from EVSalomon/feat/add-support-swift-kotlin
igorls Jun 18, 2026
301aa33
Merge pull request #1720 from jsiu93/feat/java-project-scanner
igorls Jun 18, 2026
cbf6cbe
Merge pull request #731 from sjhddh/feat/continue-dev-parser
igorls Jun 18, 2026
22cf8af
Merge remote-tracking branch 'origin/develop' into HEAD
igorls Jun 18, 2026
78a32c6
Merge pull request #204 from FBISiri/feat/gemini-cli-import
igorls Jun 18, 2026
349485b
Merge remote-tracking branch 'origin/develop' into HEAD
igorls Jun 18, 2026
5935dac
Merge remote-tracking branch 'origin/develop' into HEAD
igorls Jun 18, 2026
f0e76c4
Merge pull request #169 from adv3nt3/feat/pi-cli-normalizer
igorls Jun 18, 2026
afa749c
Merge pull request #952 from Davez69gto/feat/csharp-extensions
igorls Jun 18, 2026
aa96bb5
feat: add opt-in local daemon for queued MemPalace writes
igorls Jun 19, 2026
63a382f
fix(mcp): gate startup on sqlite integrity failures
fatkobra Jun 19, 2026
6bccf82
chore(deps-dev): bump ruff from 0.15.15 to 0.15.18
dependabot[bot] Jun 19, 2026
4c46290
fix(mcp): applied 3 of the 4 reviewer suggestions
fatkobra Jun 19, 2026
3c7808e
fix(mcp): guard remaining None palace_path in _mcp_sqlite_integrity_r…
fatkobra Jun 19, 2026
5f58cdb
fix: unblock daemon PR CI + address review comments
igorls Jun 19, 2026
d859d5a
fix: daemon client bypasses proxy discovery; tests force-shutdown ser…
igorls Jun 19, 2026
95211e8
test: win32-only diagnostic for daemon process-exit hang
igorls Jun 19, 2026
f868ee7
fix(daemon): Windows-safe pid liveness probe; finalize cross-platform…
igorls Jun 19, 2026
fe0391a
fix(daemon): skip reverse-DNS in server_bind so startup can't block ~30s
igorls Jun 19, 2026
d09392c
feat(hooks): add a budget-safe SessionEnd save hook for clean exits (…
mvalentsev Jun 18, 2026
393107e
fix(claude-plugin): resolve SessionEnd merge semantics
fatkobra Jun 19, 2026
4e03ce9
Merge pull request #1826 from MemPalace/feat/daemon-mode
igorls Jun 19, 2026
32ec879
fix(claude-plugin):reviewer feedback for _validate_transcript_path fu…
fatkobra Jun 19, 2026
7fb981c
fix(daemon): address post-merge review feedback on #1826
igorls Jun 19, 2026
49e427b
Merge pull request #1828 from MemPalace/fix/daemon-review-followups
igorls Jun 19, 2026
94d1ced
Merge pull request #1827 from MemPalace/dependabot/pip/ruff-0.15.18
igorls Jun 19, 2026
b0eddf6
fix(backends): single-scroll bulk metadata fetch for Qdrant; bump scr…
fatkobra Jun 20, 2026
5fda4e5
fix: apply suggested reviewer suggestions
fatkobra Jun 20, 2026
03f638a
updated tests/test_qdrant_bulk_metadata_scroll.py because of CI failu…
fatkobra Jun 20, 2026
157022a
perf(embedding): cap ORT intra-op threads so a background mine doesn'…
igorls Jun 20, 2026
0601026
perf(mcp): answer overview tools from the sqlite aggregate to fix lar…
igorls Jun 20, 2026
abaf09b
fix(pgvector): strip NUL bytes so a transcript NUL no longer aborts t…
mvalentsev Jun 20, 2026
8bdebe1
fix: address PR review feedback (preserve "unknown" label; use super(…
igorls Jun 20, 2026
2eda1f9
Merge pull request #1836 from MemPalace/fix/perf-status-and-embedder-…
igorls Jun 20, 2026
477aa36
perf(mcp): sqlite fast path for graph_stats to fix large-palace timeo…
igorls Jun 20, 2026
73f455c
fix: address PR review feedback on graph_stats sqlite fast path (#1379)
igorls Jun 20, 2026
9d5a375
Merge pull request #1837 from MemPalace/fix/graph-stats-sqlite-fast-path
igorls Jun 20, 2026
38253b1
fix: percent-encode sqlite read-only URIs so spaced/special-char path…
igorls Jun 20, 2026
73772cb
Potential fix for pull request finding
igorls Jun 20, 2026
fe460c4
Merge pull request #1838 from MemPalace/fix/sqlite-ro-uri-encoding
igorls Jun 20, 2026
31fff1c
fix(mcp): route _sqlite_graph_stats through sqlite_read_uri
igorls Jun 20, 2026
fa27e41
fix(pgvector): push get(limit, offset) pagination into SQL (#1830)
mvalentsev Jun 20, 2026
4791999
Merge pull request #1831 from mvalentsev/fix/1829-pgvector-nul
igorls Jun 20, 2026
a27129a
fix(pgvector): replace lone surrogates so a transcript surrogate no l…
mvalentsev Jun 20, 2026
3eacbe0
Merge pull request #1834 from mvalentsev/fix/pgvector-surrogate
igorls Jun 20, 2026
e0da99b
Merge pull request #1839 from MemPalace/fix/graph-stats-sqlite-uri
igorls Jun 20, 2026
386f3c9
fix(backends): push sqlite_exact get(limit, offset) pagination into SQL
mvalentsev Jun 21, 2026
6cc5832
ci: re-trigger checks (unrelated Windows closet flake)
mvalentsev Jun 21, 2026
2ec48dd
refactor(qdrant): reuse _rows() in get_all_metadata(); fix sys.module…
fatkobra Jun 21, 2026
8723d30
test(mcp_server): add missing _fetch_all_metadata delegation/fallback…
fatkobra Jun 21, 2026
7fb7bd3
feat(search): add an optional source_file filter to mempalace_search …
mvalentsev Jun 17, 2026
4c4c4ab
fix(mcp): reject non-string source_file with a clean error (#1815)
mvalentsev Jun 17, 2026
c203aac
ci: re-trigger Windows (flaky closet-boost test)
mvalentsev Jun 17, 2026
44016ad
fix(repair): point index-read failures to repair --mode from-sqlite (…
mvalentsev Jun 21, 2026
fb8dc1f
fix: use CREATE_NO_WINDOW so Windows hook miner spawns don't flash a …
eldar702 Jun 21, 2026
65d0704
fix: point diverged-index recovery at from-sqlite, not re-mine (#1843)
undeadindustries Jun 22, 2026
d7e182a
docs: add Windows backup alternative to corrupt-index recovery (#1843)
undeadindustries Jun 22, 2026
4291fec
feat: add mempalace_checkpoint batch save tool
undeadindustries Jun 22, 2026
f3ed6f7
fix: harden tool_checkpoint input validation
undeadindustries Jun 22, 2026
352eb67
test: update Cursor followup assertion for checkpoint tool
undeadindustries Jun 22, 2026
5ae2315
fix(mcp): purge matching closets in delete_by_source (#1722)
igorls Jun 22, 2026
7d311af
Merge pull request #1842 from mvalentsev/fix/sqlite-exact-pagination
igorls Jun 22, 2026
b8c6bfe
Merge pull request #1840 from mvalentsev/fix/1830-pgvector-pagination
igorls Jun 22, 2026
fff8546
Merge pull request #1769 from techempower-org/test/pgvector-live-conf…
igorls Jun 22, 2026
e576c98
Merge pull request #1798 from trek-e/fix/fact-checker-runpy-warning
igorls Jun 22, 2026
92ac104
Merge pull request #1848 from eldar702/fix/1783-create-no-window
igorls Jun 22, 2026
b4a6ffd
Merge pull request #1822 from fatkobra/fix/1816-hnsw-strict-repair-kg
igorls Jun 22, 2026
91e2158
Merge pull request #1847 from mvalentsev/fix/1843-repair-from-sqlite-…
igorls Jun 22, 2026
db90cdf
Merge pull request #1849 from undeadindustries/fix/1843-recovery-guid…
igorls Jun 22, 2026
abd780e
Merge pull request #1788 from MemPalace/dependabot/github_actions/doc…
igorls Jun 22, 2026
a934493
Merge pull request #1787 from MemPalace/dependabot/github_actions/doc…
igorls Jun 22, 2026
a11cf4b
Merge pull request #1786 from MemPalace/dependabot/github_actions/doc…
igorls Jun 22, 2026
70ec8e4
Merge pull request #1832 from fatkobra/fix/1796-qdrant-bulk-metadata-…
igorls Jun 22, 2026
e38af8c
Merge pull request #1823 from fatkobra/fix/1818-mcp-peer-writer
igorls Jun 22, 2026
7392ab8
Merge pull request #1817 from mvalentsev/fix/1815-source-file-filter
igorls Jun 22, 2026
971e5a7
Merge pull request #1851 from undeadindustries/feat/cursor-checkpoint…
igorls Jun 22, 2026
a91f7e0
Merge pull request #1820 from fatkobra/fix/1814-session-end-hook
igorls Jun 22, 2026
9902e3a
Merge pull request #1729 from arnoldwender/feat/mcp-delete-by-source
igorls Jun 22, 2026
2f92774
feat(mcp): add opt-in HTTP transport
fatkobra Jun 14, 2026
94519b9
fix suggestion of reviewer to avoid a critical race condition and oth…
fatkobra Jun 14, 2026
2e8ff64
test(mcp): keep HTTP transport tests Python 3.9 compatible
fatkobra Jun 14, 2026
54e9f46
test(mcp): avoid subprocess flakiness in HTTP transport tests
fatkobra Jun 14, 2026
960eaac
test(mcp): bypass proxies in HTTP transport loopback tests
fatkobra Jun 14, 2026
1a47b78
test(mcp): make HTTP transport loopback tests proxy-free
fatkobra Jun 14, 2026
3fbab55
test(mcp): make HTTP transport tests network-free
fatkobra Jun 14, 2026
569beff
fix(mcp): move _HTTP_REQUEST_LOCK and _HTTP_MAX_REQUEST_BYTES
fatkobra Jun 14, 2026
3e3fcf2
fix(mcp): move _HTTP_REQUEST_LOCK
fatkobra Jun 15, 2026
ce00cf0
fix reviewer: handling JSON-RPC
fatkobra Jun 15, 2026
eff887d
fix(tests): rewrite test_mcp_http_transport for Python 3.9-3.13 + Win…
fatkobra Jun 15, 2026
32fad48
fix(lint): resolve 7 ruff errors in test_mcp_http_transport
fatkobra Jun 15, 2026
1095d68
fix(mcp): harden HTTP transport — DNS-rebinding guard, optional token…
igorls Jun 22, 2026
58ea91b
Merge pull request #1806 from fatkobra/fix/1801-http-transport-stdio
igorls Jun 22, 2026
37194cf
ci(test-windows): retry the transient ChromaDB HNSW compaction flake
igorls Jun 22, 2026
270f1ae
Merge pull request #1854 from MemPalace/ci/windows-chromadb-flake-ret…
igorls Jun 22, 2026
e8f96dd
chore(release): 3.5.0
igorls Jun 22, 2026
65fa151
Merge pull request #1853 from MemPalace/chore/release-3.5.0
igorls Jun 22, 2026
2366582
fix: tighten local guards and file handling
igorls Jun 24, 2026
e9746df
fix: restore convo miner scan indentation
igorls Jun 24, 2026
d59ca24
fix: green up CI for hardened file handling
igorls Jun 24, 2026
6ea60c6
Merge pull request #1864 from MemPalace/codex/security-bundle-guards
igorls Jun 24, 2026
c80f653
test(wal): cover crash-safety, idempotent setup, and redaction edge p…
arnoldwender Jun 24, 2026
d479d6f
Merge pull request #1869 from arnoldwender/test/wal-error-paths
igorls Jun 26, 2026
d20ac0a
fix: spawn daemon with CREATE_NO_WINDOW to match hook miner (#1783) (…
eldar702 Jun 26, 2026
8654634
fix(cli): add repair rebuild-index alias (#1670)
jsiu93 Jun 26, 2026
aac947a
Fix/wing slug special chars (#1852)
tp9imka Jun 26, 2026
5294d31
fix(hooks): hide conhost window on Windows in _mine_sync non-daemon p…
davidfi01 Jun 26, 2026
0f3f8ec
fix: expand tilde in palace_path when read from config file\n\nMempal…
joesebastian6079 Jun 26, 2026
dc43382
fix(chroma): stop quarantining valid all-layer-0 HNSW segments (#1716)
igorls Jun 26, 2026
73e74bf
Merge pull request #1872 from MemPalace/fix/1716-all-layer-0-quarantine
igorls Jun 26, 2026
b0a94bd
fix(repair): auto-heal isolated FTS5 inverted-index corruption (#1596)
igorls Jun 26, 2026
292cf87
Merge pull request #1878 from MemPalace/fix/1596-fts5-autoheal
igorls Jun 28, 2026
c17d1aa
fix(mcp): stop clobbering host app root logger at import (#1860) (#1885)
mvalentsev Jun 28, 2026
1bc5c50
chore(deps): bump actions/checkout from 6 to 7 (#1882)
dependabot[bot] Jun 28, 2026
b864766
chore(deps): bump docker/setup-qemu-action from 3 to 4 (#1880)
dependabot[bot] Jun 28, 2026
d6cb868
chore(deps): bump docker/setup-buildx-action from 3 to 4 (#1881)
dependabot[bot] Jun 28, 2026
d8b63a9
chore(deps-dev): bump ruff from 0.15.18 to 0.15.20 (#1883)
dependabot[bot] Jun 28, 2026
cd7a865
fix(backends): require SQLite magic header for chroma + sqlite_exact …
messelink Jun 28, 2026
fd3b4e8
fix(pgvector): skip document column for metadata-only fetches (#1840 …
messelink Jun 28, 2026
cff43ad
feat(convo): preserve authored timestamp from transcripts (#1890)
JosefAschauer Jun 28, 2026
faa8643
fix(palace): process-wide mine_palace_lock re-entrancy so the HTTP tr…
trongnguyenbinh Jun 28, 2026
833b6ab
feat(mcp): add since/before date filter to list_drawers (#1128) (#1891)
mvalentsev Jun 28, 2026
178105c
feat: optimize metadata counting using Qdrant server-side facets (#1868)
Prayaksh Jun 28, 2026
5dcc46b
feat(graph): auto-populate the associative graph from mined sessions …
JosefAschauer Jun 28, 2026
8ec284d
docs(guide): add Remote / Team Server deployment guide (#1877) (#1897)
igorls Jun 28, 2026
afd0428
feat(serve): turnkey secure remote MCP server (#1877) (#1900)
igorls Jun 29, 2026
6cec591
feat: add LaTeX (.tex, .bib) to readable and prose extensions
messelink Jun 29, 2026
1577346
docs(config): add storage backends configuration reference
igorls Jun 30, 2026
e4924e8
docs(config): clarify backend selection vs configuration in table
igorls Jun 30, 2026
3b8d265
Merge pull request #1904 from MemPalace/docs/storage-backend-config
igorls Jun 30, 2026
176c8b8
fix(docs): stop wide tables from clipping; slim backend table
igorls Jun 30, 2026
281aaf4
fix(docs): make backend comparison table fit the content column
igorls Jun 30, 2026
0549a90
Merge pull request #1905 from MemPalace/docs/fix-backend-table-layout
igorls Jun 30, 2026
e84221c
Merge pull request #1901 from messelink/feat/latex-extensions
igorls Jun 30, 2026
e096701
docs(openclaw): document full MCP tool surface
igorls Jun 30, 2026
da5a48c
Merge pull request #1719 from raman325/feat/openclaw-tool-catchup
igorls Jun 30, 2026
8cff69c
chore: sync upstream/develop through da5a48c (post-v3.5.0, 213 commits)
jphein Jul 2, 2026
c2ff187
chore(sync): post-merge follow-ups — detect() port, fixtures, lint, docs
jphein Jul 2, 2026
eb959bd
chore(sync): re-render python-api after detect() port; fix CHANGELOG …
jphein Jul 2, 2026
9aed716
chore(sync): fix CHANGELOG footer refs (orphaned 3.4.0 def, missing 3…
jphein Jul 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .claude-plugin/hooks/hooks.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,17 @@
]
}
],
"SessionEnd": [
{
"hooks": [
{
"type": "command",
"command": "bash \"${CLAUDE_PLUGIN_ROOT}/hooks/mempal-session-end-hook.sh\"",
"timeout": 10
}
]
}
],
"PreCompact": [
{
"hooks": [
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
matrix:
python-version: ["3.10", "3.11", "3.13"]
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
Expand All @@ -45,7 +45,7 @@ jobs:
if: github.event_name == 'workflow_dispatch'
runs-on: windows-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: "3.13"
Expand All @@ -63,7 +63,7 @@ jobs:
if: github.event_name == 'workflow_dispatch'
runs-on: macos-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: "3.13"
Expand All @@ -73,7 +73,7 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
- uses: actions/setup-python@v6
with:
python-version: "3.11"
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
fetch-depth: 0

Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,14 @@ jobs:
contents: read
packages: write
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

# Needed for the emulated linux/arm64 build on real pushes.
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
uses: docker/setup-qemu-action@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

# Only authenticate + push for in-repo events. Fork PRs lack the
# packages:write token, so they build (to validate the Dockerfile) but
Expand Down Expand Up @@ -79,10 +79,10 @@ jobs:
build-gpu:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
uses: docker/setup-buildx-action@v4

- name: Build GPU image (validation only — not published)
uses: docker/build-push-action@v7
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ jobs:
echo "tag=$tag" >> "$GITHUB_OUTPUT"
echo "Resolved tag: $tag"

- uses: actions/checkout@v6
- uses: actions/checkout@v7
with:
# Fully-qualified refs/tags/ so an unqualified name can't resolve to a
# same-named *branch* instead of the tag (checkout prefers branches).
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/version-guard.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
check-versions:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7

- name: Extract versions from all sources
id: versions
Expand Down
62 changes: 0 additions & 62 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,68 +80,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),

---

## [Unreleased] — 2026-05-17 — *AGE-integration 6-phase plan: KnowledgeGraphAGE + write-through + palace structure + backfill + walk_palace MCP*

Multi-project AGE-integration plan landed on this fork's `feat/age-kg-parity` branch ([PR #101](https://github.com/techempower-org/mempalace/pull/101)). Companion fork-PR on palace-daemon adds the read-side fusion endpoint ([techempower-org/palace-daemon#25](https://github.com/techempower-org/palace-daemon/pull/25)). The metaphor of *the AI walking into a palace and finding wings, rooms, and drawers* now corresponds to real Cypher traversal over a unified `Wing → Room → Drawer → MENTIONS → Entity` graph.

### Added

- **`KnowledgeGraphAGE` API parity with the SQLite `KnowledgeGraph`** ([`ff7187d`](https://github.com/techempower-org/mempalace/commit/ff7187d)). Adds 6 missing methods (`add_entity`, `invalidate`, `query_entity`, `query_relationship`, `timeline`, `seed_from_entity_facts`) on top of the existing `add_triple` / `query_triples` / `stats` / `clear`. AGE 1.6.0 Cypher dialect gaps documented + worked around: no `ON CREATE SET`, no multi-column `RETURN` inside `cypher()`, no list literals, no `SET` on edge properties inline.
- **Write-through KG middleware on `PostgresCollection`** ([`3321d83`](https://github.com/techempower-org/mempalace/commit/3321d83)). New `set_kg_writethrough(hook)` API; hook fires after every successful drawer write with `(drawer_id, document, metadata)`. New module `mempalace/kg_writethrough.py` provides `make_age_writethrough(kg, extractor)` factory + env-var-driven `make_writethrough_from_env()` + a builtin regex extractor fallback. Default behavior unchanged when no hook is registered.
- **Palace structure as native AGE nodes** ([`ff583c0`](https://github.com/techempower-org/mempalace/commit/ff583c0)). New module `mempalace/palace_graph_age.py` mirrors the SQL-aggregation pattern from `mempalace.palace_graph` into AGE: `populate_from_postgres(kg, dsn, table_name)` builds `Wing -[CONTAINS]-> Room -[CONTAINS]-> Drawer` + `Wing -[SHARED_VIA {via_room}]- Wing` tunnels. Idempotent via MERGE.
- **`backfill_age` — restartable AGE population from drawer table** ([`b3f0206`](https://github.com/techempower-org/mempalace/commit/b3f0206)). New module + CLI `mempalace-backfill-age` for one-shot postgres-drawers → postgres-AGE migration. Checkpoint table `mempalace_kg_backfill_state` makes re-runs safe. Smoke-tested on 5344-drawer test palace (58948 entities in 26 min); ~22h projected for production 274K palace.
- **`add_mention(drawer_id, entity_name)` on `KnowledgeGraphAGE`** (same `b3f0206`). Connects palace-structure to entity layer via `(Drawer)-[:MENTIONS]->(Entity)` edges. CREATE-ALWAYS semantics matches SQLite KG triples-table behavior; idempotency tracked externally via backfill checkpoint table.
- **`mempalace_walk_palace` MCP tool** ([`8022ecb`](https://github.com/techempower-org/mempalace/commit/8022ecb)). Agent-facing walk primitive: `start_wing="..."` walks down, `start_room="..."` enumerates across wings, `start_entity="..."` is inverse walk. Requires `MEMPALACE_BACKEND=postgres` + AGE populated.
- **`.gemini/config.yaml`** ([`c35c74e`](https://github.com/techempower-org/mempalace/commit/c35c74e)). Gemini Code Assist tuning — MEDIUM severity threshold, ignore patterns for benchmark JSONs and generated `FORK_CHANGELOG.md`.

### Spike result that motivated the plan

[AGE write-through bench on n=200 git-derived probes](https://github.com/techempower-org/multipass-structural-memory-eval/blob/feat/rlm-adapter/docs/benchmarks/2026-05-17-age-write-through-spike.md):

| Mode | R@5 | Δ vs vector |
|---|---:|---:|
| vector_only (pgvector + MiniLM base) | 0.1850 | — |
| graph_only (AGE entity-overlap) | 0.2350 | **+5.0pp** |
| fusion (RRF combine) | 0.2750 | **+9.0pp** |

### Cross-fork verification

Independent same-day audit by [@nakata-app](https://github.com/nakata-app) on his AdaptMem fork found the same operational conclusion via a different angle (code-level audit found `KnowledgeGraphAGE` skeleton-only; state-level audit on the production palace-daemon found 2 placeholder vertices + 1 placeholder edge total). Cross-fork verification framing discussed at [MemPalace/mempalace/discussions/1384#discussioncomment-16951344](https://github.com/MemPalace/mempalace/discussions/1384#discussioncomment-16951344).

### Fixed

- **upstream/develop sync** ([`6058489`](https://github.com/techempower-org/mempalace/commit/6058489)). Merged 60 develop commits into fork main (last sync 2026-05-13 via PR #1487). 12 conflict files resolved across `cli.py`, `convo_miner.py`, `hooks_cli.py`, `mcp_server.py`, `miner.py`, `palace.py`, `palace_graph.py`, `searcher.py`, and three test files. Notable upstream changes brought in: Igor's #1519 `convo_miner` `min_chunk_size` validation, KG cache path canonicalization via `_canonicalize_kg_path` + `realpath` + `normcase` (4 commits), cold-start embedder diagnostics + opt-in warmup (#1495), tunnel hyphenated wing slug preservation (#1504), stratified palace state messages (#1498), bash 3.2 compat for hooks (#1440), entity-registry tmp cleanup on failure (#1408), and none-metadata MCP handler fix (#1445). Follow-up commit [`342a59f`](https://github.com/techempower-org/mempalace/commit/342a59f) drops shadow `chunk_*` properties on `MempalaceConfig`, scales hook timeout bounds in `tests/test_claude_plugin_hook_config.py` to milliseconds, and updates fork-side test assertions to match upstream's new `wing_<project>` API shape (#1410).

---

## [Unreleased] — 2026-05-14 / 2026-05-15 — *postgres cutover, hybrid retrieval, encoder-axis evidence*

Fork-side work that landed after the v3.3.5 release. Nothing upstreamed yet; some of it is operator-flavored and lives only on the fork.

### Added

- **Postgres + pgvector + Apache AGE backend is now the production default** on this fork. Cutover from chromadb-on-disk happened over 2026-05-13 / 14; `main` now serves live traffic against a 273K-drawer palace on `disks:5433` (PG16 + pgvector 0.8.2 + AGE 1.6.0). Composes upstream [#665](https://github.com/MemPalace/mempalace/pull/665) (skuznetsov's `PostgresBackend` on the RFC 001 contract) plus the pgvector lazy-index race fix below. The chromadb backend still works behind `MEMPALACE_BACKEND=chroma`. Operator narrative: [`docs/operators/pgvector-cutover-runbook.md`](docs/operators/pgvector-cutover-runbook.md).
- **Hybrid retrieval** as `candidate_strategy="hybrid"` — vector candidates ∪ BM25 candidates (postgres `tsvector` + `pg_trgm` GIN for ILIKE identifier fallback) ∪ AGE graph-expanded candidates, hybrid-reranked. Exposed via [palace-daemon](https://github.com/techempower-org/palace-daemon)'s new `/search/keyword` and `/search/hybrid` HTTP endpoints. Search@5000 p50 125ms; recall@5 0.60 synthetic; filtered recall=1.00 on wing-scoped queries.
- **`symbol_header_prefix` keyword-only kwarg on `mempalace.miner.chunk_text`** for representation-axis experiments (AST-lite, encoder-domain adaptation with explicit symbol disambiguation). Backward-compatible — default `None` preserves existing behavior. Companion to discussion [#1384](https://github.com/MemPalace/mempalace/discussions/1384).
- **`scripts/derive_probes_from_git.py`** — deterministically derives n=200 retrieval probes from this repo's git log, filtering noise-prefix commits and picking a primary changed file per commit. Replaces the hand-curated n=20 set in [`scripts/chunk_strategy_ablation.py`](scripts/chunk_strategy_ablation.py) whose paired-bootstrap 95% CIs all overlapped zero. JSON snapshot at [`scripts/probes_v2_git_derived.json`](scripts/probes_v2_git_derived.json). `--probes <json>` flag added to the ablation harness so the larger set is wired in.
- **`scripts/verify_rrf_ftcode5k.py` + `scripts/verify_rrf_3way.py`** — local RRF reproduction against [adaptmem](https://github.com/nakata-app/adaptmem) FT-Code SentenceTransformer checkpoints (300 / 1000 / 5000). 3-way RRF on the n=200 probe set: default ONNX 0.4260 / FT-Code-1000 0.4229 / FT-Code-5000 0.3972 / **3-way fused 0.5101** (+0.0841 MRR vs best solo). Reproduces nakata-app's #1384 §4 inversion at 10× sample size — the encoder with worst solo MRR contributes the largest 2-way fusion lift.
- **`docs/benchmarks/2026-05-15-remaining-benches.json`** — captures 5 of 9 mempalace `tests/benchmarks/` suites that hadn't been re-run after the postgres cutover (`test_ingest_bench`, `test_knowledge_graph_bench`, `test_layers_bench`, `test_mcp_bench`, `test_memory_profile`). 64/64 passed in 1h 24m at `--bench-scale=small` against the production postgres palace. Companion to [`docs/benchmarks/2026-05-14-search-bench-hybrid-cutover.json`](docs/benchmarks/2026-05-14-search-bench-hybrid-cutover.json).

### Fixed

- **pgvector lazy-index race wedges the database** under concurrent writes. `PostgresBackend._maybe_create_vector_index` had a SELECT-then-`CREATE INDEX` race with a name-coupled existence check — three concurrent writers crossing the threshold held `ACCESS EXCLUSIVE` for 30+ minutes. Fixed at commit `4566f8a` with `pg_advisory_xact_lock(hashtext('vec_idx:<table>'))` + `CREATE INDEX IF NOT EXISTS`. Operator follow-up at upstream [#665](https://github.com/MemPalace/mempalace/pull/665) plus recovery procedure documented in the runbook.
- **`docs/embedding.py`** doc comment warning custom-EF authors about the chromadb 1.5+ `EmbeddingFunction.embed_query` requirement. A bare class with `__call__` + `name()` passes `Collection.upsert` but raises `AttributeError` on `Collection.query(query_texts=...)` — mempalace's searcher catches that and silently falls back to BM25, making encoder swaps invisible. Subclassing `chromadb.api.types.EmbeddingFunction` inherits a default `embed_query` that delegates to `__call__`. We hit this debugging the RRF verifier; the comment is for downstream users implementing alternative encoders.

### Cherry-picks from upstream PRs (in-flight, used early)

- **[#1490](https://github.com/MemPalace/mempalace/pull/1490)** (open, @nakata-app) — `fix(benchmarks): honor --granularity across hybrid_v2/v3/v4; reject in palace/diary`. Three commits (`7ba6522`, `a8303ec`, `7766343`) cherry-picked. `build_palace_and_retrieve_hybrid_v{2,3,4}` accepted a `granularity` parameter but never branched on it, so `--granularity turn` and `--granularity session` produced bitwise-identical metrics. Per our fork-first convention; will deduplicate at upstream-merge time.

### Documentation

- Discussion [#1384](https://github.com/MemPalace/mempalace/discussions/1384) — chunking-strategy ablation × encoder thread with @nakata-app. Posted operator reproduction of their #1384 §4 RRF result on our n=200 probe set + flagged the EF.embed_query protocol gotcha.
- PR [#665](https://github.com/MemPalace/mempalace/pull/665) — third operator follow-up with cutover state, bench results, and the EF protocol note for anyone implementing alternative `BaseBackend` encoders.
## [Unreleased] — 2026-05-22 — *Upstream tunnels fixes (cherry-picked from MemPalace/develop)*

## [3.3.6] — 2026-05-24

### Features
Expand Down
32 changes: 32 additions & 0 deletions FORK_CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,38 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
---


## [2026-07-02]


### Changed


- **Sync upstream/develop through da5a48c (post-v3.5.0): remote MCP server w/ TLS + read-only, graph auto-population, Qdrant facets, list_drawers date filters, 213 commits** ([`TBD`](https://github.com/techempower-org/mempalace/commit/TBD))
Merged 213 upstream commits (post-v3.5.0 ``da5a48c``). Notable
upstream additions: the turnkey secure remote MCP server with TLS and
a read-only server mode (#1877 / #1900), associative-graph
auto-population from mined sessions + ``cmd_hallways`` (#1895),
Qdrant server-side metadata facets (#1868), ``since``/``before``
date filters on ``list_drawers`` (#1128 / #1891), authored-timestamp
preservation from transcripts (#1890), ``mine_palace_lock``
re-entrancy for the HTTP transport (#1859), a pgvector metadata-only
fetch fix (#1892), SQLite magic-header ``detect()`` (#1893 / #1896),
FTS5 auto-heal (#1878), a host-root-logger fix (#1860 / #1885),
LaTeX extensions, and dependency bumps (ruff 0.15.20).

~50 conflicted files resolved by composing rather than choosing
sides: ``tool_list_drawers`` carries BOTH the upstream date filters
and the fork tag filters; ``tool_status`` keeps the fork's postgres
fast path (#267) and gains the upstream facets sweep; the HTTP
transport keeps host pinning and gains TLS + read-only; the merged
plugin hook config stays the fork's five-event ms-timeout shape. The
merged MCP tool surface stays at 39 tools (upstream's 34 plus fork
tools); all doc and manifest tool-count claims reconciled against the
live ``mcp_server.TOOLS`` count.

*Files:* `mempalace/mcp_server.py`, `mempalace/searcher.py`, `mempalace/cli.py`, `mempalace/convo_miner.py`, `mempalace/embedding.py`, `mempalace/backends/base.py`, `mempalace/backends/pgvector.py`, `tests/conftest.py`, `tests/test_mcp_server.py`, `tests/test_backends.py`


## [2026-07-01]


Expand Down
Loading
Loading