mempalace-code 1.10.3__tar.gz → 1.11.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 (238) hide show
  1. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/release/SKILL.md +46 -10
  2. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/verify/INSTRUCTIONS.md +10 -0
  3. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.github/workflows/ci.yml +27 -2
  4. mempalace_code-1.11.0/.github/workflows/dependency-audit.yml +86 -0
  5. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.gitignore +1 -0
  6. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/CHANGELOG.md +90 -1
  7. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/PKG-INFO +46 -2
  8. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/README.md +45 -1
  9. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/BACKLOG-archived.yaml +65 -0
  10. mempalace_code-1.11.0/docs/BACKLOG.yaml +196 -0
  11. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/BACKUP_RESTORE.md +28 -0
  12. mempalace_code-1.11.0/docs/DEPENDENCY_UPGRADE_GATE.md +265 -0
  13. mempalace_code-1.11.0/docs/demo/code-intelligence-packet.json +266 -0
  14. mempalace_code-1.11.0/docs/demo/code-intelligence-packet.md +1535 -0
  15. mempalace_code-1.11.0/docs/dependency-audit-allowlist.json +4 -0
  16. mempalace_code-1.11.0/docs/quality/README.md +113 -0
  17. mempalace_code-1.11.0/docs/quality/scorecard.json +195 -0
  18. mempalace_code-1.11.0/docs/quality/scorecard.md +97 -0
  19. mempalace_code-1.11.0/docs/quality/workflow-review-protocol.md +72 -0
  20. mempalace_code-1.11.0/docs/task-evidence/AUTOPILOT-DEMO-CODE-INTELLIGENCE-GOLDEN-PACKET-review.md +68 -0
  21. mempalace_code-1.11.0/docs/task-evidence/AUTOPILOT-DEMO-CODE-INTELLIGENCE-PACKET-ACCEPTANCE-FIX-review.md +44 -0
  22. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/examples/HOOKS_TUTORIAL.md +2 -2
  23. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/examples/gemini_cli_setup.md +6 -29
  24. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/hooks/README.md +4 -4
  25. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/hooks/mempal_precompact_hook.sh +6 -12
  26. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/hooks/mempal_save_hook.sh +4 -10
  27. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli.py +6 -2
  28. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/backup_restore.py +11 -2
  29. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/export_import.py +26 -1
  30. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/ingest.py +17 -0
  31. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/maintenance.py +22 -2
  32. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/model.py +5 -1
  33. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/query.py +42 -10
  34. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/watch.py +56 -1
  35. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/disk_budget.py +7 -6
  36. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/entity_detector.py +19 -2
  37. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/onboarding.py +1 -1
  38. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/room_detector_local.py +5 -1
  39. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/searcher.py +22 -4
  40. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/watcher.py +107 -8
  41. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/pyproject.toml +4 -37
  42. mempalace_code-1.11.0/pyrightconfig.strict.json +16 -0
  43. mempalace_code-1.11.0/scripts/dependency_upgrade_gate.py +1230 -0
  44. mempalace_code-1.11.0/scripts/gen_code_intelligence_packet.py +1280 -0
  45. mempalace_code-1.11.0/scripts/public_safety_scan.py +249 -0
  46. mempalace_code-1.11.0/scripts/quality_scorecard.py +696 -0
  47. mempalace_code-1.11.0/scripts/release_status_gate.py +606 -0
  48. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_backup_cli.py +2 -0
  49. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_cli.py +187 -8
  50. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_cli_command_modules.py +18 -2
  51. mempalace_code-1.11.0/tests/test_code_intelligence_packet.py +678 -0
  52. mempalace_code-1.11.0/tests/test_dependency_upgrade_gate.py +1416 -0
  53. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_entity_detector.py +30 -1
  54. mempalace_code-1.11.0/tests/test_offline.py +507 -0
  55. mempalace_code-1.11.0/tests/test_public_safety_scan.py +72 -0
  56. mempalace_code-1.11.0/tests/test_quality_scorecard.py +489 -0
  57. mempalace_code-1.11.0/tests/test_release_status_gate.py +666 -0
  58. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_searcher.py +41 -5
  59. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_type_suppressions.py +28 -3
  60. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_watcher.py +411 -4
  61. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/uv.lock +1 -1
  62. mempalace_code-1.10.3/.verify-state +0 -1
  63. mempalace_code-1.10.3/docs/BACKLOG.yaml +0 -170
  64. mempalace_code-1.10.3/tests/test_offline.py +0 -87
  65. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/prompts/codex-hardening-review.md +0 -0
  66. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/prompts/codex-plan-review.md +0 -0
  67. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/settings.json +0 -0
  68. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/_shared/commit-checkpoint.md +0 -0
  69. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/_shared/mode-classification.md +0 -0
  70. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/_shared/task-state.md +0 -0
  71. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/bench/SKILL.md +0 -0
  72. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/doc-refresh/INSTRUCTIONS.md +0 -0
  73. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/doc-refresh/SKILL.md +0 -0
  74. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/entropy-gc/INSTRUCTIONS.md +0 -0
  75. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/entropy-gc/SKILL.md +0 -0
  76. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/mine/SKILL.md +0 -0
  77. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/palace-health/SKILL.md +0 -0
  78. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/release-prep/SKILL.md +0 -0
  79. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/ship/INSTRUCTIONS.md +0 -0
  80. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/ship/SKILL.md +0 -0
  81. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/start/INSTRUCTIONS.md +0 -0
  82. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/start/SKILL.md +0 -0
  83. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/status/SKILL.md +0 -0
  84. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/task-hardening/INSTRUCTIONS.md +0 -0
  85. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/task-hardening/SKILL.md +0 -0
  86. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/task-plan/INSTRUCTIONS.md +0 -0
  87. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/task-plan/SKILL.md +0 -0
  88. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.claude/skills/verify/SKILL.md +0 -0
  89. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  90. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  91. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  92. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.github/workflows/dotnet-bench.yml +0 -0
  93. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.github/workflows/publish.yml +0 -0
  94. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/.pre-commit-config.yaml +0 -0
  95. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/AGENTS.md +0 -0
  96. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/CLAUDE.md +0 -0
  97. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/CONTRIBUTING.md +0 -0
  98. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/LICENSE +0 -0
  99. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/NOTICE +0 -0
  100. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/assets/mempalace_banner.jpg +0 -0
  101. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/BENCHMARKS.md +0 -0
  102. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/HYBRID_MODE.md +0 -0
  103. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/README.md +0 -0
  104. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/code_retrieval_bench.py +0 -0
  105. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/convomem_bench.py +0 -0
  106. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/data/code_retrieval_queries.json +0 -0
  107. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/dotnet_bench.py +0 -0
  108. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/embed_ab_bench.py +0 -0
  109. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/locomo_bench.py +0 -0
  110. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/longmemeval_bench.py +0 -0
  111. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/membench_bench.py +0 -0
  112. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/results_embed_ab_2026-04-09.json +0 -0
  113. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/results_token_delta_mempalace.json +0 -0
  114. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/benchmarks/token_delta_bench.py +0 -0
  115. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/AGENT_INSTALL.md +0 -0
  116. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/BENCH_TOKEN_DELTA.md +0 -0
  117. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/COMPARISON_GRAPHIFY.md +0 -0
  118. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/HOW_SEARCH_WORKS.md +0 -0
  119. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/LLM_USAGE_RULES.md +0 -0
  120. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/OFFLINE_USAGE.md +0 -0
  121. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/UPSTREAM_HARDENING.md +0 -0
  122. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/WHY_THIS_FORK.md +0 -0
  123. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/docs/refactoring/REFAC-MINER-MODULES/progress.md +0 -0
  124. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/examples/basic_mining.py +0 -0
  125. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/examples/convo_import.py +0 -0
  126. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/examples/mcp_setup.md +0 -0
  127. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace/__init__.py +0 -0
  128. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace/mcp_server.py +0 -0
  129. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/README.md +0 -0
  130. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/__init__.py +0 -0
  131. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/__main__.py +0 -0
  132. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/_chroma_store.py +0 -0
  133. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/_stdio.py +0 -0
  134. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/architecture.py +0 -0
  135. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/backup.py +0 -0
  136. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/__init__.py +0 -0
  137. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/alias.py +0 -0
  138. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/common.py +0 -0
  139. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/diary.py +0 -0
  140. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/preflight.py +0 -0
  141. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/cli_commands/version_check.py +0 -0
  142. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/config.py +0 -0
  143. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/convo_miner.py +0 -0
  144. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/dialect.py +0 -0
  145. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/entity_registry.py +0 -0
  146. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/export.py +0 -0
  147. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/general_extractor.py +0 -0
  148. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/knowledge_graph.py +0 -0
  149. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/language_catalog.py +0 -0
  150. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/layers.py +0 -0
  151. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/__init__.py +0 -0
  152. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/dispatch.py +0 -0
  153. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/protocol_text.py +0 -0
  154. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/registry.py +0 -0
  155. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/runtime.py +0 -0
  156. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/__init__.py +0 -0
  157. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/architecture.py +0 -0
  158. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/diary.py +0 -0
  159. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/graph.py +0 -0
  160. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/kg.py +0 -0
  161. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/read.py +0 -0
  162. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/search.py +0 -0
  163. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/write.py +0 -0
  164. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp_server.py +0 -0
  165. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mcp_tool_profiles.py +0 -0
  166. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/migrate.py +0 -0
  167. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/miner.py +0 -0
  168. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mining/__init__.py +0 -0
  169. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mining/batching.py +0 -0
  170. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mining/chunkers.py +0 -0
  171. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mining/kg_extract.py +0 -0
  172. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mining/languages.py +0 -0
  173. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mining/orchestrator.py +0 -0
  174. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mining/projects.py +0 -0
  175. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mining/scanner.py +0 -0
  176. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mining/symbols.py +0 -0
  177. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/mirror_preflight.py +0 -0
  178. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/normalize.py +0 -0
  179. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/palace_graph.py +0 -0
  180. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/py.typed +0 -0
  181. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/reader.py +0 -0
  182. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/retrieval_rerank.py +0 -0
  183. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/search_reranker.py +0 -0
  184. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/spellcheck.py +0 -0
  185. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/split_mega_files.py +0 -0
  186. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/storage.py +0 -0
  187. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/treesitter.py +0 -0
  188. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/version.py +0 -0
  189. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/mempalace_code/version_check.py +0 -0
  190. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/scripts/bootstrap.sh +0 -0
  191. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/scripts/codex-review.sh +0 -0
  192. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/scripts/migrate_storage_smoke.py +0 -0
  193. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/scripts/nuke_wing.py +0 -0
  194. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/conftest.py +0 -0
  195. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/fixtures/unreasoned_suppression.py +0 -0
  196. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_architecture_extraction.py +0 -0
  197. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_backup.py +0 -0
  198. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_chroma_compat.py +0 -0
  199. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_chroma_import_errors.py +0 -0
  200. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_chunking.py +0 -0
  201. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_code_retrieval_bench.py +0 -0
  202. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_config.py +0 -0
  203. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_convo_miner.py +0 -0
  204. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_dialect.py +0 -0
  205. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_disk_budget.py +0 -0
  206. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_dotnet_bench.py +0 -0
  207. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_dotnet_config.py +0 -0
  208. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_e2e.py +0 -0
  209. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_embed_ab_bench.py +0 -0
  210. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_entity_registry.py +0 -0
  211. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_export.py +0 -0
  212. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_general_extractor.py +0 -0
  213. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_kg_extract.py +0 -0
  214. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_knowledge_graph.py +0 -0
  215. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_lang_detect.py +0 -0
  216. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_language_catalog.py +0 -0
  217. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_layers.py +0 -0
  218. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_mcp_registry.py +0 -0
  219. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_mcp_server.py +0 -0
  220. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_mcp_tool_profiles.py +0 -0
  221. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_migrate.py +0 -0
  222. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_migrate_storage_smoke.py +0 -0
  223. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_miner.py +0 -0
  224. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_miner_modules.py +0 -0
  225. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_normalize.py +0 -0
  226. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_packaging_namespace.py +0 -0
  227. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_palace_graph.py +0 -0
  228. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_reader.py +0 -0
  229. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_retrieval_rerank.py +0 -0
  230. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_search_reranker.py +0 -0
  231. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_split_mega_files.py +0 -0
  232. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_stdio.py +0 -0
  233. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_storage.py +0 -0
  234. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_storage_lance.py +0 -0
  235. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_symbol_extract.py +0 -0
  236. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_treesitter.py +0 -0
  237. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_version_check.py +0 -0
  238. {mempalace_code-1.10.3 → mempalace_code-1.11.0}/tests/test_version_consistency.py +0 -0
