mempalace-code 1.14.2__tar.gz → 1.16.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/.gitignore +11 -1
  2. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/.pre-commit-config.yaml +1 -1
  3. mempalace_code-1.16.0/AGENTS.md +304 -0
  4. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/CHANGELOG.md +207 -9
  5. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/CONTRIBUTING.md +42 -13
  6. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/LICENSE +1 -1
  7. mempalace_code-1.16.0/NOTICE +46 -0
  8. mempalace_code-1.16.0/PKG-INFO +1723 -0
  9. mempalace_code-1.16.0/README.md +1663 -0
  10. mempalace_code-1.16.0/SECURITY.md +35 -0
  11. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/BENCHMARKS.md +18 -14
  12. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/HYBRID_MODE.md +20 -6
  13. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/README.md +28 -13
  14. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/code_retrieval_bench.py +1 -1
  15. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/convomem_bench.py +0 -4
  16. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/demo_perf_budgets.py +34 -9
  17. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/dotnet_bench.py +1 -1
  18. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/embed_ab_bench.py +101 -176
  19. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/locomo_bench.py +10 -2
  20. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/longmemeval_bench.py +5 -65
  21. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/token_delta_bench.py +2 -1
  22. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/AGENT_INSTALL.md +126 -44
  23. mempalace_code-1.16.0/docs/BACKUP_RESTORE.md +1186 -0
  24. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/BENCH_TOKEN_DELTA.md +19 -13
  25. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/COMPARISON_GRAPHIFY.md +4 -3
  26. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/DEPENDENCY_UPGRADE_GATE.md +40 -12
  27. mempalace_code-1.16.0/docs/HOW_SEARCH_WORKS.md +232 -0
  28. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/LLM_USAGE_RULES.md +74 -20
  29. mempalace_code-1.16.0/docs/OFFLINE_USAGE.md +347 -0
  30. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/RELEASING.md +303 -42
  31. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/UPDATES.md +40 -10
  32. mempalace_code-1.16.0/docs/UPSTREAM_COMPARISON.md +329 -0
  33. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/UPSTREAM_HARDENING.md +3 -3
  34. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/WHY_THIS_FORK.md +25 -18
  35. mempalace_code-1.16.0/docs/demo/code-intelligence-packet.json +267 -0
  36. mempalace_code-1.16.0/docs/demo/code-intelligence-packet.md +845 -0
  37. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/operations/wing-migration.md +73 -12
  38. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/quality/PALACE-SCOPE-RESOURCE-BOUNDARY.md +14 -4
  39. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/quality/README.md +14 -7
  40. mempalace_code-1.16.0/docs/quality/acceptance/README.md +133 -0
  41. mempalace_code-1.16.0/docs/quality/acceptance/v1.15.0.md +312 -0
  42. mempalace_code-1.16.0/docs/quality/acceptance/v1.15.1.md +101 -0
  43. mempalace_code-1.16.0/docs/quality/acceptance/v1.16.0.md +115 -0
  44. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/quality/autopilot-demo-gate-ledger.json +8 -8
  45. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/quality/autopilot-demo-gate-ledger.md +6 -6
  46. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/quality/scorecard.json +26 -26
  47. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/quality/scorecard.md +19 -19
  48. mempalace_code-1.16.0/docs/quality/upstream-comparison.json +674 -0
  49. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/quality/workflow-review-protocol.md +4 -11
  50. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/release-admission-rulesets.md +7 -4
  51. mempalace_code-1.16.0/examples/HOOKS_TUTORIAL.md +23 -0
  52. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/examples/gemini_cli_setup.md +20 -10
  53. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/examples/mcp_setup.md +14 -4
  54. mempalace_code-1.16.0/hooks/README.md +197 -0
  55. mempalace_code-1.16.0/hooks/mempal_precompact_hook.sh +93 -0
  56. mempalace_code-1.16.0/hooks/mempal_save_hook.sh +203 -0
  57. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/README.md +28 -10
  58. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/__init__.py +8 -0
  59. mempalace_code-1.16.0/mempalace_code/__main__.py +6 -0
  60. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/agent_plugin/plugin.json +1 -1
  61. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/agent_plugin/skills/mempalace/SKILL.md +5 -1
  62. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/architecture.py +68 -41
  63. mempalace_code-1.16.0/mempalace_code/backup.py +1459 -0
  64. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/cli.py +269 -51
  65. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/cli_commands/alias.py +75 -5
  66. mempalace_code-1.16.0/mempalace_code/cli_commands/backup_restore.py +430 -0
  67. mempalace_code-1.16.0/mempalace_code/cli_commands/common.py +157 -0
  68. mempalace_code-1.16.0/mempalace_code/cli_commands/diary.py +141 -0
  69. mempalace_code-1.16.0/mempalace_code/cli_commands/export_import.py +437 -0
  70. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/cli_commands/ingest.py +225 -43
  71. mempalace_code-1.16.0/mempalace_code/cli_commands/maintenance.py +735 -0
  72. mempalace_code-1.16.0/mempalace_code/cli_commands/model.py +368 -0
  73. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/cli_commands/preflight.py +19 -6
  74. mempalace_code-1.16.0/mempalace_code/cli_commands/query.py +639 -0
  75. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/cli_commands/update.py +52 -12
  76. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/cli_commands/version_check.py +15 -2
  77. mempalace_code-1.16.0/mempalace_code/cli_commands/watch.py +498 -0
  78. mempalace_code-1.16.0/mempalace_code/cli_invocation.py +99 -0
  79. mempalace_code-1.16.0/mempalace_code/config.py +746 -0
  80. mempalace_code-1.16.0/mempalace_code/convo_miner.py +902 -0
  81. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/dialect.py +95 -25
  82. mempalace_code-1.16.0/mempalace_code/diary.py +172 -0
  83. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/disk_budget.py +26 -8
  84. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/entity_detector.py +44 -24
  85. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/entity_registry.py +3 -1
  86. mempalace_code-1.16.0/mempalace_code/errors.py +22 -0
  87. mempalace_code-1.16.0/mempalace_code/export.py +728 -0
  88. mempalace_code-1.16.0/mempalace_code/knowledge_graph.py +1737 -0
  89. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/language_catalog.py +41 -0
  90. mempalace_code-1.16.0/mempalace_code/launchd.py +55 -0
  91. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/layers.py +156 -84
  92. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/dispatch.py +285 -36
  93. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/protocol_compat.py +16 -4
  94. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/protocol_text.py +5 -3
  95. mempalace_code-1.16.0/mempalace_code/mcp/runtime.py +329 -0
  96. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/tools/architecture.py +178 -26
  97. mempalace_code-1.16.0/mempalace_code/mcp/tools/diary.py +112 -0
  98. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/tools/graph.py +25 -5
  99. mempalace_code-1.16.0/mempalace_code/mcp/tools/kg.py +291 -0
  100. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/tools/search.py +174 -49
  101. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/tools/write.py +167 -13
  102. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp_server.py +1 -1
  103. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp_tool_profiles.py +1 -0
  104. mempalace_code-1.16.0/mempalace_code/mining/chunkers.py +1626 -0
  105. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mining/kg_extract.py +39 -4
  106. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mining/languages.py +2 -12
  107. mempalace_code-1.16.0/mempalace_code/mining/orchestrator.py +1480 -0
  108. mempalace_code-1.16.0/mempalace_code/mining/projects.py +667 -0
  109. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mining/scanner.py +119 -10
  110. mempalace_code-1.16.0/mempalace_code/mining/source_text.py +204 -0
  111. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mining/symbols.py +95 -9
  112. mempalace_code-1.16.0/mempalace_code/mirror_preflight.py +797 -0
  113. mempalace_code-1.16.0/mempalace_code/normalize.py +890 -0
  114. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/onboarding.py +22 -11
  115. mempalace_code-1.16.0/mempalace_code/operation_lock.py +529 -0
  116. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/palace_graph.py +71 -14
  117. mempalace_code-1.16.0/mempalace_code/reader.py +545 -0
  118. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/room_detector_local.py +280 -77
  119. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/search_reranker.py +7 -4
  120. mempalace_code-1.16.0/mempalace_code/searcher.py +586 -0
  121. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/source_io.py +25 -3
  122. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/spellcheck.py +9 -5
  123. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/split_mega_files.py +159 -28
  124. mempalace_code-1.16.0/mempalace_code/storage.py +3818 -0
  125. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/taxonomy_filters.py +71 -1
  126. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/updater.py +186 -33
  127. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/version_check.py +38 -17
  128. mempalace_code-1.16.0/mempalace_code/watcher.py +2492 -0
  129. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/wing_migration.py +494 -104
  130. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/pyproject.toml +10 -6
  131. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/bootstrap.sh +44 -15
  132. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/dependency_upgrade_gate.py +199 -96
  133. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/docs_drift_guard.py +58 -4
  134. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/gate_inventory.py +23 -4
  135. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/gen_code_intelligence_packet.py +40 -7
  136. mempalace_code-1.16.0/scripts/nuke_wing.py +51 -0
  137. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/release_admission_checks.py +19 -4
  138. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/release_artifact_gate.py +4 -3
  139. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/release_install_metadata_smoke.py +141 -22
  140. mempalace_code-1.16.0/scripts/release_notes.py +46 -0
  141. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/release_preflight.py +207 -4
  142. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/release_public_read.py +15 -3
  143. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/release_readiness_gate.py +724 -326
  144. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/upstream_comparison_guard.py +6 -0
  145. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/conftest.py +79 -1
  146. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_agent_skill_authority_contract.py +309 -16
  147. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_autopilot_demo_gate_ledger.py +30 -0
  148. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_backup.py +320 -50
  149. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_backup_cli.py +66 -45
  150. mempalace_code-1.16.0/tests/test_backup_dir.py +254 -0
  151. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_chunking.py +64 -54
  152. mempalace_code-1.16.0/tests/test_claude_hooks.py +287 -0
  153. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_cli.py +311 -385
  154. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_cli_command_modules.py +51 -18
  155. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_cli_golden_scenarios.py +14 -3
  156. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_code_intelligence_packet.py +49 -1
  157. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_code_retrieval_bench.py +3 -3
  158. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_config.py +61 -4
  159. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_convo_miner.py +57 -41
  160. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_demo_perf_budgets.py +85 -0
  161. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_dependency_upgrade_gate.py +296 -1
  162. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_dialect.py +80 -0
  163. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_docs_drift_guard.py +284 -14
  164. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_e2e.py +19 -7
  165. mempalace_code-1.16.0/tests/test_embed_ab_bench.py +230 -0
  166. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_embedding_runtime.py +123 -17
  167. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_entity_detector.py +51 -0
  168. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_export.py +104 -1
  169. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_gate_inventory.py +26 -2
  170. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_installed_artifact_behavior.py +82 -2
  171. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_installed_cli_palace_scope.py +37 -43
  172. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_knowledge_graph.py +69 -0
  173. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_layers.py +19 -0
  174. mempalace_code-1.16.0/tests/test_legacy_benchmark_retrieval.py +162 -0
  175. mempalace_code-1.16.0/tests/test_license_notice.py +34 -0
  176. mempalace_code-1.16.0/tests/test_longmemeval_metrics.py +139 -0
  177. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_mcp_protocol_compat.py +7 -4
  178. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_mcp_registry.py +1 -0
  179. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_mcp_server.py +280 -17
  180. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_mcp_tool_profiles.py +8 -1
  181. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_mine_source_exact.py +68 -62
  182. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_miner.py +91 -26
  183. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_miner_modules.py +4 -1
  184. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_normalize.py +26 -39
  185. mempalace_code-1.16.0/tests/test_nuke_wing.py +91 -0
  186. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_offline.py +24 -12
  187. mempalace_code-1.16.0/tests/test_operation_lock.py +182 -0
  188. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_palace_graph.py +5 -3
  189. mempalace_code-1.16.0/tests/test_palace_kg_owner.py +458 -0
  190. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_palace_scope_resource_boundary.py +41 -20
  191. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_quality_scorecard.py +8 -1
  192. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_reader.py +147 -17
  193. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_regular_source_guard.py +30 -2
  194. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_release_artifact_gate.py +20 -3
  195. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_release_install_metadata_smoke.py +298 -1
  196. mempalace_code-1.16.0/tests/test_release_notes.py +115 -0
  197. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_release_preflight.py +392 -8
  198. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_release_public_read.py +43 -0
  199. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_release_readiness_gate.py +627 -176
  200. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_release_ruleset_contract.py +81 -10
  201. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_release_status_gate.py +1 -0
  202. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_release_workflow_admission.py +27 -0
  203. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_searcher.py +161 -37
  204. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_split_mega_files.py +13 -8
  205. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_stdio.py +5 -1
  206. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_storage.py +267 -50
  207. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_symbol_extract.py +6 -5
  208. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_taxonomy_filters.py +17 -0
  209. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_treesitter.py +101 -6
  210. mempalace_code-1.16.0/tests/test_uat2_mining.py +625 -0
  211. mempalace_code-1.16.0/tests/test_uat2_watch_ops.py +665 -0
  212. mempalace_code-1.16.0/tests/test_uat_compress_layers.py +571 -0
  213. mempalace_code-1.16.0/tests/test_uat_config_init.py +977 -0
  214. mempalace_code-1.16.0/tests/test_uat_convo_core.py +818 -0
  215. mempalace_code-1.16.0/tests/test_uat_convo_formats.py +947 -0
  216. mempalace_code-1.16.0/tests/test_uat_convos.py +731 -0
  217. mempalace_code-1.16.0/tests/test_uat_ids.py +936 -0
  218. mempalace_code-1.16.0/tests/test_uat_install_r2.py +484 -0
  219. mempalace_code-1.16.0/tests/test_uat_kg.py +927 -0
  220. mempalace_code-1.16.0/tests/test_uat_kg_backup.py +850 -0
  221. mempalace_code-1.16.0/tests/test_uat_kg_mining.py +302 -0
  222. mempalace_code-1.16.0/tests/test_uat_leases.py +929 -0
  223. mempalace_code-1.16.0/tests/test_uat_mcp_protocol.py +884 -0
  224. mempalace_code-1.16.0/tests/test_uat_mcp_search.py +830 -0
  225. mempalace_code-1.16.0/tests/test_uat_mining.py +1151 -0
  226. mempalace_code-1.16.0/tests/test_uat_model_fetch.py +353 -0
  227. mempalace_code-1.16.0/tests/test_uat_model_install.py +1288 -0
  228. mempalace_code-1.16.0/tests/test_uat_ops_misc.py +409 -0
  229. mempalace_code-1.16.0/tests/test_uat_repair.py +604 -0
  230. mempalace_code-1.16.0/tests/test_uat_repair_backup.py +466 -0
  231. mempalace_code-1.16.0/tests/test_uat_repair_reads.py +176 -0
  232. mempalace_code-1.16.0/tests/test_uat_search_read.py +785 -0
  233. mempalace_code-1.16.0/tests/test_uat_watch.py +1141 -0
  234. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_updater.py +316 -2
  235. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_upstream_comparison_guard.py +25 -5
  236. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_version_check.py +8 -6
  237. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_version_consistency.py +31 -1
  238. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_watcher.py +161 -56
  239. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_watcher_resource_subprocess.py +76 -10
  240. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_wing_migration.py +508 -9
  241. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tools/gitleaks/go.mod +1 -1
  242. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/uv.lock +137 -123
  243. mempalace_code-1.14.2/AGENTS.md +0 -218
  244. mempalace_code-1.14.2/NOTICE +0 -17
  245. mempalace_code-1.14.2/PKG-INFO +0 -1284
  246. mempalace_code-1.14.2/README.md +0 -1225
  247. mempalace_code-1.14.2/docs/BACKUP_RESTORE.md +0 -708
  248. mempalace_code-1.14.2/docs/HOW_SEARCH_WORKS.md +0 -135
  249. mempalace_code-1.14.2/docs/OFFLINE_USAGE.md +0 -216
  250. mempalace_code-1.14.2/docs/UPSTREAM_COMPARISON.md +0 -256
  251. mempalace_code-1.14.2/docs/demo/code-intelligence-packet.json +0 -266
  252. mempalace_code-1.14.2/docs/demo/code-intelligence-packet.md +0 -1535
  253. mempalace_code-1.14.2/docs/quality/upstream-comparison.json +0 -415
  254. mempalace_code-1.14.2/docs/refactoring/REFAC-MINER-MODULES/progress.md +0 -21
  255. mempalace_code-1.14.2/examples/HOOKS_TUTORIAL.md +0 -32
  256. mempalace_code-1.14.2/hooks/README.md +0 -138
  257. mempalace_code-1.14.2/hooks/mempal_precompact_hook.sh +0 -76
  258. mempalace_code-1.14.2/hooks/mempal_save_hook.sh +0 -146
  259. mempalace_code-1.14.2/mempalace_code/__main__.py +0 -5
  260. mempalace_code-1.14.2/mempalace_code/backup.py +0 -989
  261. mempalace_code-1.14.2/mempalace_code/cli_commands/backup_restore.py +0 -211
  262. mempalace_code-1.14.2/mempalace_code/cli_commands/common.py +0 -18
  263. mempalace_code-1.14.2/mempalace_code/cli_commands/diary.py +0 -103
  264. mempalace_code-1.14.2/mempalace_code/cli_commands/export_import.py +0 -117
  265. mempalace_code-1.14.2/mempalace_code/cli_commands/maintenance.py +0 -325
  266. mempalace_code-1.14.2/mempalace_code/cli_commands/model.py +0 -198
  267. mempalace_code-1.14.2/mempalace_code/cli_commands/query.py +0 -353
  268. mempalace_code-1.14.2/mempalace_code/cli_commands/watch.py +0 -222
  269. mempalace_code-1.14.2/mempalace_code/config.py +0 -517
  270. mempalace_code-1.14.2/mempalace_code/convo_miner.py +0 -469
  271. mempalace_code-1.14.2/mempalace_code/export.py +0 -421
  272. mempalace_code-1.14.2/mempalace_code/knowledge_graph.py +0 -830
  273. mempalace_code-1.14.2/mempalace_code/mcp/runtime.py +0 -117
  274. mempalace_code-1.14.2/mempalace_code/mcp/tools/diary.py +0 -141
  275. mempalace_code-1.14.2/mempalace_code/mcp/tools/kg.py +0 -154
  276. mempalace_code-1.14.2/mempalace_code/mining/chunkers.py +0 -1466
  277. mempalace_code-1.14.2/mempalace_code/mining/orchestrator.py +0 -963
  278. mempalace_code-1.14.2/mempalace_code/mining/projects.py +0 -413
  279. mempalace_code-1.14.2/mempalace_code/mirror_preflight.py +0 -342
  280. mempalace_code-1.14.2/mempalace_code/normalize.py +0 -547
  281. mempalace_code-1.14.2/mempalace_code/operation_lock.py +0 -221
  282. mempalace_code-1.14.2/mempalace_code/reader.py +0 -325
  283. mempalace_code-1.14.2/mempalace_code/searcher.py +0 -496
  284. mempalace_code-1.14.2/mempalace_code/storage.py +0 -2241
  285. mempalace_code-1.14.2/mempalace_code/watcher.py +0 -1333
  286. mempalace_code-1.14.2/scripts/nuke_wing.py +0 -19
  287. mempalace_code-1.14.2/tests/test_embed_ab_bench.py +0 -46
  288. mempalace_code-1.14.2/tests/test_operation_lock.py +0 -48
  289. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/.gitleaks.toml +0 -0
  290. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/CLAUDE.md +0 -0
  291. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/assets/mempalace_banner.jpg +0 -0
  292. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/data/code_retrieval_queries.json +0 -0
  293. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/demo_perf_budgets.json +0 -0
  294. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/membench_bench.py +0 -0
  295. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/minilm_runtime_compatibility_fixture.json +0 -0
  296. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/results_embed_ab_2026-04-09.json +0 -0
  297. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/results_token_delta_mempalace.json +0 -0
  298. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/retrieval_quality_facts.json +0 -0
  299. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/benchmarks/token_delta_fixture_facts.json +0 -0
  300. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/docs/dependency-audit-allowlist.json +0 -0
  301. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/examples/basic_mining.py +0 -0
  302. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/examples/convo_import.py +0 -0
  303. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace/__init__.py +0 -0
  304. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace/mcp_server.py +0 -0
  305. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/_stdio.py +0 -0
  306. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/agent_plugin/mcp.json +0 -0
  307. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/agent_plugin/schemas/1.0.0/mcp.schema.json +0 -0
  308. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/agent_plugin/schemas/1.0.0/plugin.schema.json +0 -0
  309. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/agent_plugin/schemas/SCHEMA-NOTICE.md +0 -0
  310. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/agent_plugins.py +0 -0
  311. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/cli_commands/__init__.py +0 -0
  312. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/cli_commands/agent_plugin.py +0 -0
  313. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/cli_commands/wing_migration.py +0 -0
  314. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/general_extractor.py +0 -0
  315. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/__init__.py +0 -0
  316. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/registry.py +0 -0
  317. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/tools/__init__.py +0 -0
  318. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp/tools/read.py +0 -0
  319. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mcp_launcher.py +0 -0
  320. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/miner.py +0 -0
  321. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mining/__init__.py +0 -0
  322. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/mining/batching.py +0 -0
  323. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/py.typed +0 -0
  324. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/retrieval_rerank.py +0 -0
  325. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/treesitter.py +0 -0
  326. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/mempalace_code/version.py +0 -0
  327. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/pyrightconfig.strict.json +0 -0
  328. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/architecture_guard.py +0 -0
  329. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/gitleaks_scan.py +0 -0
  330. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/public_safety_scan.py +0 -0
  331. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/pytest_failure_summary.py +0 -0
  332. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/quality_scorecard.py +0 -0
  333. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/release_status_gate.py +0 -0
  334. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/wing_migration.py +0 -0
  335. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/scripts/workflow_summary_guard.py +0 -0
  336. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/fixtures/unreasoned_suppression.py +0 -0
  337. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/release_smoke_support.py +0 -0
  338. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_agent_plugin_package.py +0 -0
  339. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_architecture_extraction.py +0 -0
  340. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_architecture_guard.py +0 -0
  341. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_disk_budget.py +0 -0
  342. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_dotnet_bench.py +0 -0
  343. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_dotnet_config.py +0 -0
  344. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_entity_registry.py +0 -0
  345. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_explicit_wing_consistency.py +0 -0
  346. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_general_extractor.py +0 -0
  347. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_gitleaks_scan.py +0 -0
  348. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_kg_extract.py +0 -0
  349. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_lang_detect.py +0 -0
  350. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_language_catalog.py +0 -0
  351. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_onboarding.py +0 -0
  352. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_packaging_namespace.py +0 -0
  353. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_public_safety_scan.py +0 -0
  354. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_pyright_optional_dependencies.py +0 -0
  355. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_pytest_failure_summary.py +0 -0
  356. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_quality_palace_scope_resource_boundary.py +0 -0
  357. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_release_skill_contract.py +0 -0
  358. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_retrieval_rerank.py +0 -0
  359. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_search_reranker.py +0 -0
  360. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_storage_lance.py +0 -0
  361. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_token_delta_bench.py +0 -0
  362. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_type_suppressions.py +0 -0
  363. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_watcher_resource_bounds.py +0 -0
  364. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tests/test_workflow_summary_guard.py +0 -0
  365. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tools/gitleaks/go.sum +0 -0
  366. {mempalace_code-1.14.2 → mempalace_code-1.16.0}/tools/gitleaks/tools.go +0 -0
