mempalace-code 1.14.2__tar.gz → 1.15.1__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 (364) hide show
  1. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/.gitignore +11 -1
  2. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/.pre-commit-config.yaml +1 -1
  3. mempalace_code-1.15.1/AGENTS.md +285 -0
  4. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/CHANGELOG.md +186 -9
  5. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/CONTRIBUTING.md +42 -13
  6. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/LICENSE +1 -1
  7. mempalace_code-1.15.1/NOTICE +46 -0
  8. mempalace_code-1.15.1/PKG-INFO +1689 -0
  9. mempalace_code-1.15.1/README.md +1629 -0
  10. mempalace_code-1.15.1/SECURITY.md +35 -0
  11. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/BENCHMARKS.md +18 -14
  12. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/HYBRID_MODE.md +20 -6
  13. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/README.md +28 -13
  14. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/code_retrieval_bench.py +1 -1
  15. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/convomem_bench.py +0 -4
  16. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/demo_perf_budgets.py +34 -9
  17. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/dotnet_bench.py +1 -1
  18. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/embed_ab_bench.py +101 -176
  19. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/locomo_bench.py +10 -2
  20. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/longmemeval_bench.py +5 -65
  21. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/token_delta_bench.py +2 -1
  22. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/AGENT_INSTALL.md +114 -44
  23. mempalace_code-1.15.1/docs/BACKUP_RESTORE.md +1127 -0
  24. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/BENCH_TOKEN_DELTA.md +19 -13
  25. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/COMPARISON_GRAPHIFY.md +4 -3
  26. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/DEPENDENCY_UPGRADE_GATE.md +40 -12
  27. mempalace_code-1.15.1/docs/HOW_SEARCH_WORKS.md +232 -0
  28. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/LLM_USAGE_RULES.md +58 -20
  29. mempalace_code-1.15.1/docs/OFFLINE_USAGE.md +347 -0
  30. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/RELEASING.md +163 -36
  31. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/UPDATES.md +40 -10
  32. mempalace_code-1.15.1/docs/UPSTREAM_COMPARISON.md +329 -0
  33. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/UPSTREAM_HARDENING.md +3 -3
  34. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/WHY_THIS_FORK.md +25 -18
  35. mempalace_code-1.15.1/docs/demo/code-intelligence-packet.json +267 -0
  36. mempalace_code-1.15.1/docs/demo/code-intelligence-packet.md +845 -0
  37. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/operations/wing-migration.md +73 -12
  38. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/quality/PALACE-SCOPE-RESOURCE-BOUNDARY.md +11 -3
  39. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/quality/README.md +14 -7
  40. mempalace_code-1.15.1/docs/quality/acceptance/README.md +127 -0
  41. mempalace_code-1.15.1/docs/quality/acceptance/v1.15.0.md +312 -0
  42. mempalace_code-1.15.1/docs/quality/acceptance/v1.15.1.md +101 -0
  43. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/quality/autopilot-demo-gate-ledger.json +8 -8
  44. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/quality/autopilot-demo-gate-ledger.md +6 -6
  45. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/quality/scorecard.json +26 -26
  46. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/quality/scorecard.md +19 -19
  47. mempalace_code-1.15.1/docs/quality/upstream-comparison.json +674 -0
  48. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/quality/workflow-review-protocol.md +4 -11
  49. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/release-admission-rulesets.md +7 -4
  50. mempalace_code-1.15.1/examples/HOOKS_TUTORIAL.md +23 -0
  51. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/examples/gemini_cli_setup.md +20 -10
  52. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/examples/mcp_setup.md +14 -4
  53. mempalace_code-1.15.1/hooks/README.md +197 -0
  54. mempalace_code-1.15.1/hooks/mempal_precompact_hook.sh +93 -0
  55. mempalace_code-1.15.1/hooks/mempal_save_hook.sh +203 -0
  56. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/README.md +28 -10
  57. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/__init__.py +8 -0
  58. mempalace_code-1.15.1/mempalace_code/__main__.py +6 -0
  59. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/agent_plugin/plugin.json +1 -1
  60. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/agent_plugin/skills/mempalace/SKILL.md +5 -1
  61. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/architecture.py +68 -41
  62. mempalace_code-1.15.1/mempalace_code/backup.py +1408 -0
  63. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/cli.py +269 -51
  64. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/cli_commands/alias.py +75 -5
  65. mempalace_code-1.15.1/mempalace_code/cli_commands/backup_restore.py +430 -0
  66. mempalace_code-1.15.1/mempalace_code/cli_commands/common.py +157 -0
  67. mempalace_code-1.15.1/mempalace_code/cli_commands/diary.py +141 -0
  68. mempalace_code-1.15.1/mempalace_code/cli_commands/export_import.py +437 -0
  69. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/cli_commands/ingest.py +225 -43
  70. mempalace_code-1.15.1/mempalace_code/cli_commands/maintenance.py +735 -0
  71. mempalace_code-1.15.1/mempalace_code/cli_commands/model.py +368 -0
  72. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/cli_commands/preflight.py +19 -6
  73. mempalace_code-1.15.1/mempalace_code/cli_commands/query.py +639 -0
  74. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/cli_commands/update.py +52 -12
  75. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/cli_commands/version_check.py +15 -2
  76. mempalace_code-1.15.1/mempalace_code/cli_commands/watch.py +497 -0
  77. mempalace_code-1.15.1/mempalace_code/cli_invocation.py +99 -0
  78. mempalace_code-1.15.1/mempalace_code/config.py +728 -0
  79. mempalace_code-1.15.1/mempalace_code/convo_miner.py +902 -0
  80. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/dialect.py +95 -25
  81. mempalace_code-1.15.1/mempalace_code/diary.py +172 -0
  82. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/disk_budget.py +10 -3
  83. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/entity_detector.py +44 -24
  84. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/entity_registry.py +3 -1
  85. mempalace_code-1.15.1/mempalace_code/errors.py +22 -0
  86. mempalace_code-1.15.1/mempalace_code/export.py +728 -0
  87. mempalace_code-1.15.1/mempalace_code/knowledge_graph.py +1737 -0
  88. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/language_catalog.py +41 -0
  89. mempalace_code-1.15.1/mempalace_code/launchd.py +55 -0
  90. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/layers.py +156 -84
  91. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/dispatch.py +285 -36
  92. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/protocol_compat.py +16 -4
  93. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/protocol_text.py +5 -3
  94. mempalace_code-1.15.1/mempalace_code/mcp/runtime.py +329 -0
  95. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/tools/architecture.py +178 -26
  96. mempalace_code-1.15.1/mempalace_code/mcp/tools/diary.py +112 -0
  97. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/tools/graph.py +25 -5
  98. mempalace_code-1.15.1/mempalace_code/mcp/tools/kg.py +291 -0
  99. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/tools/search.py +174 -49
  100. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/tools/write.py +167 -13
  101. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp_server.py +1 -1
  102. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp_tool_profiles.py +1 -0
  103. mempalace_code-1.15.1/mempalace_code/mining/chunkers.py +1626 -0
  104. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mining/kg_extract.py +39 -4
  105. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mining/languages.py +2 -12
  106. mempalace_code-1.15.1/mempalace_code/mining/orchestrator.py +1480 -0
  107. mempalace_code-1.15.1/mempalace_code/mining/projects.py +667 -0
  108. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mining/scanner.py +119 -10
  109. mempalace_code-1.15.1/mempalace_code/mining/source_text.py +204 -0
  110. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mining/symbols.py +95 -9
  111. mempalace_code-1.15.1/mempalace_code/mirror_preflight.py +797 -0
  112. mempalace_code-1.15.1/mempalace_code/normalize.py +890 -0
  113. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/onboarding.py +22 -11
  114. mempalace_code-1.15.1/mempalace_code/operation_lock.py +529 -0
  115. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/palace_graph.py +71 -14
  116. mempalace_code-1.15.1/mempalace_code/reader.py +545 -0
  117. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/room_detector_local.py +280 -77
  118. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/search_reranker.py +7 -4
  119. mempalace_code-1.15.1/mempalace_code/searcher.py +586 -0
  120. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/source_io.py +25 -3
  121. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/spellcheck.py +9 -5
  122. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/split_mega_files.py +159 -28
  123. mempalace_code-1.15.1/mempalace_code/storage.py +3818 -0
  124. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/taxonomy_filters.py +71 -1
  125. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/updater.py +186 -33
  126. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/version_check.py +38 -17
  127. mempalace_code-1.15.1/mempalace_code/watcher.py +2482 -0
  128. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/wing_migration.py +494 -104
  129. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/pyproject.toml +10 -6
  130. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/bootstrap.sh +44 -15
  131. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/dependency_upgrade_gate.py +199 -96
  132. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/docs_drift_guard.py +58 -4
  133. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/gate_inventory.py +23 -4
  134. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/gen_code_intelligence_packet.py +40 -7
  135. mempalace_code-1.15.1/scripts/nuke_wing.py +51 -0
  136. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/release_admission_checks.py +19 -4
  137. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/release_artifact_gate.py +4 -3
  138. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/release_install_metadata_smoke.py +105 -14
  139. mempalace_code-1.15.1/scripts/release_notes.py +46 -0
  140. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/release_preflight.py +207 -4
  141. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/release_public_read.py +15 -3
  142. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/release_readiness_gate.py +278 -219
  143. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/upstream_comparison_guard.py +6 -0
  144. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/conftest.py +77 -0
  145. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_agent_skill_authority_contract.py +319 -16
  146. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_autopilot_demo_gate_ledger.py +30 -0
  147. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_backup.py +320 -50
  148. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_backup_cli.py +66 -45
  149. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_chunking.py +64 -54
  150. mempalace_code-1.15.1/tests/test_claude_hooks.py +287 -0
  151. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_cli.py +311 -385
  152. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_cli_command_modules.py +51 -18
  153. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_cli_golden_scenarios.py +14 -3
  154. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_code_intelligence_packet.py +49 -1
  155. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_code_retrieval_bench.py +3 -3
  156. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_config.py +61 -4
  157. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_convo_miner.py +57 -41
  158. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_demo_perf_budgets.py +85 -0
  159. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_dependency_upgrade_gate.py +296 -1
  160. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_dialect.py +80 -0
  161. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_docs_drift_guard.py +283 -13
  162. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_e2e.py +19 -7
  163. mempalace_code-1.15.1/tests/test_embed_ab_bench.py +230 -0
  164. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_embedding_runtime.py +123 -17
  165. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_entity_detector.py +51 -0
  166. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_export.py +104 -1
  167. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_gate_inventory.py +26 -2
  168. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_installed_artifact_behavior.py +82 -2
  169. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_installed_cli_palace_scope.py +37 -43
  170. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_knowledge_graph.py +69 -0
  171. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_layers.py +19 -0
  172. mempalace_code-1.15.1/tests/test_legacy_benchmark_retrieval.py +162 -0
  173. mempalace_code-1.15.1/tests/test_license_notice.py +34 -0
  174. mempalace_code-1.15.1/tests/test_longmemeval_metrics.py +139 -0
  175. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_mcp_protocol_compat.py +7 -4
  176. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_mcp_registry.py +1 -0
  177. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_mcp_server.py +280 -17
  178. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_mcp_tool_profiles.py +8 -1
  179. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_mine_source_exact.py +68 -62
  180. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_miner.py +91 -26
  181. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_miner_modules.py +4 -1
  182. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_normalize.py +26 -39
  183. mempalace_code-1.15.1/tests/test_nuke_wing.py +91 -0
  184. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_offline.py +24 -12
  185. mempalace_code-1.15.1/tests/test_operation_lock.py +182 -0
  186. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_palace_graph.py +5 -3
  187. mempalace_code-1.15.1/tests/test_palace_kg_owner.py +458 -0
  188. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_palace_scope_resource_boundary.py +41 -20
  189. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_quality_scorecard.py +8 -1
  190. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_reader.py +147 -17
  191. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_regular_source_guard.py +30 -2
  192. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_release_artifact_gate.py +20 -3
  193. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_release_install_metadata_smoke.py +171 -1
  194. mempalace_code-1.15.1/tests/test_release_notes.py +115 -0
  195. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_release_preflight.py +392 -8
  196. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_release_public_read.py +43 -0
  197. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_release_readiness_gate.py +391 -164
  198. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_release_ruleset_contract.py +81 -10
  199. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_release_status_gate.py +1 -0
  200. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_release_workflow_admission.py +27 -0
  201. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_searcher.py +161 -37
  202. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_split_mega_files.py +13 -8
  203. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_stdio.py +5 -1
  204. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_storage.py +267 -50
  205. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_symbol_extract.py +6 -5
  206. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_taxonomy_filters.py +17 -0
  207. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_treesitter.py +101 -6
  208. mempalace_code-1.15.1/tests/test_uat2_mining.py +625 -0
  209. mempalace_code-1.15.1/tests/test_uat2_watch_ops.py +665 -0
  210. mempalace_code-1.15.1/tests/test_uat_compress_layers.py +571 -0
  211. mempalace_code-1.15.1/tests/test_uat_config_init.py +977 -0
  212. mempalace_code-1.15.1/tests/test_uat_convo_core.py +818 -0
  213. mempalace_code-1.15.1/tests/test_uat_convo_formats.py +947 -0
  214. mempalace_code-1.15.1/tests/test_uat_convos.py +731 -0
  215. mempalace_code-1.15.1/tests/test_uat_ids.py +936 -0
  216. mempalace_code-1.15.1/tests/test_uat_install_r2.py +484 -0
  217. mempalace_code-1.15.1/tests/test_uat_kg.py +927 -0
  218. mempalace_code-1.15.1/tests/test_uat_kg_backup.py +850 -0
  219. mempalace_code-1.15.1/tests/test_uat_kg_mining.py +302 -0
  220. mempalace_code-1.15.1/tests/test_uat_leases.py +929 -0
  221. mempalace_code-1.15.1/tests/test_uat_mcp_protocol.py +884 -0
  222. mempalace_code-1.15.1/tests/test_uat_mcp_search.py +830 -0
  223. mempalace_code-1.15.1/tests/test_uat_mining.py +1151 -0
  224. mempalace_code-1.15.1/tests/test_uat_model_fetch.py +353 -0
  225. mempalace_code-1.15.1/tests/test_uat_model_install.py +1288 -0
  226. mempalace_code-1.15.1/tests/test_uat_ops_misc.py +409 -0
  227. mempalace_code-1.15.1/tests/test_uat_repair.py +604 -0
  228. mempalace_code-1.15.1/tests/test_uat_repair_backup.py +466 -0
  229. mempalace_code-1.15.1/tests/test_uat_repair_reads.py +176 -0
  230. mempalace_code-1.15.1/tests/test_uat_search_read.py +785 -0
  231. mempalace_code-1.15.1/tests/test_uat_watch.py +1141 -0
  232. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_updater.py +316 -2
  233. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_upstream_comparison_guard.py +25 -5
  234. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_version_check.py +5 -5
  235. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_version_consistency.py +31 -1
  236. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_watcher.py +161 -56
  237. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_watcher_resource_subprocess.py +76 -10
  238. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_wing_migration.py +508 -9
  239. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tools/gitleaks/go.mod +1 -1
  240. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/uv.lock +137 -123
  241. mempalace_code-1.14.2/AGENTS.md +0 -218
  242. mempalace_code-1.14.2/NOTICE +0 -17
  243. mempalace_code-1.14.2/PKG-INFO +0 -1284
  244. mempalace_code-1.14.2/README.md +0 -1225
  245. mempalace_code-1.14.2/docs/BACKUP_RESTORE.md +0 -708
  246. mempalace_code-1.14.2/docs/HOW_SEARCH_WORKS.md +0 -135
  247. mempalace_code-1.14.2/docs/OFFLINE_USAGE.md +0 -216
  248. mempalace_code-1.14.2/docs/UPSTREAM_COMPARISON.md +0 -256
  249. mempalace_code-1.14.2/docs/demo/code-intelligence-packet.json +0 -266
  250. mempalace_code-1.14.2/docs/demo/code-intelligence-packet.md +0 -1535
  251. mempalace_code-1.14.2/docs/quality/upstream-comparison.json +0 -415
  252. mempalace_code-1.14.2/docs/refactoring/REFAC-MINER-MODULES/progress.md +0 -21
  253. mempalace_code-1.14.2/examples/HOOKS_TUTORIAL.md +0 -32
  254. mempalace_code-1.14.2/hooks/README.md +0 -138
  255. mempalace_code-1.14.2/hooks/mempal_precompact_hook.sh +0 -76
  256. mempalace_code-1.14.2/hooks/mempal_save_hook.sh +0 -146
  257. mempalace_code-1.14.2/mempalace_code/__main__.py +0 -5
  258. mempalace_code-1.14.2/mempalace_code/backup.py +0 -989
  259. mempalace_code-1.14.2/mempalace_code/cli_commands/backup_restore.py +0 -211
  260. mempalace_code-1.14.2/mempalace_code/cli_commands/common.py +0 -18
  261. mempalace_code-1.14.2/mempalace_code/cli_commands/diary.py +0 -103
  262. mempalace_code-1.14.2/mempalace_code/cli_commands/export_import.py +0 -117
  263. mempalace_code-1.14.2/mempalace_code/cli_commands/maintenance.py +0 -325
  264. mempalace_code-1.14.2/mempalace_code/cli_commands/model.py +0 -198
  265. mempalace_code-1.14.2/mempalace_code/cli_commands/query.py +0 -353
  266. mempalace_code-1.14.2/mempalace_code/cli_commands/watch.py +0 -222
  267. mempalace_code-1.14.2/mempalace_code/config.py +0 -517
  268. mempalace_code-1.14.2/mempalace_code/convo_miner.py +0 -469
  269. mempalace_code-1.14.2/mempalace_code/export.py +0 -421
  270. mempalace_code-1.14.2/mempalace_code/knowledge_graph.py +0 -830
  271. mempalace_code-1.14.2/mempalace_code/mcp/runtime.py +0 -117
  272. mempalace_code-1.14.2/mempalace_code/mcp/tools/diary.py +0 -141
  273. mempalace_code-1.14.2/mempalace_code/mcp/tools/kg.py +0 -154
  274. mempalace_code-1.14.2/mempalace_code/mining/chunkers.py +0 -1466
  275. mempalace_code-1.14.2/mempalace_code/mining/orchestrator.py +0 -963
  276. mempalace_code-1.14.2/mempalace_code/mining/projects.py +0 -413
  277. mempalace_code-1.14.2/mempalace_code/mirror_preflight.py +0 -342
  278. mempalace_code-1.14.2/mempalace_code/normalize.py +0 -547
  279. mempalace_code-1.14.2/mempalace_code/operation_lock.py +0 -221
  280. mempalace_code-1.14.2/mempalace_code/reader.py +0 -325
  281. mempalace_code-1.14.2/mempalace_code/searcher.py +0 -496
  282. mempalace_code-1.14.2/mempalace_code/storage.py +0 -2241
  283. mempalace_code-1.14.2/mempalace_code/watcher.py +0 -1333
  284. mempalace_code-1.14.2/scripts/nuke_wing.py +0 -19
  285. mempalace_code-1.14.2/tests/test_embed_ab_bench.py +0 -46
  286. mempalace_code-1.14.2/tests/test_operation_lock.py +0 -48
  287. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/.gitleaks.toml +0 -0
  288. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/CLAUDE.md +0 -0
  289. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/assets/mempalace_banner.jpg +0 -0
  290. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/data/code_retrieval_queries.json +0 -0
  291. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/demo_perf_budgets.json +0 -0
  292. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/membench_bench.py +0 -0
  293. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/minilm_runtime_compatibility_fixture.json +0 -0
  294. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/results_embed_ab_2026-04-09.json +0 -0
  295. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/results_token_delta_mempalace.json +0 -0
  296. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/retrieval_quality_facts.json +0 -0
  297. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/benchmarks/token_delta_fixture_facts.json +0 -0
  298. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/docs/dependency-audit-allowlist.json +0 -0
  299. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/examples/basic_mining.py +0 -0
  300. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/examples/convo_import.py +0 -0
  301. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace/__init__.py +0 -0
  302. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace/mcp_server.py +0 -0
  303. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/_stdio.py +0 -0
  304. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/agent_plugin/mcp.json +0 -0
  305. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/agent_plugin/schemas/1.0.0/mcp.schema.json +0 -0
  306. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/agent_plugin/schemas/1.0.0/plugin.schema.json +0 -0
  307. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/agent_plugin/schemas/SCHEMA-NOTICE.md +0 -0
  308. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/agent_plugins.py +0 -0
  309. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/cli_commands/__init__.py +0 -0
  310. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/cli_commands/agent_plugin.py +0 -0
  311. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/cli_commands/wing_migration.py +0 -0
  312. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/general_extractor.py +0 -0
  313. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/__init__.py +0 -0
  314. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/registry.py +0 -0
  315. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/tools/__init__.py +0 -0
  316. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp/tools/read.py +0 -0
  317. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mcp_launcher.py +0 -0
  318. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/miner.py +0 -0
  319. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mining/__init__.py +0 -0
  320. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/mining/batching.py +0 -0
  321. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/py.typed +0 -0
  322. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/retrieval_rerank.py +0 -0
  323. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/treesitter.py +0 -0
  324. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/mempalace_code/version.py +0 -0
  325. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/pyrightconfig.strict.json +0 -0
  326. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/architecture_guard.py +0 -0
  327. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/gitleaks_scan.py +0 -0
  328. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/public_safety_scan.py +0 -0
  329. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/pytest_failure_summary.py +0 -0
  330. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/quality_scorecard.py +0 -0
  331. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/release_status_gate.py +0 -0
  332. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/wing_migration.py +0 -0
  333. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/scripts/workflow_summary_guard.py +0 -0
  334. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/fixtures/unreasoned_suppression.py +0 -0
  335. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/release_smoke_support.py +0 -0
  336. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_agent_plugin_package.py +0 -0
  337. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_architecture_extraction.py +0 -0
  338. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_architecture_guard.py +0 -0
  339. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_disk_budget.py +0 -0
  340. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_dotnet_bench.py +0 -0
  341. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_dotnet_config.py +0 -0
  342. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_entity_registry.py +0 -0
  343. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_explicit_wing_consistency.py +0 -0
  344. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_general_extractor.py +0 -0
  345. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_gitleaks_scan.py +0 -0
  346. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_kg_extract.py +0 -0
  347. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_lang_detect.py +0 -0
  348. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_language_catalog.py +0 -0
  349. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_onboarding.py +0 -0
  350. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_packaging_namespace.py +0 -0
  351. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_public_safety_scan.py +0 -0
  352. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_pyright_optional_dependencies.py +0 -0
  353. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_pytest_failure_summary.py +0 -0
  354. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_quality_palace_scope_resource_boundary.py +0 -0
  355. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_release_skill_contract.py +0 -0
  356. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_retrieval_rerank.py +0 -0
  357. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_search_reranker.py +0 -0
  358. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_storage_lance.py +0 -0
  359. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_token_delta_bench.py +0 -0
  360. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_type_suppressions.py +0 -0
  361. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_watcher_resource_bounds.py +0 -0
  362. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tests/test_workflow_summary_guard.py +0 -0
  363. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/tools/gitleaks/go.sum +0 -0
  364. {mempalace_code-1.14.2 → mempalace_code-1.15.1}/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,285 @@
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
+ **Commit attribution boundary.** Commits in this repository must not contain a
21
+ Claude `Co-Authored-By` trailer. Configure automation to omit it; do not add it
22
+ and clean it up later.
23
+
24
+ ## Audience and default scope
25
+
26
+ - The default audience is developers asking questions about repository code.
27
+ Ground answers in current source, tests, repository documentation, and Git history.
28
+ - Users preserve valuable project results in repository artifacts and commits.
29
+ Use those version-controlled artifacts as durable project context.
30
+ - Inspecting or mining stored user conversations, maintaining diaries, and adding,
31
+ enabling, or repairing conversation-save reminders or persistence guarantees
32
+ require an explicit request for that workflow. An audit finding about an optional
33
+ conversation workflow does not bring it into a code-question task.
34
+
35
+ ## Stack
36
+
37
+ - **Python** 3.11+ (supports 3.11–3.14)
38
+ - **Storage**: LanceDB (core, crash-safe vector DB — no server required)
39
+ - **Embeddings**: FastEmbed/ONNX by default; SentenceTransformer only in `[custom-models]`
40
+ - **MCP**: the official `mcp` Python SDK
41
+ - **Config**: PyYAML
42
+ - **Runtime dependencies**: declared once in `[project].dependencies` of `pyproject.toml`
43
+ - **Linting / formatting / typing**: Ruff + Pyright
44
+ - **Tests**: pytest
45
+ - **Package manager**: uv (preferred) or pip
46
+
47
+ ## Dev Setup
48
+
49
+ ```bash
50
+ # With uv (preferred)
51
+ uv pip install -e ".[dev,spellcheck,treesitter]"
52
+
53
+ # With pip
54
+ pip install -e ".[dev,spellcheck,treesitter]"
55
+ ```
56
+
57
+ These are the extras the CI type check installs; with `.[dev]` alone Pyright
58
+ reports the Tree-sitter imports as missing.
59
+
60
+ No Docker required. Everything runs locally in a venv or with pipx.
61
+
62
+ Optional extras:
63
+
64
+ - `.[custom-models]` — arbitrary SentenceTransformer models; follow `docs/OFFLINE_USAGE.md`
65
+ - `.[dev]` — test, lint, type-check, build, and release tooling
66
+ - `.[spellcheck]` — autocorrect helper API (`mempalace_code.spellcheck`); mining never applies it
67
+ - `.[treesitter]` — Tree-sitter AST parsing
68
+ - `.[watch]` — automatic mining on file changes
69
+
70
+ ## Running Tests
71
+
72
+ **Important**: Use the Python from your mempalace virtualenv (pipx venv, `.venv`, etc.), not the system Python which may lack dev deps.
73
+
74
+ ```bash
75
+ # Full suite (stop on first failure)
76
+ python -m pytest tests/ -x -q -m "not needs_network"
77
+
78
+ # Per-module
79
+ python -m pytest tests/test_storage.py -v
80
+ python -m pytest tests/test_mcp_server.py -v
81
+ python -m pytest tests/test_miner.py -v
82
+ python -m pytest tests/test_convo_miner.py -v
83
+ ```
84
+
85
+ ## Linting / Formatting
86
+
87
+ ```bash
88
+ # Check
89
+ ruff check mempalace_code/ tests/ scripts/
90
+
91
+ # Format check
92
+ ruff format --check mempalace_code/ tests/ scripts/
93
+
94
+ # Type check (gating in CI — must exit 0)
95
+ python -m pyright --pythonpath "$(python -c 'import sys; print(sys.executable)')"
96
+ python -m pyright -p pyrightconfig.strict.json
97
+
98
+ # Auto-fix lint
99
+ ruff check --fix mempalace_code/ tests/ scripts/
100
+
101
+ # Auto-fix format
102
+ ruff format mempalace_code/ tests/ scripts/
103
+ ```
104
+
105
+ Line length: 100. Target: py311. Quote style: double.
106
+
107
+ The complete gate set the **Tests** workflow runs on every pull request is listed
108
+ once, in `CONTRIBUTING.md` under "Running Tests".
109
+
110
+ ## Key Modules
111
+
112
+ The main owners under `mempalace_code/`. The full module guide is
113
+ `mempalace_code/README.md`.
114
+
115
+ | Module | Purpose |
116
+ |--------|---------|
117
+ | `storage.py` | LanceDB vector storage — add, search, delete, health_check, recover |
118
+ | `backup.py` | Tarball backup/restore — `mempalace-code backup`, scheduled backups |
119
+ | `mining/` | Project miner package — scanning, language detection, chunking, symbols, batching, orchestration; `miner.py` is a compatibility shim |
120
+ | `convo_miner.py` | Conversation miner — ingests Claude/ChatGPT/Slack exports |
121
+ | `searcher.py` | Semantic search — query palace with optional wing/room filters |
122
+ | `knowledge_graph.py` | Temporal KG — entity-relationship triples with validity windows |
123
+ | `layers.py` | Tiered context loading — L0/L1/L2/L3 wake-up layers for local models |
124
+ | `palace_graph.py` | Graph traversal and tunnel detection across wings/rooms |
125
+ | `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` |
126
+ | `watcher.py` | File watcher — `watch_and_mine`, `watch_all`, launchd/cron schedule rendering |
127
+ | `cli_commands/` | CLI command handlers; `cli.py` is the thin `mempalace-code` entry point and compatibility facade |
128
+
129
+ ## Architecture Principles
130
+
131
+ 1. **Verbatim-first** — store content exactly as provided; do not summarize or compress drawers.
132
+ 2. **Local-first** — no external APIs required; default embeddings run on-device via CPU FastEmbed/ONNX.
133
+ 3. **Zero-API-by-default** — LanceDB and FastEmbed work offline after explicit model setup.
134
+
135
+ ## Storage Backend
136
+
137
+ - **LanceDB** is the core backend (installed by default via `lancedb>=0.20`).
138
+ - **ChromaDB** support is retired from current packages because every available
139
+ release is advisory-affected. Back up a legacy source palace before upgrading,
140
+ then use the last public bridge release in isolation:
141
+ `uvx --python 3.12 --from 'mempalace-code[chroma]==1.13.4' mempalace-code migrate-storage SRC DST --verify`.
142
+
143
+ ## Embedding Model Policy
144
+
145
+ - **Current default**: `all-MiniLM-L6-v2` (384d, normalized CPU FastEmbed/ONNX).
146
+ - **Cache authority**: `$HF_HOME/mempalace-fastembed/all-MiniLM-L6-v2-v1/` plus its
147
+ immutable `.mempalace-model.json` provenance. Recovery is
148
+ `mempalace-code fetch-model` while online.
149
+ - **Custom-model boundary**: arbitrary Hugging Face names and local
150
+ SentenceTransformer paths use the explicit `[custom-models]` extra. On CPU-only Linux,
151
+ follow the ordered installation and recovery contour in `docs/OFFLINE_USAGE.md`; only
152
+ that explicit custom-model path may use `trust_remote_code=True`, and canonical MiniLM
153
+ aliases never do.
154
+ - **No code-only models**: CodeBERT, UniXcoder, etc. improve code at the expense of prose. Only general-purpose sentence-transformers that handle both are candidates.
155
+
156
+ ### Text gate
157
+
158
+ An embedding model change is gated behind A/B benchmark results
159
+ (`benchmarks/embed_ab_bench.py`) and must pass both the code gate (the A/B
160
+ code-retrieval results) and the text gate: match or beat MiniLM on LongMemEval R@5
161
+ (text retrieval). Text quality is non-negotiable — this is a code-first fork but
162
+ natural language search (conversations, commits, decisions) must not degrade. The
163
+ only LongMemEval harness, `benchmarks/longmemeval_bench.py`, is the legacy upstream
164
+ ChromaDB-based script. It imports `chromadb`, which current packages do not install
165
+ and whose available releases carry known advisories, so it runs only in an isolated,
166
+ disposable legacy environment. No text baseline has been recorded, so a model change
167
+ must first record one there. The gate cannot be skipped: without that environment and
168
+ baseline it has not run, and the model change is blocked.
169
+
170
+ ### Historical Benchmark Results — 2026-04-09 (BENCH-EMBED-AB)
171
+
172
+ Historical record, measured with the fixed 20-query set that
173
+ `benchmarks/embed_ab_bench.py` used at the time. It is not comparable with the current
174
+ `benchmarks/code_retrieval_bench.py` dataset (symbol and file-only truth,
175
+ schema-2 report), and no current baseline has been recorded.
176
+ Record a fresh dated baseline on the current dataset before the next model
177
+ decision.
178
+
179
+ Code retrieval on the mempalace repo (20 known-answer queries, 469 chunks):
180
+
181
+ | Model | R@5 | R@10 | Embed(s) | Query(ms) | Index(MB) |
182
+ |--------------------|-------|-------|----------|-----------|-----------|
183
+ | all-MiniLM-L6-v2 | 0.950 | 1.000 | 15.2 | 15.9 | 17.0 |
184
+ | all-mpnet-base-v2 | 0.900 | 1.000 | 47.5 | 30.5 | 17.7 |
185
+ | nomic-embed-text-v1.5 | 0.950 | 1.000 | 85.4 | 45.8 | 17.7 |
186
+
187
+ Per-category R@5:
188
+
189
+ | Model | architecture | class_lookup | cross_file | function_lookup |
190
+ |--------------------|:---:|:---:|:---:|:---:|
191
+ | all-MiniLM-L6-v2 | 0.800 | 1.000 | 1.000 | 1.000 |
192
+ | all-mpnet-base-v2 | 0.600 | 1.000 | 1.000 | 1.000 |
193
+ | nomic-embed-text-v1.5 | 1.000 | 1.000 | 1.000 | 0.833 |
194
+
195
+ **Recommendation: minilm remains default.**
196
+
197
+ - mpnet regresses on code R@5 (0.900 vs 0.950) while being 3× slower to embed and 2× slower at query. Eliminated.
198
+ - 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.
199
+ - [Text-gate](#text-gate) (LongMemEval) evidence was not collected — prerequisites missing (`benchmarks/data/longmemeval_s_cleaned.json` not present, `fastembed` not installed).
200
+ - Full results: `benchmarks/results_embed_ab_2026-04-09.json`.
201
+
202
+ ## Git Workflow
203
+
204
+ - **Two histories**: local `main` is the development trunk; work reaches it from
205
+ topic branches. Public `main` carries one squashed commit per release and advances
206
+ only by fast-forwarding a release candidate built and admitted per
207
+ `docs/RELEASING.md`.
208
+ - **Branch naming**: `feat/<slug>`, `fix/<slug>`, `chore/<slug>`, `docs/<slug>` for
209
+ development; `release/vX.Y.Z` (rebuilds `release/vX.Y.Z-rc2`, `-rc3`, …) for
210
+ public release candidates only.
211
+ - **Conventional commits**:
212
+ - `feat:` — new feature or capability
213
+ - `fix:` — bug fix
214
+ - `docs:` — documentation only
215
+ - `test:` — test additions or changes
216
+ - `bench:` — benchmarks
217
+ - `chore:` — maintenance, deps, tooling
218
+ - Release candidate commits use the subject `release vX.Y.Z`.
219
+ - **No force-push to `main`**.
220
+ - Pull requests on GitHub, including Dependabot updates, are never merged on
221
+ public `main`: the next release candidate would silently revert them. Port an
222
+ accepted change into the development trunk, ship it in the next release, then
223
+ close the pull request with a note naming that release.
224
+
225
+ ## Maintainer-Local Tools
226
+
227
+ The `autopilot` and `backlog-utility` tools are maintainer-local; they are not
228
+ distributed with this repository. `/task-plan` and `/task-hardening` admit
229
+ executor state only through `autopilot` and stop when it is unavailable.
230
+ Current task contracts and planning are owned by `.backlog` (backlog-files/v2).
231
+ Read `backlog_context`, `backlog_workset_context`, and `backlog_workset_queue`
232
+ through the verified project-bound MCP connection. CLI fallback uses a verified
233
+ absolute `backlog-utility` binary with `call --store .backlog --project
234
+ mempalace-code --principal <principal> --name <tool> --arguments-file <json>`.
235
+ Unavailable or mismatched access means unknown backlog state; never fall back
236
+ to active YAML or edit canonical JSON by hand. `docs/BACKLOG.yaml` retains section
237
+ metadata; `docs/BACKLOG-archived.yaml` retains historical completion evidence.
238
+ Recovery: `<absolute-backlog-utility> validate --store .backlog`.
239
+ Edits still require admitted authority and no conflicting writer.
240
+
241
+ ## Operational Lessons
242
+
243
+ - **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`.
244
+ - **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.
245
+ - **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.
246
+ - **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.
247
+ - **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.
248
+ - **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.
249
+ - **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.
250
+ - **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.
251
+ - **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.
252
+ - **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.
253
+ - **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.
254
+
255
+ ## LDR adoption and problem handoff
256
+
257
+ - LDR (`ldr/v1`) is the default format for current durable architectural decisions.
258
+ Canonical accepted records live under `docs/decisions` when present. Historical
259
+ ADRs remain evidence; do not migrate them or invent records for routine tasks.
260
+ Reuse unchanged applicable accepted decisions without a new proposal or repeated
261
+ record approval. No applicable records means an explicit empty selection with
262
+ its applicability reason in the existing task context.
263
+
264
+ - Apply this rule before architecture, durable-contract, lifecycle, ownership or
265
+ recovery changes. Start with one decision needed by the current task; keep task
266
+ state and execution evidence with their existing owners.
267
+ - Discover applicability from the task and repository-owned references. Resolve
268
+ the exact accepted key/revision; inspect status first and apply only active
269
+ records. Check current committed bytes, owner, local references and fitness.
270
+ Search results and historical prose cannot accept a decision.
271
+ - A missing or stale binding blocks only the dependent change. Propose a record
272
+ outside the canonical accepted root; only the operator accepts active records.
273
+ Same-key changes advance revision by one and preserve lifecycle/recovery.
274
+ - Use the existing adopter and pinned validator when present. Do not replace a
275
+ pin, install a utility, add a runtime gate, or migrate historical decisions as
276
+ part of this instruction. Run the current task's existing relevant checks.
277
+ - For a reproduced LDR problem, prepare and deliver the targeted handoff below
278
+ during the same work session without waiting for a separate request. Identify
279
+ whether the failure belongs to LDR or the adopter; record uncertainty. Continue
280
+ independent safe work while the affected action remains blocked.
281
+
282
+ - Private maintainer routing and the first scoped adoption candidate are in
283
+ .codex-local/LDR.md when present. Read that note before sending an LDR finding.
284
+ If no route is configured, retain the sanitized draft and report missing_route.
285
+ Keep machine paths, private transport and incident evidence out of public docs.
@@ -2,6 +2,166 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## v1.15.1 — 2026-10-04
6
+
7
+ Includes the v1.15.0 changes and the corrections below.
8
+
9
+ ### Security
10
+
11
+ - Refresh the transitive lock pins to PyJWT 2.15.0 and urllib3 2.8.0, closing
12
+ published authentication, TLS and denial-of-service advisories. The complete
13
+ current audit checks all 152 external locked packages without exceptions.
14
+
15
+ ### Fixed
16
+
17
+ - Govern the synthetic Kubernetes Secret fixture in immutable release-candidate
18
+ history with one exact Gitleaks fingerprint so full-history release scanning
19
+ can retain that history and continue detecting other secrets.
20
+
21
+ ## v1.15.0 — 2026-09-26
22
+
23
+ Maintenance release from a full repository and documentation audit. Search scores
24
+ now use the true cosine scale, every surface uses the selected palace's knowledge
25
+ graph, and several data-loss, hook, and documentation defects are fixed.
26
+
27
+ ### Upgrade notes
28
+
29
+ - Search scores change scale; result order does not. An old score `s` corresponds
30
+ to `(s + 1) / 2`. Recalibrate any script or prompt that filters on a fixed score.
31
+ - CLI commands run without `--palace` now read and write the configured palace's
32
+ `<palace>/knowledge_graph.sqlite3`. Facts that only the legacy global
33
+ `~/.mempalace/knowledge_graph.sqlite3` holds are copied in once (see Changed).
34
+ If you plan to rebuild a palace from a JSONL export, take that export after
35
+ upgrading.
36
+
37
+ ### Security
38
+
39
+ - Raised the optional `[custom-models]` minimum to sentence-transformers 5.6.0
40
+ to exclude CVE-2026-68770. Default FastEmbed installations are unchanged.
41
+ - Refreshed `uv.lock` past published advisories: anyio 4.15.1, httpx2/httpcore2
42
+ 2.13.0, starlette 1.6.0 and click 8.5.0 (runtime, via `mcp`), and transformers
43
+ 5.15.1, torch 2.14.0 and setuptools 84.0.0 (`[custom-models]`), with a passing
44
+ dependency-upgrade gate report.
45
+ - The scheduled Dependency Audit now checks every package pinned in `uv.lock`,
46
+ direct and transitive, against OSV, and fails closed when an OSV or PyPI
47
+ yanked-status lookup is incomplete. A transitive advisory can be accepted only
48
+ for its exact locked version.
49
+ - The Gitleaks gate is built with Go 1.27.1 instead of end-of-life Go 1.24.11.
50
+ - Release builds install the reviewed `uv.lock` versions of `build` and `twine`.
51
+ - Dependabot waits seven days before proposing version updates, and the CI zizmor
52
+ gate also audits `.github/dependabot.yml`.
53
+ - Added `SECURITY.md`: report vulnerabilities through GitHub private vulnerability
54
+ reporting.
55
+
56
+ ### Changed
57
+
58
+ - `mempalace_search` accepts `max_results` as an alias for `limit`. The default
59
+ remains five results; both values must agree when supplied together.
60
+ - Search similarity is now true cosine similarity (`1 - distance / 2`; 1.0 =
61
+ identical, about 0 = unrelated) in CLI `search`, `search_memories()`,
62
+ `code_search()`, MCP `mempalace_search` / `mempalace_code_search`, Layer 3
63
+ wake-up search, and `mempalace_check_duplicate`. Up to 1.14.2 these reported
64
+ `1 - distance` (`2 × cosine - 1`, often negative). `code_search`'s
65
+ `ranking.vector_distance` still reports the raw squared-L2 distance.
66
+ - Facts held only by the legacy global KG are copied into the configured palace's
67
+ KG once per legacy file state, recorded by
68
+ `~/.mempalace/knowledge_graph.sqlite3.adopted`. Facts the palace KG already
69
+ holds stay authoritative, the legacy database is never modified, other palaces
70
+ never receive its facts, and adoption does not block concurrent KG writers.
71
+ Delete the marker to adopt again.
72
+ - `restore FILE` without `--palace` writes the archived KG to the configured
73
+ palace's `<palace>/knowledge_graph.sqlite3`; `--kg-path` still overrides it.
74
+ - The package's Upstream URL now points at https://github.com/MemPalace/mempalace.
75
+
76
+ ### Fixed
77
+
78
+ - Invalid metadata filters keep the backend query error with current LanceDB
79
+ releases; they no longer report a healthy palace as damaged.
80
+ - Kubernetes Secret YAML with whitespace before a key's colon is excluded from
81
+ mining.
82
+ - MCP mining creates or adopts the knowledge graph only after acquiring the mine
83
+ lease and when a graph write is needed. Busy and unchanged requests preserve it.
84
+ - File context reports complete chunk totals and pagination beyond 10,000 chunks.
85
+ - MCP storage-open failures report health/repair recovery, and a cached knowledge
86
+ graph reports a missing palace through the structured palace error.
87
+ - Installation maintenance blocks palace writes from other threads while preserving
88
+ same-thread nesting and the supported migration fence.
89
+ - Backup publication preserves an archive created by a concurrent writer. Platforms
90
+ without hard-link publication report a safe failure instead of replacing it.
91
+ - Updater detection preserves pipx installations through aliased custom homes.
92
+ Installed-package checks retain the selected manager and validate recovery
93
+ commands against the installed launcher.
94
+ - `import` no longer silently drops distinct drawers. Its dedup squared an
95
+ already-squared distance (skipping anything above about cosine 0.78), compared
96
+ across every wing, and let records of one file dedup each other. It now skips a
97
+ record only when its id is already stored or repeats in the file, or when its
98
+ target wing already held a drawer with cosine ≥ 0.9 before the import.
99
+ - `mempalace_check_duplicate` and the `mempalace_add_drawer` guard now apply the
100
+ documented cosine ≥ 0.9 threshold; they previously matched only at about 0.95.
101
+ - The knowledge graph no longer splits between MCP and the CLI. `mine`,
102
+ `mine-all`, `mine --watch`, `export --with-kg`, `import`, `backup create`,
103
+ `restore`, `compress`, pre-optimize and pre-watch backups, MCP, and the watcher
104
+ all use the selected palace's KG. Since v1.13.5, MCP could not see CLI-mined
105
+ facts, and default backups and exports omitted MCP-written facts.
106
+ - `mine --full` (and MCP `mempalace_mine` with `full: true`) now removes drawers,
107
+ tiny-file entries, and KG facts of deleted or newly excluded files, as a plain
108
+ full-walk mine already did.
109
+ - The legacy Claude Code PreCompact hook no longer blocks compaction; it logs and
110
+ exits without a decision. The Save hook counts only human prompts toward its
111
+ interval, and both hooks mine `MEMPAL_DIR` with `--mode convos`.
112
+ - The documented rebuild validation uses `search --results 5`; `--limit` does not
113
+ exist, so the step always failed after the palace had been quarantined.
114
+ - The legacy ChromaDB bridge command pins Python 3.12
115
+ (`uvx --python 3.12 --from 'mempalace-code[chroma]==1.13.4' ...`), avoiding a
116
+ chroma-hnswlib source build on Python 3.13+.
117
+ - `mempalace-code wing-migration <action> --help` names `mempalace-code
118
+ wing-migration` in its usage line. The hash-pinned runner is unchanged, so open
119
+ 1.14.2 receipts and qualification reports stay valid.
120
+ - Bootstrap installs also link `~/.local/bin/mempalace-code-mcp`, and the
121
+ documented MCP launcher lookup resolves symlinks.
122
+ - `update apply` keeps the `custom-models` extra, and missing-extra messages print
123
+ one install command for the running installation.
124
+ - `fetch-model` reports the real cache size; a missing embedding cache makes
125
+ `mine` print one error naming `mempalace-code fetch-model` instead of a
126
+ traceback; `mempalace-code-mcp --help` shows its own name; an unreadable
127
+ `~/.mempalace/config.json` now produces a one-time warning instead of being
128
+ silently ignored.
129
+ - The Dependency Audit issue lists each advisory once, and a clean run on `main`
130
+ closes it. GitHub Release notes now carry the version's changelog section, and
131
+ recovery releases compare against the previous published release.
132
+ - The wheel and sdist include the upstream MemPalace MIT copyright and permission
133
+ notice in `NOTICE`.
134
+
135
+ ### Documentation
136
+
137
+ - Corrected install, verification, backup/restore, offline, update, hook, search,
138
+ usage-rule, benchmark, and wing-migration documentation against the current CLI
139
+ and code: `init` does not create a palace; uv has no `tool inject`;
140
+ `config.json` examples are valid JSON; search is an exact flat scan with
141
+ cosine-equivalent ranking and no ANN index; `unknown_wing_room` is the real
142
+ filter error; README and PyPI links are absolute.
143
+ - Documented the release runbook in execution order, Dependabot and pull-request
144
+ intake into the development trunk (never merged on public `main`), the CI gate
145
+ set for contributors (`.[dev,spellcheck,treesitter]`), and the legacy status of
146
+ the ChromaDB-based benchmark harnesses.
147
+ - Corrected historical changelog entries (v1.0.0, v1.1.x, v1.2.0, v1.10.1,
148
+ v1.13.2) and upstream issue links.
149
+ - Refreshed the reviewed upstream snapshot through `8c4865f7` (2026-09-26) and
150
+ aligned the README comparison, WHY_THIS_FORK, UPSTREAM_HARDENING, and
151
+ COMPARISON_GRAPHIFY with it.
152
+
153
+ ### Maintenance
154
+
155
+ - Pinned GitHub Actions to actions/checkout v7.0.1, actions/cache v6.1.0,
156
+ actions/setup-python v7.0.0, and actions/setup-go v7.0.0 by full commit SHA.
157
+ - Removed the inert project `.claude/settings.json` hooks, which read an
158
+ environment variable Claude Code never sets.
159
+ - `release_public_read.py --version-tags` lists tags in release order; the
160
+ code-intelligence packet generator uses the canonical model cache and fails on
161
+ an MCP exhibit error; `embed_ab_bench.py` uses the maintained query set and
162
+ fails its LongMemEval gate loudly; `scripts/nuke_wing.py` requires `--yes` and
163
+ uses the configured palace.
164
+
5
165
  ## v1.14.2 — 2026-09-21
6
166
 
7
167
  Recovery release for the accumulated v1.14.1 changes. The immutable v1.14.1
@@ -208,10 +368,12 @@ build and publication.
208
368
  - Synchronized package, lockfile, README badge, Agent Plugins manifest, and
209
369
  generated quality scorecards on version 1.13.3.
210
370
 
211
- ## v1.13.2 — 2026-08-11
371
+ ## v1.13.2 — 2026-08-11 (tagged, not published)
212
372
 
213
- Patch release for portable Agent Plugins packaging and collision-safe release
214
- identity checks.
373
+ The tag remains immutable public evidence. The live upstream-drift check stopped
374
+ publication before build, so no v1.13.2 package or GitHub Release exists. These
375
+ changes (portable Agent Plugins packaging and collision-safe release identity
376
+ checks) first shipped in v1.13.3.
215
377
 
216
378
  ### Added
217
379
 
@@ -487,7 +649,7 @@ Patch release for the local-first embedding path.
487
649
  search, and palace health.
488
650
  - Focused storage and CLI command suites plus the network-marked offline gate.
489
651
 
490
- ## v1.10.1 — 2026-05-24
652
+ ## v1.10.1 — 2026-05-26
491
653
 
492
654
  Patch release after the v1.10.0 publish. Focus: real CLI/MCP smoke fixes,
493
655
  read-only no-embedder paths, and release-check tooling.
@@ -953,6 +1115,11 @@ Add `mempalace_explain_subsystem` MCP tool: combines semantic search with KG tra
953
1115
 
954
1116
  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
1117
 
1118
+ ## v1.2.0 — 2026-04-17
1119
+
1120
+ Published release for the dated entries below, from SKILLS-HOOKS through
1121
+ FIX-LANCE-CORRUPT.
1122
+
956
1123
  ## 2026-04-17 · SKILLS-HOOKS
957
1124
 
958
1125
  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 +1164,19 @@ Auto-backup palace before risky operations: `safe_optimize` triggers a backup by
997
1164
 
998
1165
  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
1166
 
1167
+ ## v1.1.1 — 2026-04-14
1168
+
1169
+ Published patch release for the MINE-DEVOPS-INFRA entry below.
1170
+
1000
1171
  ## 2026-04-14 · MINE-DEVOPS-INFRA
1001
1172
 
1002
1173
  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
1174
 
1175
+ ## v1.1.0 — 2026-04-14
1176
+
1177
+ Published release for the dated entries below, from
1178
+ STORE-CHROMA-DELETE-WING-LIMIT through CODE-TREESITTER-INFRA.
1179
+
1004
1180
  ## 2026-04-14 · STORE-CHROMA-DELETE-WING-LIMIT
1005
1181
 
1006
1182
  `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 +1237,11 @@ Tree-sitter AST-aware Python chunking: extracts function/class/method boundaries
1061
1237
 
1062
1238
  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
1239
 
1064
- ## v1.0.0 — 2026-04-12
1240
+ ## v1.0.0 — 2026-04-13
1065
1241
 
1066
1242
  First public release of **mempalace-code**, a code-first fork of
1067
- [milla-jovovich/mempalace](https://github.com/milla-jovovich/mempalace).
1243
+ [MemPalace/mempalace](https://github.com/MemPalace/mempalace) (then
1244
+ `milla-jovovich/mempalace`).
1068
1245
 
1069
1246
  ### Storage — LanceDB rewrite
1070
1247
 
@@ -1125,9 +1302,9 @@ First public release of **mempalace-code**, a code-first fork of
1125
1302
 
1126
1303
  ### Upstream issues addressed
1127
1304
 
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.
1305
+ - [#469](https://github.com/MemPalace/mempalace/issues/469) — ChromaDB version-cliff data deletion → LanceDB, no version-cliff risk.
1306
+ - [#524](https://github.com/MemPalace/mempalace/issues/524) — Silent ONNX model download → explicit `mempalace init` + `fetch-model`.
1307
+ - [#27](https://github.com/MemPalace/mempalace/issues/27) — Unverifiable 100% R@5 claim → removed. AAAK "lossless" claim → labeled lossy.
1131
1308
 
1132
1309
  ### License
1133
1310