@@ -111,12 +111,55 @@ unavailable and the user explicitly approves the fallback.
111
111
 
112
112
  ### Step 6: Verify Hosted Status
113
113
 
114
- Check all public surfaces separately:
114
+ Run the release-status gate first. It checks every public publication surface
115
+ and exits non-zero when any blocker remains:
115
116
 
116
117
  ```bash
118
+ python scripts/release_status_gate.py --version X.Y.Z \
119
+ --repo rergards/mempalace-code \
120
+ --remote publish \
121
+ --branch main
122
+ ```
123
+
124
+ The gate checks:
125
+ 1. publish remote git tag (`v X.Y.Z` on the `publish` remote)
126
+ 2. branch Tests workflow — most recent completed run on `main` must be green
127
+ 3. Publish to PyPI workflow — most recent completed run must be green
128
+ 4. GitHub Release metadata — non-draft, non-prerelease, `isLatest=true`
129
+ 5. PyPI JSON — `info.version == X.Y.Z` and both wheel and sdist present
130
+ 6. Install smoke — `pip install --no-cache-dir mempalace-code==X.Y.Z` in a disposable venv
131
+
132
+ A release is **not shipped** when any blocker remains. Report the gate's
133
+ `Remaining blockers` list verbatim in the release summary and do not use
134
+ "shipped" or "latest" language until the gate exits 0.
135
+
136
+ For machine-readable status (e.g. Autopilot gating):
137
+
138
+ ```bash
139
+ python scripts/release_status_gate.py --version X.Y.Z --json
140
+ ```
141
+
142
+ **Diagnostic-only mode** (skips install smoke; cannot be labeled fully shipped):
143
+
144
+ ```bash
145
+ python scripts/release_status_gate.py --version X.Y.Z --skip-smoke
146
+ ```
147
+
148
+ If the gate finds blockers, investigate the specific surface that failed.
149
+ Manual fallback diagnostics for individual surfaces:
150
+
151
+ ```bash
152
+ # Tag
153
+ git ls-remote --tags publish "refs/tags/vX.Y.Z"
154
+
155
+ # Workflows
117
156
  gh run list --repo rergards/mempalace-code --branch main --workflow Tests --limit 5
118
157
  gh run list --repo rergards/mempalace-code --workflow "Publish to PyPI" --limit 5
158
+
159
+ # GitHub Release
119
160
  gh release view vX.Y.Z --repo rergards/mempalace-code
161
+
162
+ # PyPI JSON
120
163
  python - <<'PY'
121
164
  import json, urllib.request
122
165
  version = "X.Y.Z"
@@ -126,10 +169,6 @@ assert data["info"]["version"] == version
126
169
  PY
127
170
  ```