@@ -4,6 +4,8 @@ build/
4
4
  __pycache__/
5
5
  *.pyc
6
6
  .pytest_cache/
7
+ .mypy_cache/
8
+ .ruff_cache/
7
9
  mempal.yaml
8
10
  mempalace.yaml
9
11
  entities.json
@@ -25,6 +27,14 @@ venv/
25
27
  .env
26
28
  .verify-state
27
29
 
30
+ # Local agent tooling state: absolute local paths and private notes
31
+ .codex/
32
+ .codex-local/
33
+ .playwright-mcp/
34
+
35
+ # Default `dependency_upgrade_gate.py current-audit` output (a workflow artifact)
36
+ dependency-audit-output/
37
+
28
38
  # IDE
29
39
  .idea/
30
40
  .vscode/
@@ -49,7 +59,7 @@ autopilot.toml
49
59
  benchmarks/results_token_delta_*.json
50
60
  !benchmarks/results_token_delta_mempalace.json
51
61
 
52
- # Claude Code session data (keep skills, prompts, settings.json tracked)
62
+ # Claude Code session data (keep skills and prompts tracked; a project settings.json may be tracked)
53
63
  .claude/*
54
64
  !.claude/skills/
55
65
  !.claude/prompts/
@@ -2,7 +2,7 @@ repos:
2
2
  - repo: https://github.com/astral-sh/ruff-pre-commit
3
3
  rev: v0.15.16
4
4
  hooks:
5
- - id: ruff
5
+ - id: ruff-check
6
6
  args: [--fix]
7
7
  files: ^(mempalace_code|tests|scripts)/.*\.py$
8
8
  - id: ruff-format
@@ -0,0 +1,304 @@
1
+ # mempalace — Agent Guide
2
+
3
+ ## 0. Rule Zero — smallest justified solution
4
+
5
+ Rule Zero is owned by the "Rule Zero — smallest justified solution" section of the
6
+ maintainer's user-level `~/.codex/AGENTS.md`; Claude Code reads the identical
7
+ section from `~/.claude/CLAUDE.md`. It is not restated here; every rule in this file
8
+ is a local addition to it.
9
+
10
+ **Release credential boundary.** Release preparation, qualification, admission,
11
+ and publication gates must never execute external AI clients such as `codex`,
12
+ `claude`, or `gemini`; run their authentication commands or provider/model calls;
13
+ or read, copy, inspect, require, or transmit user credentials, API keys, OAuth
14
+ tokens, keychains, or paid-account state. Verify MemPalace with its local CLI,
15
+ credential-free stdio MCP protocol checks, installed-package behavior, and
16
+ credential-free hosted workflows. An optional interoperability exercise with an
17
+ AI client requires separate explicit owner authorization, runs outside the
18
+ release gate, and cannot block a release.
19
+
20
+ **Direct functional release boundary.** Before release candidate publication,
21
+ run the exact installed wheel through its real CLI and credential-free stdio MCP
22
+ interfaces in disposable environments. Reconcile every discovered command and
23
+ subcommand, every enabled tool in every profile, and supported runtime extras
24
+ with concrete success or documented refusal evidence and relevant failure/retry
25
+ postconditions. Help, parser errors, tool listings, handler-only calls and source
26
+ pytest counts do not prove functional execution. Missing required coverage blocks
27
+ release even when CI passes. Record confirmed problems through backlog-utility
28
+ and retain a public-safe acceptance report. Follow `docs/RELEASING.md` section 1a.
29
+
30
+ **Commit attribution boundary.** Commits in this repository must not contain a
31
+ Claude `Co-Authored-By` trailer. Configure automation to omit it; do not add it
32
+ and clean it up later.
33
+
34
+ ## Audience and default scope
35
+
36
+ - The default audience is developers asking questions about repository code.
37
+ Ground answers in current source, tests, repository documentation, and Git history.
38
+ - Users preserve valuable project results in repository artifacts and commits.
39
+ Use those version-controlled artifacts as durable project context.
40
+ - Inspecting or mining stored user conversations, maintaining diaries, and adding,
41
+ enabling, or repairing conversation-save reminders or persistence guarantees
42
+ require an explicit request for that workflow. An audit finding about an optional
43
+ conversation workflow does not bring it into a code-question task.
44
+
45
+ ## Stack
46
+
47
+ - **Python** 3.11+ (supports 3.11–3.14)
48
+ - **Storage**: LanceDB (core, crash-safe vector DB — no server required)
49
+ - **Embeddings**: FastEmbed/ONNX by default; SentenceTransformer only in `[custom-models]`
50
+ - **MCP**: the official `mcp` Python SDK
51
+ - **Config**: PyYAML
52
+ - **Runtime dependencies**: declared once in `[project].dependencies` of `pyproject.toml`
53
+ - **Linting / formatting / typing**: Ruff + Pyright
54
+ - **Tests**: pytest
55
+ - **Package manager**: uv (preferred) or pip
56
+
57
+ ## Dev Setup
58
+
59
+ ```bash
60
+ # With uv (preferred)
61
+ uv pip install -e ".[dev,spellcheck,treesitter]"
62
+
63
+ # With pip
64
+ pip install -e ".[dev,spellcheck,treesitter]"
65
+ ```
66
+
67
+ These are the extras the CI type check installs; with `.[dev]` alone Pyright
68
+ reports the Tree-sitter imports as missing.
69
+
70
+ No Docker required. Everything runs locally in a venv or with pipx.
71
+
72
+ Optional extras:
73
+
74
+ - `.[custom-models]` — arbitrary SentenceTransformer models; follow `docs/OFFLINE_USAGE.md`
75
+ - `.[dev]` — test, lint, type-check, build, and release tooling
76
+ - `.[spellcheck]` — autocorrect helper API (`mempalace_code.spellcheck`); mining never applies it
77
+ - `.[treesitter]` — Tree-sitter AST parsing
78
+ - `.[watch]` — automatic mining on file changes
79
+
80
+ ## Running Tests
81
+
82
+ **Important**: Use the Python from your mempalace virtualenv (pipx venv, `.venv`, etc.), not the system Python which may lack dev deps.
83
+
84
+ ```bash
85
+ # Full suite (stop on first failure)
86
+ python -m pytest tests/ -x -q -m "not needs_network"
87
+
88
+ # Per-module
89
+ python -m pytest tests/test_storage.py -v
90
+ python -m pytest tests/test_mcp_server.py -v
91
+ python -m pytest tests/test_miner.py -v
92
+ python -m pytest tests/test_convo_miner.py -v
93
+ ```
94
+
95
+ ## Linting / Formatting
96
+
97
+ ```bash
98
+ # Check
99
+ ruff check mempalace_code/ tests/ scripts/
100
+
101
+ # Format check
102
+ ruff format --check mempalace_code/ tests/ scripts/
103
+
104
+ # Type check (gating in CI — must exit 0)
105
+ python -m pyright --pythonpath "$(python -c 'import sys; print(sys.executable)')"
106
+ python -m pyright -p pyrightconfig.strict.json
107
+
108
+ # Auto-fix lint
109
+ ruff check --fix mempalace_code/ tests/ scripts/
110
+
111
+ # Auto-fix format
112
+ ruff format mempalace_code/ tests/ scripts/
113
+ ```
114
+
115
+ Line length: 100. Target: py311. Quote style: double.
116
+
117
+ The complete gate set the **Tests** workflow runs on every pull request is listed
118
+ once, in `CONTRIBUTING.md` under "Running Tests".
119
+
120
+ ## Key Modules
121
+
122
+ The main owners under `mempalace_code/`. The full module guide is
123
+ `mempalace_code/README.md`.
124
+
125
+ | Module | Purpose |
126
+ |--------|---------|
127
+ | `storage.py` | LanceDB vector storage — add, search, delete, health_check, recover |
128
+ | `backup.py` | Tarball backup/restore — `mempalace-code backup`, scheduled backups |
129
+ | `mining/` | Project miner package — scanning, language detection, chunking, symbols, batching, orchestration; `miner.py` is a compatibility shim |
130
+ | `convo_miner.py` | Conversation miner — ingests Claude/ChatGPT/Slack exports |
131
+ | `searcher.py` | Semantic search — query palace with optional wing/room filters |
132
+ | `knowledge_graph.py` | Temporal KG — entity-relationship triples with validity windows |
133
+ | `layers.py` | Tiered context loading — L0/L1/L2/L3 wake-up layers for local models |
134
+ | `palace_graph.py` | Graph traversal and tunnel detection across wings/rooms |
135
+ | `mcp/` | MCP server package — `registry.py` (the `TOOLS` dict), `dispatch.py`, `runtime.py`, `tools/`; `mcp_server.py` is the public entrypoint shim and `mcp_launcher.py` backs `mempalace-code-mcp` |
136
+ | `watcher.py` | File watcher — `watch_and_mine`, `watch_all`, launchd/cron schedule rendering |
137
+ | `cli_commands/` | CLI command handlers; `cli.py` is the thin `mempalace-code` entry point and compatibility facade |
138
+
139
+ ## Architecture Principles
140
+
141
+ 1. **Verbatim-first** — store content exactly as provided; do not summarize or compress drawers.
142
+ 2. **Local-first** — no external APIs required; default embeddings run on-device via CPU FastEmbed/ONNX.
143
+ 3. **Zero-API-by-default** — LanceDB and FastEmbed work offline after explicit model setup.
144
+
145
+ ## Storage Backend
146
+
147
+ - **LanceDB** is the core backend (installed by default via `lancedb>=0.20`).
148
+ - **ChromaDB** support is retired from current packages because every available
149
+ release is advisory-affected. Back up a legacy source palace before upgrading,
150
+ then use the last public bridge release in isolation:
151
+ `uvx --python 3.12 --from 'mempalace-code[chroma]==1.13.4' mempalace-code migrate-storage SRC DST --verify`.
152
+
153
+ ## Embedding Model Policy
154
+
155
+ - **Current default**: `all-MiniLM-L6-v2` (384d, normalized CPU FastEmbed/ONNX).
156
+ - **Cache authority**: `$HF_HOME/mempalace-fastembed/all-MiniLM-L6-v2-v1/` plus its
157
+ immutable `.mempalace-model.json` provenance. Recovery is
158
+ `mempalace-code fetch-model` while online.
159
+ - **Custom-model boundary**: arbitrary Hugging Face names and local
160
+ SentenceTransformer paths use the explicit `[custom-models]` extra. On CPU-only Linux,
161
+ follow the ordered installation and recovery contour in `docs/OFFLINE_USAGE.md`; only
162
+ that explicit custom-model path may use `trust_remote_code=True`, and canonical MiniLM
163
+ aliases never do.
164
+ - **No code-only models**: CodeBERT, UniXcoder, etc. improve code at the expense of prose. Only general-purpose sentence-transformers that handle both are candidates.
165
+
166
+ ### Text gate
167
+
168
+ An embedding model change is gated behind A/B benchmark results
169
+ (`benchmarks/embed_ab_bench.py`) and must pass both the code gate (the A/B
170
+ code-retrieval results) and the text gate: match or beat MiniLM on LongMemEval R@5
171
+ (text retrieval). Text quality is non-negotiable — this is a code-first fork but
172
+ natural language search (conversations, commits, decisions) must not degrade. The
173
+ only LongMemEval harness, `benchmarks/longmemeval_bench.py`, is the legacy upstream
174
+ ChromaDB-based script. It imports `chromadb`, which current packages do not install
175
+ and whose available releases carry known advisories, so it runs only in an isolated,
176
+ disposable legacy environment. No text baseline has been recorded, so a model change
177
+ must first record one there. The gate cannot be skipped: without that environment and
178
+ baseline it has not run, and the model change is blocked.
179
+
180
+ ### Historical Benchmark Results — 2026-04-09 (BENCH-EMBED-AB)
181
+
182
+ Historical record, measured with the fixed 20-query set that
183
+ `benchmarks/embed_ab_bench.py` used at the time. It is not comparable with the current
184
+ `benchmarks/code_retrieval_bench.py` dataset (symbol and file-only truth,
185
+ schema-2 report), and no current baseline has been recorded.
186
+ Record a fresh dated baseline on the current dataset before the next model
187
+ decision.
188
+
189
+ Code retrieval on the mempalace repo (20 known-answer queries, 469 chunks):
190
+
191
+ | Model | R@5 | R@10 | Embed(s) | Query(ms) | Index(MB) |
192
+ |--------------------|-------|-------|----------|-----------|-----------|
193
+ | all-MiniLM-L6-v2 | 0.950 | 1.000 | 15.2 | 15.9 | 17.0 |
194
+ | all-mpnet-base-v2 | 0.900 | 1.000 | 47.5 | 30.5 | 17.7 |
195
+ | nomic-embed-text-v1.5 | 0.950 | 1.000 | 85.4 | 45.8 | 17.7 |
196
+
197
+ Per-category R@5:
198
+
199
+ | Model | architecture | class_lookup | cross_file | function_lookup |
200
+ |--------------------|:---:|:---:|:---:|:---:|
201
+ | all-MiniLM-L6-v2 | 0.800 | 1.000 | 1.000 | 1.000 |
202
+ | all-mpnet-base-v2 | 0.600 | 1.000 | 1.000 | 1.000 |
203
+ | nomic-embed-text-v1.5 | 1.000 | 1.000 | 1.000 | 0.833 |
204
+
205
+ **Recommendation: minilm remains default.**
206
+
207
+ - mpnet regresses on code R@5 (0.900 vs 0.950) while being 3× slower to embed and 2× slower at query. Eliminated.
208
+ - nomic ties minilm on code R@5 (0.950) but is 5.6× slower to embed and 2.9× slower at query, with a 550 MB model vs 80 MB. No net gain.
209
+ - [Text-gate](#text-gate) (LongMemEval) evidence was not collected — prerequisites missing (`benchmarks/data/longmemeval_s_cleaned.json` not present, `fastembed` not installed).
210
+ - Full results: `benchmarks/results_embed_ab_2026-04-09.json`.
211
+
212
+ ## Git Workflow
213
+
214
+ - **Two histories**: local `main` is the development trunk; work reaches it from
215
+ topic branches. Public `main` carries one squashed commit per release and advances
216
+ only by fast-forwarding a release candidate built and admitted per
217
+ `docs/RELEASING.md`.
218
+ - **Branch naming**: `feat/<slug>`, `fix/<slug>`, `chore/<slug>`, `docs/<slug>` for
219
+ development; `release/vX.Y.Z` (rebuilds `release/vX.Y.Z-rc2`, `-rc3`, …) for
220
+ public release candidates only.
221
+ - **Conventional commits**:
222
+ - `feat:` — new feature or capability
223
+ - `fix:` — bug fix
224
+ - `docs:` — documentation only
225
+ - `test:` — test additions or changes
226
+ - `bench:` — benchmarks
227
+ - `chore:` — maintenance, deps, tooling
228
+ - Release candidate commits use the subject `release vX.Y.Z`.
229
+ - **No force-push to `main`**.
230
+ - Pull requests on GitHub, including Dependabot updates, are never merged on
231
+ public `main`: the next release candidate would silently revert them. Port an
232
+ accepted change into the development trunk, ship it in the next release, then
233
+ close the pull request with a note naming that release.
234
+
235
+ ## Maintainer-Local Tools
236
+
237
+ The `autopilot` and `backlog-utility` tools are maintainer-local; they are not
238
+ distributed with this repository. `/task-plan` and `/task-hardening` admit
239
+ executor state only through `autopilot` and stop when it is unavailable.
240
+ Current task contracts and planning are owned by `.backlog` (backlog-files/v2).
241
+ Read `backlog_context`, `backlog_workset_context`, and `backlog_workset_queue`
242
+ through the verified project-bound MCP connection. CLI fallback uses a verified
243
+ absolute `backlog-utility` binary with `call --store .backlog --project
244
+ mempalace-code --principal <principal> --name <tool> --arguments-file <json>`.
245
+ Unavailable or mismatched access means unknown backlog state; never fall back
246
+ to active YAML or edit canonical JSON by hand. `docs/BACKLOG.yaml` retains section
247
+ metadata; `docs/BACKLOG-archived.yaml` retains historical completion evidence.
248
+ Recovery: `<absolute-backlog-utility> validate --store .backlog`.
249
+ Edits still require admitted authority and no conflicting writer.
250
+
251
+ ## Operational Lessons
252
+
253
+ - **Keep this file and public docs public-safe.** `AGENTS.md` is the canonical public instruction file; `CLAUDE.md` is only its pointer. Public docs may name package ranges, workflow categories, advisory IDs, and reproducible commands. Private remotes, hostnames, tokens, credentials, local machine paths, customer/project details, incident specifics, and non-public operational history never go here or in other public docs; put private or machine-local lessons only in an ignored local-only note outside the published tree, such as `.codex-local/LESSONS.md`.
254
+ - **Audit privacy before every public delivery.** Follow the privacy audit in
255
+ `docs/RELEASING.md` section 2. Inspect the exact tracked/staged/committed tree,
256
+ including hidden LLM instructions, prompts, settings, examples and sealed backlog
257
+ history, then both distribution archives and the history reachable from the
258
+ outgoing ref. Secret scanning alone cannot establish that operational or personal
259
+ information is public-safe. Retain redacted findings and the reviewed identities;
260
+ a confirmed private disclosure or consequential unresolved classification blocks
261
+ its public delivery. Preserve private local evidence and sealed records; never
262
+ rewrite history, scrub canonical JSON or weaken detectors to pass this gate.
263
+ - **Record reusable lessons only when they are public knowledge.** When a session exposes a project gotcha, publish step, verification boundary, or agent-behavior correction that is safe for public readers and useful to future contributors, rewrite the matching lesson here in place, or add one when none matches.
264
+ - **Verify on the surface that will run the change, and name what was not run.** Python tests alone do not prove GitHub Actions runtime changes: use local YAML/static checks such as `actionlint`, then verify the real hosted workflow run when action runtime behavior matters. Direct handler calls are useful for MCP compatibility but do not prove a separate stdio MCP client, and CLI help does not prove the command executes. A release-readiness summary must distinguish unit tests, focused integration tests, direct API smoke, real CLI execution, and hosted/daemon behavior that was not run; a tag-only or release-only workflow without a real trigger run is reported as syntax-checked and version-checked, not execution-tested. Never imply full local coverage for hosted-only behavior.
265
+ - **Check the intended public release target.** Before publishing, verify the repository, branch, tag, and workflow that public users will see. Do not assume local remote names or private mirrors represent public release truth.
266
+ - **Treat release status as multiple independent facts.** Branch Tests, tag-triggered PyPI publish, GitHub Release creation, PyPI version visibility, and any deployment/release-environment status can diverge. Check all of them before calling a release published or latest; if one is red or missing, either fix it now or record the explicit remaining blocker.
267
+ - **Test dependency drift with a fresh resolver.** Local `.venv` and `uv.lock` success can hide what GitHub Actions or users get from an unlocked `pip install`. For dependency-sensitive failures, reproduce in a clean pip environment matching the hosted workflow before declaring the tests fixed.
268
+ - **Audit dependency targets before raising bounds.** For runtime, dev, and optional extras, check current and target versions against OSV or an equivalent advisory source, then run a resolver-level audit on a fresh environment. Do not raise optional legacy backends into advisory-affected ranges; hold or cap them and backlog the upgrade gate instead.
269
+ - **Keep benchmark gates tied to measured baselines.** If a release benchmark fails, reproduce it locally against the pinned fixture, update the CI threshold only to the observed stable baseline, and backlog any desired quality increase separately.
270
+ - **Do not call tests "local feature testing."** When asked to test new features locally, run the public CLI/MCP/API behavior itself, not only pytest. For each new feature, exercise at least one success path and one important failure/guard path when safe, record the exact command or request, and name any behavior that was covered only by tests.
271
+ - **Clean up smoke-test artifacts immediately.** Real backup, cleanup, and benchmark smokes can create archives, temp palaces, and result JSON. Put them under disposable temp paths, verify success/failure, then remove artifacts or explicitly report what remains.
272
+ - **Treat palace disk growth as storage forensics first.** Compare backup size, live storage stats, row counts, and cleanup output before deleting anything. Preserve non-regenerable manual drawers and KG data, stop active writers when needed, use supported cleanup APIs, and verify health/status afterward.
273
+
274
+ ## LDR adoption and problem handoff
275
+
276
+ - LDR (`ldr/v1`) is the default format for current durable architectural decisions.
277
+ Canonical accepted records live under `docs/decisions` when present. Historical
278
+ ADRs remain evidence; do not migrate them or invent records for routine tasks.
279
+ Reuse unchanged applicable accepted decisions without a new proposal or repeated
280
+ record approval. No applicable records means an explicit empty selection with
281
+ its applicability reason in the existing task context.
282
+
283
+ - Apply this rule before architecture, durable-contract, lifecycle, ownership or
284
+ recovery changes. Start with one decision needed by the current task; keep task
285
+ state and execution evidence with their existing owners.
286
+ - Discover applicability from the task and repository-owned references. Resolve
287
+ the exact accepted key/revision; inspect status first and apply only active
288
+ records. Check current committed bytes, owner, local references and fitness.
289
+ Search results and historical prose cannot accept a decision.
290
+ - A missing or stale binding blocks only the dependent change. Propose a record
291
+ outside the canonical accepted root; only the operator accepts active records.
292
+ Same-key changes advance revision by one and preserve lifecycle/recovery.
293
+ - Use the existing adopter and pinned validator when present. Do not replace a
294
+ pin, install a utility, add a runtime gate, or migrate historical decisions as
295
+ part of this instruction. Run the current task's existing relevant checks.
296
+ - For a reproduced LDR problem, prepare and deliver the targeted handoff below
297
+ during the same work session without waiting for a separate request. Identify
298
+ whether the failure belongs to LDR or the adopter; record uncertainty. Continue
299
+ independent safe work while the affected action remains blocked.
300
+
301
+ - Private maintainer routing and the first scoped adoption candidate are in
302
+ .codex-local/LDR.md when present. Read that note before sending an LDR finding.
303
+ If no route is configured, retain the sanitized draft and report missing_route.
304
+ Keep machine paths, private transport and incident evidence out of public docs.
@@ -2,6 +2,187 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v1.16.0 — 2026-10-05
6
+
7
+ ### Added
8
+
9
+ - Configure `backup_dir` independently of the palace location, with the existing
10
+ environment override mechanism. Manual, scheduled, pre-watch and pre-optimize
11
+ backups share the selected managed directory for creation, listing and rotation.
12
+ Each palace has an isolated directory under the selected root.
13
+
14
+ ### Fixed
15
+
16
+ - Measure managed backup storage in the selected directory and check available
17
+ space on the archive destination. Invalid or inaccessible configured paths fail
18
+ without falling back. Existing archives stay in place, and explicit `--out`
19
+ keeps its rotation bypass and priority.
20
+ - Release acceptance now executes every enabled MCP tool in every profile, checks
21
+ both protocol handshakes, and discovers all delegated migration actions. Help
22
+ and parser guidance do not count as functional execution.
23
+ - Release socket fixtures use a short owned path on platforms with limited Unix
24
+ socket path lengths, with checked cleanup and explicit unsupported-platform handling.
25
+
26
+ ## v1.15.1 — 2026-10-04
27
+
28
+ Includes the v1.15.0 changes and the corrections below.
29
+
30
+ ### Security
31
+
32
+ - Refresh the transitive lock pins to PyJWT 2.15.0 and urllib3 2.8.0, closing
33
+ published authentication, TLS and denial-of-service advisories. The complete
34
+ current audit checks all 152 external locked packages without exceptions.
35
+
36
+ ### Fixed
37
+
38
+ - Govern the synthetic Kubernetes Secret fixture in immutable release-candidate
39
+ history with one exact Gitleaks fingerprint so full-history release scanning
40
+ can retain that history and continue detecting other secrets.
41
+
42
+ ## v1.15.0 — 2026-09-26
43
+
44
+ Maintenance release from a full repository and documentation audit. Search scores
45
+ now use the true cosine scale, every surface uses the selected palace's knowledge
46
+ graph, and several data-loss, hook, and documentation defects are fixed.
47
+
48
+ ### Upgrade notes
49
+
50
+ - Search scores change scale; result order does not. An old score `s` corresponds
51
+ to `(s + 1) / 2`. Recalibrate any script or prompt that filters on a fixed score.
52
+ - CLI commands run without `--palace` now read and write the configured palace's
53
+ `<palace>/knowledge_graph.sqlite3`. Facts that only the legacy global
54
+ `~/.mempalace/knowledge_graph.sqlite3` holds are copied in once (see Changed).
55
+ If you plan to rebuild a palace from a JSONL export, take that export after
56
+ upgrading.
57
+
58
+ ### Security
59
+
60
+ - Raised the optional `[custom-models]` minimum to sentence-transformers 5.6.0
61
+ to exclude CVE-2026-68770. Default FastEmbed installations are unchanged.
62
+ - Refreshed `uv.lock` past published advisories: anyio 4.15.1, httpx2/httpcore2
63
+ 2.13.0, starlette 1.6.0 and click 8.5.0 (runtime, via `mcp`), and transformers
64
+ 5.15.1, torch 2.14.0 and setuptools 84.0.0 (`[custom-models]`), with a passing
65
+ dependency-upgrade gate report.
66
+ - The scheduled Dependency Audit now checks every package pinned in `uv.lock`,
67
+ direct and transitive, against OSV, and fails closed when an OSV or PyPI
68
+ yanked-status lookup is incomplete. A transitive advisory can be accepted only
69
+ for its exact locked version.
70
+ - The Gitleaks gate is built with Go 1.27.1 instead of end-of-life Go 1.24.11.
71
+ - Release builds install the reviewed `uv.lock` versions of `build` and `twine`.
72
+ - Dependabot waits seven days before proposing version updates, and the CI zizmor
73
+ gate also audits `.github/dependabot.yml`.
74
+ - Added `SECURITY.md`: report vulnerabilities through GitHub private vulnerability
75
+ reporting.
76
+
77
+ ### Changed
78
+
79
+ - `mempalace_search` accepts `max_results` as an alias for `limit`. The default
80
+ remains five results; both values must agree when supplied together.
81
+ - Search similarity is now true cosine similarity (`1 - distance / 2`; 1.0 =
82
+ identical, about 0 = unrelated) in CLI `search`, `search_memories()`,
83
+ `code_search()`, MCP `mempalace_search` / `mempalace_code_search`, Layer 3
84
+ wake-up search, and `mempalace_check_duplicate`. Up to 1.14.2 these reported
85
+ `1 - distance` (`2 × cosine - 1`, often negative). `code_search`'s
86
+ `ranking.vector_distance` still reports the raw squared-L2 distance.
87
+ - Facts held only by the legacy global KG are copied into the configured palace's
88
+ KG once per legacy file state, recorded by
89
+ `~/.mempalace/knowledge_graph.sqlite3.adopted`. Facts the palace KG already
90
+ holds stay authoritative, the legacy database is never modified, other palaces
91
+ never receive its facts, and adoption does not block concurrent KG writers.
92
+ Delete the marker to adopt again.
93
+ - `restore FILE` without `--palace` writes the archived KG to the configured
94
+ palace's `<palace>/knowledge_graph.sqlite3`; `--kg-path` still overrides it.
95
+ - The package's Upstream URL now points at https://github.com/MemPalace/mempalace.
96
+
97
+ ### Fixed
98
+
99
+ - Invalid metadata filters keep the backend query error with current LanceDB
100
+ releases; they no longer report a healthy palace as damaged.
101
+ - Kubernetes Secret YAML with whitespace before a key's colon is excluded from
102
+ mining.
103
+ - MCP mining creates or adopts the knowledge graph only after acquiring the mine
104
+ lease and when a graph write is needed. Busy and unchanged requests preserve it.
105
+ - File context reports complete chunk totals and pagination beyond 10,000 chunks.
106
+ - MCP storage-open failures report health/repair recovery, and a cached knowledge
107
+ graph reports a missing palace through the structured palace error.
108
+ - Installation maintenance blocks palace writes from other threads while preserving
109
+ same-thread nesting and the supported migration fence.
110
+ - Backup publication preserves an archive created by a concurrent writer. Platforms
111
+ without hard-link publication report a safe failure instead of replacing it.
112
+ - Updater detection preserves pipx installations through aliased custom homes.
113
+ Installed-package checks retain the selected manager and validate recovery
114
+ commands against the installed launcher.
115
+ - `import` no longer silently drops distinct drawers. Its dedup squared an
116
+ already-squared distance (skipping anything above about cosine 0.78), compared
117
+ across every wing, and let records of one file dedup each other. It now skips a
118
+ record only when its id is already stored or repeats in the file, or when its
119
+ target wing already held a drawer with cosine ≥ 0.9 before the import.
120
+ - `mempalace_check_duplicate` and the `mempalace_add_drawer` guard now apply the
121
+ documented cosine ≥ 0.9 threshold; they previously matched only at about 0.95.
122
+ - The knowledge graph no longer splits between MCP and the CLI. `mine`,
123
+ `mine-all`, `mine --watch`, `export --with-kg`, `import`, `backup create`,
124
+ `restore`, `compress`, pre-optimize and pre-watch backups, MCP, and the watcher
125
+ all use the selected palace's KG. Since v1.13.5, MCP could not see CLI-mined
126
+ facts, and default backups and exports omitted MCP-written facts.
127
+ - `mine --full` (and MCP `mempalace_mine` with `full: true`) now removes drawers,
128
+ tiny-file entries, and KG facts of deleted or newly excluded files, as a plain
129
+ full-walk mine already did.
130
+ - The legacy Claude Code PreCompact hook no longer blocks compaction; it logs and
131
+ exits without a decision. The Save hook counts only human prompts toward its
132
+ interval, and both hooks mine `MEMPAL_DIR` with `--mode convos`.
133
+ - The documented rebuild validation uses `search --results 5`; `--limit` does not
134
+ exist, so the step always failed after the palace had been quarantined.
135
+ - The legacy ChromaDB bridge command pins Python 3.12
136
+ (`uvx --python 3.12 --from 'mempalace-code[chroma]==1.13.4' ...`), avoiding a
137
+ chroma-hnswlib source build on Python 3.13+.
138
+ - `mempalace-code wing-migration <action> --help` names `mempalace-code
139
+ wing-migration` in its usage line. The hash-pinned runner is unchanged, so open
140
+ 1.14.2 receipts and qualification reports stay valid.
141
+ - Bootstrap installs also link `~/.local/bin/mempalace-code-mcp`, and the
142
+ documented MCP launcher lookup resolves symlinks.
143
+ - `update apply` keeps the `custom-models` extra, and missing-extra messages print
144
+ one install command for the running installation.
145
+ - `fetch-model` reports the real cache size; a missing embedding cache makes
146
+ `mine` print one error naming `mempalace-code fetch-model` instead of a
147
+ traceback; `mempalace-code-mcp --help` shows its own name; an unreadable
148
+ `~/.mempalace/config.json` now produces a one-time warning instead of being
149
+ silently ignored.
150
+ - The Dependency Audit issue lists each advisory once, and a clean run on `main`
151
+ closes it. GitHub Release notes now carry the version's changelog section, and
152
+ recovery releases compare against the previous published release.
153
+ - The wheel and sdist include the upstream MemPalace MIT copyright and permission
154
+ notice in `NOTICE`.
155
+
156
+ ### Documentation
157
+
158
+ - Corrected install, verification, backup/restore, offline, update, hook, search,
159
+ usage-rule, benchmark, and wing-migration documentation against the current CLI
160
+ and code: `init` does not create a palace; uv has no `tool inject`;
161
+ `config.json` examples are valid JSON; search is an exact flat scan with
162
+ cosine-equivalent ranking and no ANN index; `unknown_wing_room` is the real
163
+ filter error; README and PyPI links are absolute.
164
+ - Documented the release runbook in execution order, Dependabot and pull-request
165
+ intake into the development trunk (never merged on public `main`), the CI gate
166
+ set for contributors (`.[dev,spellcheck,treesitter]`), and the legacy status of
167
+ the ChromaDB-based benchmark harnesses.
168
+ - Corrected historical changelog entries (v1.0.0, v1.1.x, v1.2.0, v1.10.1,
169
+ v1.13.2) and upstream issue links.
170
+ - Refreshed the reviewed upstream snapshot through `8c4865f7` (2026-09-26) and
171
+ aligned the README comparison, WHY_THIS_FORK, UPSTREAM_HARDENING, and
172
+ COMPARISON_GRAPHIFY with it.
173
+
174
+ ### Maintenance
175
+
176
+ - Pinned GitHub Actions to actions/checkout v7.0.1, actions/cache v6.1.0,
177
+ actions/setup-python v7.0.0, and actions/setup-go v7.0.0 by full commit SHA.
178
+ - Removed the inert project `.claude/settings.json` hooks, which read an
179
+ environment variable Claude Code never sets.
180
+ - `release_public_read.py --version-tags` lists tags in release order; the
181
+ code-intelligence packet generator uses the canonical model cache and fails on
182
+ an MCP exhibit error; `embed_ab_bench.py` uses the maintained query set and
183
+ fails its LongMemEval gate loudly; `scripts/nuke_wing.py` requires `--yes` and
184
+ uses the configured palace.
185
+
5
186
  ## v1.14.2 — 2026-09-21
6
187
 
7
188
  Recovery release for the accumulated v1.14.1 changes. The immutable v1.14.1
@@ -208,10 +389,12 @@ build and publication.
208
389
  - Synchronized package, lockfile, README badge, Agent Plugins manifest, and
209
390
  generated quality scorecards on version 1.13.3.
210
391
 
211
- ## v1.13.2 — 2026-08-11
392
+ ## v1.13.2 — 2026-08-11 (tagged, not published)
212
393
 
213
- Patch release for portable Agent Plugins packaging and collision-safe release
214
- identity checks.
394
+ The tag remains immutable public evidence. The live upstream-drift check stopped
395
+ publication before build, so no v1.13.2 package or GitHub Release exists. These
396
+ changes (portable Agent Plugins packaging and collision-safe release identity
397
+ checks) first shipped in v1.13.3.
215
398
 
216
399
  ### Added
217
400
 
@@ -487,7 +670,7 @@ Patch release for the local-first embedding path.
487
670
  search, and palace health.
488
671
  - Focused storage and CLI command suites plus the network-marked offline gate.
489
672
 
490
- ## v1.10.1 — 2026-05-24
673
+ ## v1.10.1 — 2026-05-26
491
674
 
492
675
  Patch release after the v1.10.0 publish. Focus: real CLI/MCP smoke fixes,
493
676
  read-only no-embedder paths, and release-check tooling.
@@ -953,6 +1136,11 @@ Add `mempalace_explain_subsystem` MCP tool: combines semantic search with KG tra
953
1136
 
954
1137
  Add 4 architecture-oriented MCP tools for .NET type analysis: `mempalace_find_implementations`, `mempalace_find_references`, `mempalace_show_project_graph`, and `mempalace_show_type_dependencies`.
955
1138
 
1139
+ ## v1.2.0 — 2026-04-17
1140
+
1141
+ Published release for the dated entries below, from SKILLS-HOOKS through
1142
+ FIX-LANCE-CORRUPT.
1143
+
956
1144
  ## 2026-04-17 · SKILLS-HOOKS
957
1145
 
958
1146
  Add Claude Code skills and hooks: 12 skills (`/start`, `/status`, `/verify`, `/palace-health`, `/task-plan`, `/task-hardening`, `/doc-refresh`, `/ship`, `/release`, `/entropy-gc`, `/mine`, `/bench`), 3 shared modules (mode-classification, task-state, commit-checkpoint), Codex review integration, pre-commit verification gate, and edit logging hooks.
@@ -997,10 +1185,19 @@ Auto-backup palace before risky operations: `safe_optimize` triggers a backup by
997
1185
 
998
1186
  Detect and recover from missing LanceDB fragment files: `safe_open_table` probes the table with a count query on open and rolls back to the last clean version automatically when fragment corruption is detected.
999
1187
 
1188
+ ## v1.1.1 — 2026-04-14
1189
+
1190
+ Published patch release for the MINE-DEVOPS-INFRA entry below.
1191
+
1000
1192
  ## 2026-04-14 · MINE-DEVOPS-INFRA
1001
1193
 
1002
1194
  Add DevOps/infrastructure file support to the miner: Terraform (`.tf`, `.tfvars`, `.hcl`), Dockerfiles, Makefiles, Helm templates (`.tpl`), Ansible Jinja2 templates (`.j2`, `.jinja2`), and general config files (`.conf`, `.cfg`, `.ini`) are now scanned and indexed.
1003
1195
 
1196
+ ## v1.1.0 — 2026-04-14
1197
+
1198
+ Published release for the dated entries below, from
1199
+ STORE-CHROMA-DELETE-WING-LIMIT through CODE-TREESITTER-INFRA.
1200
+
1004
1201
  ## 2026-04-14 · STORE-CHROMA-DELETE-WING-LIMIT
1005
1202
 
1006
1203
  `ChromaStore.delete_wing` now calls `self.get()` instead of `self._col.get()`, so the `limit=10000` wrapper applies. Wings with more drawers than ChromaDB's default page size were silently partially deleted. (ChromaDB is deprecated; cleanup only.)
@@ -1061,10 +1258,11 @@ Tree-sitter AST-aware Python chunking: extracts function/class/method boundaries
1061
1258
 
1062
1259
  Tree-sitter optional infra: `.[treesitter]` extra, grammar download/cache, parser init, and automatic regex fallback when py-tree-sitter is absent or grammar unavailable.
1063
1260
 
1064
- ## v1.0.0 — 2026-04-12
1261
+ ## v1.0.0 — 2026-04-13
1065
1262
 
1066
1263
  First public release of **mempalace-code**, a code-first fork of
1067
- [milla-jovovich/mempalace](https://github.com/milla-jovovich/mempalace).
1264
+ [MemPalace/mempalace](https://github.com/MemPalace/mempalace) (then
1265
+ `milla-jovovich/mempalace`).
1068
1266
 
1069
1267
  ### Storage — LanceDB rewrite
1070
1268
 
@@ -1125,9 +1323,9 @@ First public release of **mempalace-code**, a code-first fork of
1125
1323
 
1126
1324
  ### Upstream issues addressed
1127
1325
 
1128
- - [#469](https://github.com/milla-jovovich/mempalace/issues/469) — ChromaDB version-cliff data deletion → LanceDB, no version-cliff risk.
1129
- - [#524](https://github.com/milla-jovovich/mempalace/issues/524) — Silent ONNX model download → explicit `mempalace init` + `fetch-model`.
1130
- - [#27](https://github.com/milla-jovovich/mempalace/issues/27) — Unverifiable 100% R@5 claim → removed. AAAK "lossless" claim → labeled lossy.
1326
+ - [#469](https://github.com/MemPalace/mempalace/issues/469) — ChromaDB version-cliff data deletion → LanceDB, no version-cliff risk.
1327
+ - [#524](https://github.com/MemPalace/mempalace/issues/524) — Silent ONNX model download → explicit `mempalace init` + `fetch-model`.
1328
+ - [#27](https://github.com/MemPalace/mempalace/issues/27) — Unverifiable 100% R@5 claim → removed. AAAK "lossless" claim → labeled lossy.
1131
1329
 
1132
1330
  ### License
1133
1331