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