128
171
 
129
- If the branch Tests run is red, the tag publish succeeded but the release is not
130
- clean. Fix and publish a follow-up patch before creating or advertising the
131
- GitHub Release as latest.
132
-
133
172
  If PyPI is visible but `gh release view` reports no release, create the GitHub
134
173
  Release only after hosted Tests are green:
135
174
 
@@ -151,11 +190,8 @@ tokens, hostnames, or incident-only details.
151
190
  Version: X.Y.Z
152
191
  Tag: vX.Y.Z
153
192
  Pushed to publish: [yes/no]
154
- Hosted Tests: [pass/fail/not-run]
155
- Publish to PyPI: [pass/fail/not-run]
156
- PyPI visible: [yes/no]
157
- GitHub Release: [created/existing/missing]
193
+ Release status gate: [passed/failed]
158
194
 
159
195
  Remaining blockers:
160
- - [none or exact blocker]
196
+ - [none or exact blocker from release_status_gate.py output]
161
197
  ```
@@ -49,6 +49,16 @@ Run in parallel:
49
49
  | Format | `ruff format --check mempalace_code/ tests/ scripts/` | 30s |
50
50
  | Tests | `python -m pytest tests/ -x -q -m "not needs_network"` | 120s |
51
51
  | Typecheck | `python -m pyright --pythonpath "$(python -c 'import sys; print(sys.executable)')"` | 120s |
52
+ | Strict slice typecheck | `python -m pyright -p pyrightconfig.strict.json` | 60s |
53
+ | Public safety | `python scripts/public_safety_scan.py --tracked --staged` | 30s |
54
+ | Scorecard | `python scripts/quality_scorecard.py --check` | 30s |
55
+
56
+ The scorecard check is stdlib-only (no install, no network) and validates the
57
+ quality scorecard's shape, determinism, public-safety, and committed artifact
58
+ freshness. The public-safety scan checks tracked and staged repository files for
59
+ private local paths, secret-like tokens, and local-only raw artifacts. After a
60
+ quality change lands, regenerate the committed artifacts with
61
+ `python scripts/quality_scorecard.py --write` (see `docs/quality/README.md`).
52
62
 
53
63
  ### If storage changed — add these
54
64
 
@@ -59,8 +59,12 @@ jobs:
59
59
  pyproject.toml
60
60
  uv.lock
61
61
  - run: pip install ruff
62
- - run: ruff check mempalace_code/ tests/
63
- - run: ruff format --check mempalace_code/ tests/
62
+ - run: ruff check mempalace_code/ tests/ scripts/
63
+ - run: ruff format --check mempalace_code/ tests/ scripts/
64
+ - name: Public-safety scan (tracked + staged)
65
+ run: python scripts/public_safety_scan.py --tracked --staged
66
+ - name: Quality scorecard (shape + determinism + public-safety)
67
+ run: python scripts/quality_scorecard.py --check
64
68
 
65
69
  typecheck:
66
70
  runs-on: ubuntu-latest
@@ -76,6 +80,27 @@ jobs:
76
80
  - run: pip install -e ".[dev,chroma,spellcheck,treesitter]"
77
81
  - name: Pyright typecheck
78
82
  run: python -m pyright --pythonpath "$(python -c 'import sys; print(sys.executable)')"
83
+ - name: Pyright strict slice
84
+ run: python -m pyright -p pyrightconfig.strict.json
85
+
86
+ dependency-upgrade-gate:
87
+ runs-on: ubuntu-latest
88
+ if: github.event_name != 'workflow_dispatch'
89
+ steps:
90
+ - uses: actions/checkout@v5
91
+ with:
92
+ fetch-depth: 0
93
+ - uses: actions/setup-python@v6
94
+ with:
95
+ python-version: "3.13"
96
+ cache: pip
97
+ cache-dependency-path: |
98
+ pyproject.toml
99
+ uv.lock
100
+ - name: Dependency upgrade gate
101
+ run: |
102
+ python scripts/dependency_upgrade_gate.py ci-check \
103
+ --base-ref "${{ github.event_name == 'pull_request' && github.event.pull_request.base.sha || github.event.before }}"
79
104
 
80
105
  model-tests:
81
106
  runs-on: ubuntu-latest
@@ -0,0 +1,86 @@
1
+ name: Dependency Audit
2
+
3
+ on:
4
+ schedule:
5
+ - cron: "0 6 * * 1" # Weekly on Monday at 06:00 UTC
6
+ workflow_dispatch:
7
+
8
+ permissions:
9
+ contents: read
10
+ issues: write
11
+
12
+ jobs:
13
+ current-audit:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v5
17
+
18
+ - uses: actions/setup-python@v6
19
+ with:
20
+ python-version: "3.13"
21
+ cache: pip
22
+ cache-dependency-path: |
23
+ pyproject.toml
24
+ uv.lock
25
+
26
+ - name: Install audit dependencies
27
+ run: pip install pip-audit
28
+
29
+ - name: Run current dependency audit
30
+ id: audit
31
+ run: |
32
+ set +e
33
+ python scripts/dependency_upgrade_gate.py current-audit \
34
+ --out-dir dependency-audit-output
35
+ rc=$?
36
+ echo "audit_exit=$rc" >> "$GITHUB_OUTPUT"
37
+ exit $rc
38
+ continue-on-error: true
39
+
40
+ - name: Upload audit artifacts
41
+ if: always()
42
+ uses: actions/upload-artifact@v4
43
+ with:
44
+ name: dependency-audit-report
45
+ path: dependency-audit-output/
46
+ if-no-files-found: warn
47
+
48
+ - name: Create or update dependency-audit issue
49
+ if: steps.audit.outcome == 'failure'
50
+ env:
51
+ GH_TOKEN: ${{ github.token }}
52
+ run: |
53
+ ISSUE_TITLE="[dependency-audit] current dependency audit findings"
54
+ ISSUE_BODY_FILE="dependency-audit-output/current-audit-issue-body.md"
55
+ ISSUE_LABEL="dependency-audit"
56
+
57
+ if [ ! -f "$ISSUE_BODY_FILE" ]; then
58
+ echo "No issue body file found; skipping issue creation." >&2
59
+ exit 0
60
+ fi
61
+
62
+ # Find existing open issue with the stable title
63
+ EXISTING=$(gh issue list \
64
+ --state open \
65
+ --search "\"$ISSUE_TITLE\" in:title" \
66
+ --json number \
67
+ --jq '.[0].number // empty' 2>/dev/null || true)
68
+
69
+ if [ -n "$EXISTING" ]; then
70
+ gh issue edit "$EXISTING" --body-file "$ISSUE_BODY_FILE"
71
+ echo "Updated existing issue #$EXISTING"
72
+ else
73
+ gh issue create \
74
+ --title "$ISSUE_TITLE" \
75
+ --body-file "$ISSUE_BODY_FILE" \
76
+ --label "$ISSUE_LABEL" 2>/dev/null || \
77
+ gh issue create \
78
+ --title "$ISSUE_TITLE" \
79
+ --body-file "$ISSUE_BODY_FILE"
80
+ fi
81
+
82
+ - name: Fail workflow on audit findings
83
+ if: steps.audit.outcome == 'failure'
84
+ run: |
85
+ echo "Dependency audit found actionable findings. See uploaded artifact and issue."
86
+ exit 1
@@ -23,6 +23,7 @@ palace/
23
23
  .venv/
24
24
  venv/
25
25
  .env
26
+ .verify-state
26
27
 
27
28
  # IDE
28
29
  .idea/
@@ -2,7 +2,96 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
- No changes yet.
5
+ ## v1.11.0 — 2026-06-18
6
+
7
+ Minor release for release-readiness gates, dependency audit automation, offline
8
+ search guards, watcher reliability, and clearer CLI recovery guidance.
9
+
10
+ ### Added
11
+
12
+ - Code-intelligence demo packet with deterministic public exhibits: generated fixture
13
+ project mined, searched, and read via real CLI with exact commands and normalized
14
+ output captured in `docs/demo/code-intelligence-packet.{md,json}`.
15
+ - Generation script `scripts/gen_code_intelligence_packet.py` with `--check` mode
16
+ for drift detection and public-safety validation; wired into `/verify` and CI.
17
+ - Comprehensive test suite for packet generation with coverage for output
18
+ normalization, known-answer retrieval assertions, and artifact cleanup.
19
+ - Dependency upgrade/audit gate covering proposed dependency changes, current
20
+ resolver audit checks, CI integration, allowlist handling, and documentation.
21
+ - Weekly scheduled dependency audit workflow for the current dependency graph.
22
+ - Six-surface release publication status gate covering publish remote tags,
23
+ branch tests, PyPI publish workflow status, GitHub Release metadata, PyPI JSON,
24
+ and fresh install smoke.
25
+ - Watcher startup readiness markers for `watch_and_mine` and `watch_all`, making
26
+ daemon initialization distinguishable from stale post-recovery log entries.
27
+
28
+ ### Changed
29
+
30
+ - Human-facing CLI failures now prefer explicit `Next:` recovery guidance across
31
+ search, read, export, backup/restore, watch status, mine-all, compress, health,
32
+ cleanup, and model-fetch flows.
33
+ - Pipe-sensitive commands keep machine-readable output clean: `read` failures and
34
+ `export --out -` diagnostics go to stderr, and generated backup/watch schedule
35
+ snippets remain on stdout while install hints go to stderr.
36
+ - Legacy Claude Code hook prompts now give concise MCP save contracts instead of
37
+ broad "save everything" instructions, while Codex/Gemini docs point to MCP +
38
+ canonical usage rules.
39
+
40
+ ### Fixed
41
+
42
+ - `watch_and_mine` and `watch_all` now refuse uninitialized roots before starting
43
+ macOS FSEvents observers, preventing runaway watcher churn on broad local roots.
44
+ - Cached Hugging Face model fetch and search paths are guarded by subprocess-level
45
+ offline regressions that catch token warnings or metadata network calls.
46
+ - `watch status` now reports the top-level launchd service state instead of
47
+ nested coalition state from `launchctl print`.
48
+ - Release status gate no longer requests unsupported `gh release view --json
49
+ isLatest`; latest release is checked through `gh release list`.
50
+ - Release install smoke subprocesses are bounded by a timeout so public-surface
51
+ diagnostics cannot hang indefinitely on resolver/network stalls.
52
+ - Release gate token sanitization avoids self-matching scanner literals while
53
+ still redacting GitHub and PyPI token-shaped values from diagnostics.
54
+ - `search --palace <missing>` now fails with a clear stderr diagnostic instead
55
+ of reporting an empty result set.
56
+
57
+ ### Removed
58
+
59
+ - Ignored `.tasks/` and `docs/audits/` Autopilot artifacts are no longer tracked
60
+ in the public tree.
61
+
62
+ ## v1.10.4 — 2026-06-06
63
+
64
+ Patch release for public quality/demo gates after v1.10.3.
65
+
66
+ ### Added
67
+
68
+ - Deterministic public quality scorecard artifacts under `docs/quality/`, with
69
+ Markdown and JSON output generated by `scripts/quality_scorecard.py`.
70
+ - Repo-wide public-safety scanner for tracked and staged files:
71
+ `python scripts/public_safety_scan.py --tracked --staged`.
72
+ - Public-safe multi-agent workflow review protocol for future quality work.
73
+ - Strict Pyright slice config for stable low-level modules, gated in CI and
74
+ `/verify`.
75
+ - Detailed Autopilot demo backlog items for dependency audit CI, release status
76
+ checks, committed-tree public-safety scanning, scorecard metric expansion,
77
+ architecture guards, CLI/MCP contracts, docs drift guards, and workflow
78
+ effectiveness checks.
79
+
80
+ ### Changed
81
+
82
+ - `/verify` and CI now run public-safety, scorecard freshness, and strict-slice
83
+ typecheck gates in addition to lint, format, tests, and basic Pyright.
84
+ - Ruff global ignores were reduced from 33 to 3; older package/test debt remains
85
+ scoped to per-file ignores so new scripts inherit stricter rules.
86
+ - Suppression scanning now uses Python tokenization so strings/docstrings that
87
+ mention `# type: ignore` do not count as live suppressions.
88
+ - `scripts/quality_scorecard.py --check` now fails when committed scorecard
89
+ artifacts are stale.
90
+
91
+ ### Removed
92
+
93
+ - `.verify-state` is no longer tracked and is ignored as a local-only verification
94
+ baseline.
6
95
 
7
96
  ## v1.10.3 — 2026-06-05
8
97
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mempalace-code
3
- Version: 1.10.3
3
+ Version: 1.11.0
4
4
  Summary: Developer memory tool — mine codebases and conversations into a LanceDB-backed searchable palace. No API key required.
5
5
  Project-URL: Homepage, https://github.com/rergards/mempalace-code
6
6
  Project-URL: Repository, https://github.com/rergards/mempalace-code
@@ -335,6 +335,50 @@ launchctl unload ~/Library/LaunchAgents/com.mempalace.watch.plist # stop until
335
335
  launchctl load ~/Library/LaunchAgents/com.mempalace.watch.plist # re-enable after freeing space
336
336
  ```
337
337
 
338
+ **Diagnosing and stopping a crash-looping job:**
339
+
340
+ If the daemon was pointed at an uninitialized directory it will crash-loop under `KeepAlive`. Confirm with:
341
+
342
+ ```bash
343
+ mempalace-code watch ~/projects/ status # shows state, runs count, and last exit code
344
+ ```
345
+
346
+ Stop and optionally remove it:
347
+
348
+ ```bash
349
+ # macOS 10.11+ preferred — unregisters the job immediately:
350
+ launchctl bootout gui/$(id -u)/com.mempalace.watch
351
+
352
+ # Older macOS / alternative:
353
+ launchctl unload ~/Library/LaunchAgents/com.mempalace.watch.plist
354
+
355
+ # Remove permanently (re-install after fixing the watch root):
356
+ rm ~/Library/LaunchAgents/com.mempalace.watch.plist
357
+ ```
358
+
359
+ **Daemon health check:**
360
+
361
+ The daemon emits `WATCH_RUN` lines at each startup transition so the appended log at `/tmp/mempalace-watch.log` can be searched to confirm the latest startup reached the watch loop. Use this sequence to diagnose daemon state:
362
+
363
+ ```bash
364
+ # 1. Process state — is the daemon running?
365
+ launchctl print gui/$(id -u)/com.mempalace.watch
366
+ # Or use the watch status shortcut:
367
+ mempalace-code watch ~/projects/ status
368
+
369
+ # 2. Palace storage health
370
+ mempalace-code --palace ~/.mempalace/palace health
371
+
372
+ # 3. Find the latest startup that reached watch-ready
373
+ grep -a 'state=watch-ready' /tmp/mempalace-watch.log | tail -1
374
+ # Example output: WATCH_RUN run_id=20260616T120102Z-p12345 state=watch-ready
375
+
376
+ # 4. Filter that run's context (replace the run_id from step 3):
377
+ grep -a 'run_id=20260616T120102Z-p12345' /tmp/mempalace-watch.log
378
+ ```
379
+
380
+ A log file may contain `WATCH_RUN` lines from older runs that exited with disk-budget or backup failures. The `run_id` on the latest `state=watch-ready` line identifies the current healthy startup — lines from prior runs with different `run_id` values are stale and can be ignored. If no `watch-ready` line appears, check the most recent `run-started` line and the state that followed it (for example `state=pre-watch-backup-failed` or `state=initial-mine-skipped reason=disk-budget`).
381
+
338
382
  Configure the threshold via environment variable or `~/.mempalace/config.json`:
339
383
 
340
384
  ```bash
@@ -1002,7 +1046,7 @@ python -m pyright --pythonpath "$(python -c 'import sys; print(sys.executable)')
1002
1046
  Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
1003
1047
 
1004
1048
  <!-- Link Definitions -->
1005
- [version-shield]: https://img.shields.io/badge/version-1.10.2-4dc9f6?style=flat-square&labelColor=0a0e14
1049
+ [version-shield]: https://img.shields.io/badge/version-1.11.0-4dc9f6?style=flat-square&labelColor=0a0e14
1006
1050
  [release-link]: https://github.com/rergards/mempalace-code/releases
1007
1051
  [python-shield]: https://img.shields.io/badge/python-3.11+-7dd8f8?style=flat-square&labelColor=0a0e14&logo=python&logoColor=7dd8f8
1008
1052
  [python-link]: https://www.python.org/
@@ -286,6 +286,50 @@ launchctl unload ~/Library/LaunchAgents/com.mempalace.watch.plist # stop until
286
286
  launchctl load ~/Library/LaunchAgents/com.mempalace.watch.plist # re-enable after freeing space
287
287
  ```
288
288
 
289
+ **Diagnosing and stopping a crash-looping job:**
290
+
291
+ If the daemon was pointed at an uninitialized directory it will crash-loop under `KeepAlive`. Confirm with:
292
+
293
+ ```bash
294
+ mempalace-code watch ~/projects/ status # shows state, runs count, and last exit code
295
+ ```
296
+
297
+ Stop and optionally remove it:
298
+
299
+ ```bash
300
+ # macOS 10.11+ preferred — unregisters the job immediately:
301
+ launchctl bootout gui/$(id -u)/com.mempalace.watch
302
+
303
+ # Older macOS / alternative:
304
+ launchctl unload ~/Library/LaunchAgents/com.mempalace.watch.plist
305
+
306
+ # Remove permanently (re-install after fixing the watch root):
307
+ rm ~/Library/LaunchAgents/com.mempalace.watch.plist
308
+ ```
309
+
310
+ **Daemon health check:**
311
+
312
+ The daemon emits `WATCH_RUN` lines at each startup transition so the appended log at `/tmp/mempalace-watch.log` can be searched to confirm the latest startup reached the watch loop. Use this sequence to diagnose daemon state:
313
+
314
+ ```bash
315
+ # 1. Process state — is the daemon running?
316
+ launchctl print gui/$(id -u)/com.mempalace.watch
317
+ # Or use the watch status shortcut:
318
+ mempalace-code watch ~/projects/ status
319
+
320
+ # 2. Palace storage health
321
+ mempalace-code --palace ~/.mempalace/palace health
322
+
323
+ # 3. Find the latest startup that reached watch-ready
324
+ grep -a 'state=watch-ready' /tmp/mempalace-watch.log | tail -1
325
+ # Example output: WATCH_RUN run_id=20260616T120102Z-p12345 state=watch-ready
326
+
327
+ # 4. Filter that run's context (replace the run_id from step 3):
328
+ grep -a 'run_id=20260616T120102Z-p12345' /tmp/mempalace-watch.log
329
+ ```
330
+
331
+ A log file may contain `WATCH_RUN` lines from older runs that exited with disk-budget or backup failures. The `run_id` on the latest `state=watch-ready` line identifies the current healthy startup — lines from prior runs with different `run_id` values are stale and can be ignored. If no `watch-ready` line appears, check the most recent `run-started` line and the state that followed it (for example `state=pre-watch-backup-failed` or `state=initial-mine-skipped reason=disk-budget`).
332
+
289
333
  Configure the threshold via environment variable or `~/.mempalace/config.json`:
290
334
 
291
335
  ```bash
@@ -953,7 +997,7 @@ python -m pyright --pythonpath "$(python -c 'import sys; print(sys.executable)')
953
997
  Apache 2.0 — see [LICENSE](LICENSE) and [NOTICE](NOTICE).
954
998
 
955
999
  <!-- Link Definitions -->
956
- [version-shield]: https://img.shields.io/badge/version-1.10.2-4dc9f6?style=flat-square&labelColor=0a0e14
1000
+ [version-shield]: https://img.shields.io/badge/version-1.11.0-4dc9f6?style=flat-square&labelColor=0a0e14
957
1001
  [release-link]: https://github.com/rergards/mempalace-code/releases
958
1002
  [python-shield]: https://img.shields.io/badge/python-3.11+-7dd8f8?style=flat-square&labelColor=0a0e14&logo=python&logoColor=7dd8f8
959
1003
  [python-link]: https://www.python.org/
@@ -961,3 +961,68 @@ items:
961
961
  resolution: '2026-05-29: completed in pipeline run (commit=7588660, 9 files changed, 213 insertions(+), 1 deletion(-))'
962
962
  archived_date: "2026-05-29"
963
963
  done_summary: completed in pipeline run (commit=7588660, 9 files changed, 213 insertions(+), 1 deletion(-))
964
+ - key: AUTOPILOT-DEMO-QUALITY-SCORECARD
965
+ summary: Add a deterministic public quality scorecard that makes Autopilot cleanup progress visible across releases.
966
+ resolution: '2026-06-05: Deterministic public scorecard: scripts/quality_scorecard.py emits Markdown+JSON; --check gates shape/determinism/public-safety in CI lint job and /verify; baseline committed to docs/quality/; update workflow in docs/quality/README.md'
967
+ archived_date: "2026-06-11"
968
+ done_summary: 'Deterministic public scorecard: scripts/quality_scorecard.py emits Markdown+JSON; --check gates shape/determinism/public-safety in CI lint job and /verify; baseline committed to docs/quality/; update workflow in docs/quality/README.md'
969
+ - key: AUTOPILOT-DEMO-PUBLIC-SAFETY-GATE
970
+ summary: Add a repo-wide public-safety gate for tracked and staged files.
971
+ resolution: '2026-06-06: Added scripts/public_safety_scan.py --tracked --staged, CI and /verify wiring, focused tests, and removed tracked .verify-state while adding it to .gitignore.'
972
+ archived_date: "2026-06-11"
973
+ done_summary: Repo-wide public-safety scan now gates tracked/staged files and redacts matched content; .verify-state is local-only.
974
+ - key: AUTOPILOT-DEMO-RUFF-RATCHET
975
+ summary: Reduce transitional Ruff ignores in a measurable ratchet without broad style-only churn.
976
+ resolution: '2026-06-06: Reduced global Ruff ignores from 33 to 3 by keeping existing package/test debt scoped to per-file ignores and making new scripts inherit the stricter rule set.'
977
+ archived_date: "2026-06-11"
978
+ done_summary: 'Ruff global ignore ratchet: broad historical ignores are now scoped away from scripts; no new inline suppressions.'
979
+ - key: AUTOPILOT-DEMO-PYRIGHT-STRICT-SLICE
980
+ summary: Establish a strict Pyright slice for stable low-level modules and expand it gradually.
981
+ resolution: '2026-06-06: Added pyrightconfig.strict.json for version.py, mcp_tool_profiles.py, and disk_budget.py; annotated disk_budget.py enough to pass strict; wired strict slice into CI and /verify.'
982
+ archived_date: "2026-06-11"
983
+ done_summary: Initial strict Pyright slice gates three stable low-level modules in CI and /verify.
984
+ - key: AUTOPILOT-DEMO-WORKFLOW-REVIEW-PROTOCOL
985
+ summary: Document the public-safe adversarial Claude workflow protocol for repo quality work.
986
+ resolution: '2026-06-06: Added docs/quality/workflow-review-protocol.md and linked it from docs/quality/README.md.'
987
+ archived_date: "2026-06-11"
988
+ done_summary: Public-safe multi-agent workflow review protocol is documented for future quality improvements.
989
+ - key: AUTOPILOT-DEMO-CODE-INTELLIGENCE-GOLDEN-PACKET
990
+ summary: Generate a deterministic public-safe code-intelligence packet from real MemPalace CLI output and one minimal MCP stdio exhibit on a synthetic fixture project.
991
+ resolution: '2026-06-11: Deterministic code-intelligence demo packet implemented. scripts/gen_code_intelligence_packet.py builds fixture, mines, generates docs/demo/code-intelligence-packet.{md,json} with 1.5k lines of exhibits. Tests (464 lines) validate normalization, known-answer queries, check-mode drift, and cleanup. Wired into /verify and CI lint job. Quality scorecard updated.'
992
+ archived_date: "2026-06-11"
993
+ done_summary: Code-intelligence packet generation script and comprehensive demo artifacts with full test coverage; wired into /verify and CI.
994
+ - key: WATCH-MACOS-FSEVENTS-RUNAWAY-GUARD
995
+ summary: Prevent broken macOS watch jobs from monitoring broad uninitialized roots and driving sustained FSEvents or Spotlight churn.
996
+ resolution: '2026-06-11: completed in pipeline run (delivered: Add macOS watch runaway guard: root validation in render_watch_schedule, ThrottleInterval in launchd plist, on-save SKIP_DIRS event pruning with pre-start warning, crash-loop signal in watch status, and operator recovery docs in README, artifacts: mempalace_code/watcher.py, mempalace_code/cli_commands/watch.py, tests/test_watcher.py (+1), verified: VER-1, VER-2, VER-3 (+12), phase_commit=2c2716f, final_commit=10ff04f, 24 files changed, 1371 insertions(+), 16 deletions(-))'
997
+ archived_date: "2026-06-11"
998
+ done_summary: 'completed in pipeline run (delivered: Add macOS watch runaway guard: root validation in render_watch_schedule, ThrottleInterval in launchd plist, on-save SKIP_DIRS event pruning with pre-start warning, crash-loop signal in watch status, and operator recovery docs in README, artifacts: mempalace_code/watcher.py, mempalace_code/cli_commands/watch.py, tests/test_watcher.py (+1), verified: VER-1, VER-2, VER-3 (+12), phase_commit=2c2716f, final_commit=10ff04f, 24 files changed, 1371 insertions(+), 16 deletions(-))'
999
+ - key: STORE-HF-CACHED-SEARCH-SUBPROCESS-GUARD
1000
+ summary: Add subprocess-level guard that cached model search/fetch never emits HuggingFace token warnings or performs network metadata calls after setup.
1001
+ resolution: '2026-06-11: completed in pipeline run (delivered: Add subprocess-level offline guards in tests/test_offline.py: four non-network tests spawn real CLI subprocesses with fake sentence_transformers/huggingface_hub and a socket blocker via PYTHONPATH, proving cached fetch-model and search use only local_files_only model resolution and emit no HF token-warning output., artifacts: tests/test_offline.py, verified: VER-1, VER-2, VER-3 (+5))'
1002
+ archived_date: "2026-06-11"
1003
+ done_summary: 'completed in pipeline run (delivered: Add subprocess-level offline guards in tests/test_offline.py: four non-network tests spawn real CLI subprocesses with fake sentence_transformers/huggingface_hub and a socket blocker via PYTHONPATH, proving cached fetch-model and search use only local_files_only model resolution and emit no HF token-warning output., artifacts: tests/test_offline.py, verified: VER-1, VER-2, VER-3 (+5))'
1004
+ - key: DEPENDENCY-SECURITY-UPGRADE-GATE
1005
+ summary: Add a repeatable audited dependency-upgrade gate before raising package ceilings or refreshing the lock.
1006
+ resolution: '2026-06-11: completed in pipeline run (delivered: Add dependency_upgrade_gate.py (audit/verify-report/ci-check), 17 focused tests, DEPENDENCY_UPGRADE_GATE.md documentation, CI gate step in Tests workflow with fetch-depth:0 and base-ref expressions, and regenerated quality scorecard., artifacts: scripts/dependency_upgrade_gate.py, tests/test_dependency_upgrade_gate.py, docs/DEPENDENCY_UPGRADE_GATE.md (+3), verified: VER-1, VER-2, VER-3 (+11), phase_commit=a6e7b12, final_commit=52035df, 23 files changed, 4452 insertions(+), 45 deletions(-))'
1007
+ archived_date: "2026-06-11"
1008
+ done_summary: 'completed in pipeline run (delivered: Add dependency_upgrade_gate.py (audit/verify-report/ci-check), 17 focused tests, DEPENDENCY_UPGRADE_GATE.md documentation, CI gate step in Tests workflow with fetch-depth:0 and base-ref expressions, and regenerated quality scorecard., artifacts: scripts/dependency_upgrade_gate.py, tests/test_dependency_upgrade_gate.py, docs/DEPENDENCY_UPGRADE_GATE.md (+3), verified: VER-1, VER-2, VER-3 (+11), phase_commit=a6e7b12, final_commit=52035df, 23 files changed, 4452 insertions(+), 45 deletions(-))'
1009
+ - key: DEPENDENCY-SCHEDULED-AUDIT-CI
1010
+ summary: Add a scheduled dependency audit workflow that checks current resolved packages without changing bounds.
1011
+ resolution: '2026-06-11: completed in pipeline run (delivered: Add current-audit subcommand to dependency_upgrade_gate.py, weekly scheduled workflow, allowlist file, updated docs, and 8 focused acceptance tests., artifacts: scripts/dependency_upgrade_gate.py, tests/test_dependency_upgrade_gate.py, .github/workflows/dependency-audit.yml (+4), verified: VER-1, VER-2, VER-3 (+11), phase_commit=9f8e737, final_commit=5816c9b, 24 files changed, 3528 insertions(+), 6 deletions(-))'
1012
+ archived_date: "2026-06-11"
1013
+ done_summary: 'completed in pipeline run (delivered: Add current-audit subcommand to dependency_upgrade_gate.py, weekly scheduled workflow, allowlist file, updated docs, and 8 focused acceptance tests., artifacts: scripts/dependency_upgrade_gate.py, tests/test_dependency_upgrade_gate.py, .github/workflows/dependency-audit.yml (+4), verified: VER-1, VER-2, VER-3 (+11), phase_commit=9f8e737, final_commit=5816c9b, 24 files changed, 3528 insertions(+), 6 deletions(-))'
1014
+ - key: RELEASE-PUBLICATION-STATUS-GATE
1015
+ summary: Add a release-status verification gate that checks every public publication surface before calling a release shipped.
1016
+ resolution: '2026-06-11: completed in pipeline run (delivered: Add scripts/release_status_gate.py (stdlib-only, 6-surface gate), 8 mocked tests covering AC-1 through AC-5, updated release skill (Step 6 now calls the gate), and regenerated quality scorecard., artifacts: scripts/release_status_gate.py, tests/test_release_status_gate.py, .claude/skills/release/SKILL.md (+2), verified: VER-1, VER-2, VER-3 (+9), phase_commit=404491c, final_commit=5b3231a, 23 files changed, 3567 insertions(+), 20 deletions(-))'
1017
+ archived_date: "2026-06-11"
1018
+ done_summary: 'completed in pipeline run (delivered: Add scripts/release_status_gate.py (stdlib-only, 6-surface gate), 8 mocked tests covering AC-1 through AC-5, updated release skill (Step 6 now calls the gate), and regenerated quality scorecard., artifacts: scripts/release_status_gate.py, tests/test_release_status_gate.py, .claude/skills/release/SKILL.md (+2), verified: VER-1, VER-2, VER-3 (+9), phase_commit=404491c, final_commit=5b3231a, 23 files changed, 3567 insertions(+), 20 deletions(-))'
1019
+ - key: AUTOPILOT-DEMO-CODE-INTELLIGENCE-PACKET-ACCEPTANCE-FIX
1020
+ summary: Close owner-acceptance blockers on the code-intelligence golden packet without broadening into new demo, docs-drift, or repo-wide public-safety work.
1021
+ resolution: '2026-06-11: completed in pipeline run (delivered: Add owner-acceptance checklist to packet generator/artifacts, fix B905 zip strictness, encode scanner-flagged token literal, relocate audit evidence to public-safe path, replace fallback golden-packet plan with durable plan., artifacts: scripts/gen_code_intelligence_packet.py, tests/test_code_intelligence_packet.py, docs/demo/code-intelligence-packet.json (+6), verified: VER-1, VER-3, VER-4 (+12), phase_commit=680870f, final_commit=99bff31, 23 files changed, 1492 insertions(+), 84 deletions(-))'
1022
+ archived_date: "2026-06-11"
1023
+ done_summary: 'completed in pipeline run (delivered: Add owner-acceptance checklist to packet generator/artifacts, fix B905 zip strictness, encode scanner-flagged token literal, relocate audit evidence to public-safe path, replace fallback golden-packet plan with durable plan., artifacts: scripts/gen_code_intelligence_packet.py, tests/test_code_intelligence_packet.py, docs/demo/code-intelligence-packet.json (+6), verified: VER-1, VER-3, VER-4 (+12), phase_commit=680870f, final_commit=99bff31, 23 files changed, 1492 insertions(+), 84 deletions(-))'
1024
+ - key: WATCH-RUN-READINESS-DIAGNOSTICS
1025
+ summary: Make watch-daemon startup state easy to distinguish from stale appended log failures after disk-budget recovery.
1026
+ resolution: '2026-06-16: completed in pipeline run (delivered: Add WATCH_RUN startup state markers to watch_and_mine/watch_all, update _optimize_once to return outcome, add TestWatchRunReadinessDiagnostics tests, and document health check workflow in README.md and docs/BACKUP_RESTORE.md, artifacts: mempalace_code/watcher.py, tests/test_watcher.py, README.md (+1), verified: VER-1, VER-2, VER-3 (+9), follow-ups: WATCH-ALL-BACKUP-FAIL-TEST, phase_commit=1b9b3e5, final_commit=936ae57, 8 files changed, 267 insertions(+), 15 deletions(-))'
1027
+ archived_date: "2026-06-16"
1028
+ done_summary: 'completed in pipeline run (delivered: Add WATCH_RUN startup state markers to watch_and_mine/watch_all, update _optimize_once to return outcome, add TestWatchRunReadinessDiagnostics tests, and document health check workflow in README.md and docs/BACKUP_RESTORE.md, artifacts: mempalace_code/watcher.py, tests/test_watcher.py, README.md (+1), verified: VER-1, VER-2, VER-3 (+9), follow-ups: WATCH-ALL-BACKUP-FAIL-TEST, phase_commit=1b9b3e5, final_commit=936ae57, 8 files changed, 267 insertions(+), 15 deletions(-))'