mempalace-code 1.10.4__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.
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/release/SKILL.md +46 -10
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.github/workflows/ci.yml +19 -0
- mempalace_code-1.11.0/.github/workflows/dependency-audit.yml +86 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/CHANGELOG.md +56 -1
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/PKG-INFO +46 -2
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/README.md +45 -1
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/BACKLOG-archived.yaml +65 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/BACKLOG.yaml +24 -99
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/BACKUP_RESTORE.md +28 -0
- mempalace_code-1.11.0/docs/DEPENDENCY_UPGRADE_GATE.md +265 -0
- mempalace_code-1.11.0/docs/demo/code-intelligence-packet.json +266 -0
- mempalace_code-1.11.0/docs/demo/code-intelligence-packet.md +1535 -0
- mempalace_code-1.11.0/docs/dependency-audit-allowlist.json +4 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/quality/README.md +23 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/quality/scorecard.json +19 -13
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/quality/scorecard.md +11 -10
- mempalace_code-1.11.0/docs/task-evidence/AUTOPILOT-DEMO-CODE-INTELLIGENCE-GOLDEN-PACKET-review.md +68 -0
- mempalace_code-1.11.0/docs/task-evidence/AUTOPILOT-DEMO-CODE-INTELLIGENCE-PACKET-ACCEPTANCE-FIX-review.md +44 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/examples/HOOKS_TUTORIAL.md +2 -2
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/examples/gemini_cli_setup.md +6 -29
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/hooks/README.md +4 -4
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/hooks/mempal_precompact_hook.sh +6 -12
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/hooks/mempal_save_hook.sh +4 -10
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli.py +6 -2
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/backup_restore.py +11 -2
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/export_import.py +26 -1
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/ingest.py +17 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/maintenance.py +22 -2
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/model.py +5 -1
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/query.py +42 -10
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/watch.py +56 -1
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/entity_detector.py +19 -2
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/onboarding.py +1 -1
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/room_detector_local.py +5 -1
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/searcher.py +22 -4
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/watcher.py +107 -8
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/pyproject.toml +1 -1
- mempalace_code-1.11.0/scripts/dependency_upgrade_gate.py +1230 -0
- mempalace_code-1.11.0/scripts/gen_code_intelligence_packet.py +1280 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/scripts/quality_scorecard.py +5 -0
- mempalace_code-1.11.0/scripts/release_status_gate.py +606 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_backup_cli.py +2 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_cli.py +187 -8
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_cli_command_modules.py +18 -2
- mempalace_code-1.11.0/tests/test_code_intelligence_packet.py +678 -0
- mempalace_code-1.11.0/tests/test_dependency_upgrade_gate.py +1416 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_entity_detector.py +30 -1
- mempalace_code-1.11.0/tests/test_offline.py +507 -0
- mempalace_code-1.11.0/tests/test_release_status_gate.py +666 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_searcher.py +41 -5
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_watcher.py +411 -4
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/uv.lock +1 -1
- mempalace_code-1.10.4/tests/test_offline.py +0 -87
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/prompts/codex-hardening-review.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/prompts/codex-plan-review.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/settings.json +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/_shared/commit-checkpoint.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/_shared/mode-classification.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/_shared/task-state.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/bench/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/doc-refresh/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/doc-refresh/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/entropy-gc/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/entropy-gc/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/mine/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/palace-health/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/release-prep/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/ship/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/ship/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/start/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/start/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/status/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/task-hardening/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/task-hardening/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/task-plan/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/task-plan/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/verify/INSTRUCTIONS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.claude/skills/verify/SKILL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.github/workflows/dotnet-bench.yml +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.github/workflows/publish.yml +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.gitignore +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/.pre-commit-config.yaml +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/AGENTS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/CLAUDE.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/CONTRIBUTING.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/LICENSE +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/NOTICE +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/assets/mempalace_banner.jpg +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/BENCHMARKS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/HYBRID_MODE.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/README.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/code_retrieval_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/convomem_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/data/code_retrieval_queries.json +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/dotnet_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/embed_ab_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/locomo_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/longmemeval_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/membench_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/results_embed_ab_2026-04-09.json +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/results_token_delta_mempalace.json +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/benchmarks/token_delta_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/AGENT_INSTALL.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/BENCH_TOKEN_DELTA.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/COMPARISON_GRAPHIFY.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/HOW_SEARCH_WORKS.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/LLM_USAGE_RULES.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/OFFLINE_USAGE.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/UPSTREAM_HARDENING.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/WHY_THIS_FORK.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/quality/workflow-review-protocol.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/docs/refactoring/REFAC-MINER-MODULES/progress.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/examples/basic_mining.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/examples/convo_import.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/examples/mcp_setup.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace/__init__.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace/mcp_server.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/README.md +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/__init__.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/__main__.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/_chroma_store.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/_stdio.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/architecture.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/backup.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/__init__.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/alias.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/common.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/diary.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/preflight.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/cli_commands/version_check.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/config.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/convo_miner.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/dialect.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/disk_budget.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/entity_registry.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/export.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/general_extractor.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/knowledge_graph.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/language_catalog.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/layers.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/__init__.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/dispatch.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/protocol_text.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/registry.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/runtime.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/__init__.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/architecture.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/diary.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/graph.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/kg.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/read.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/search.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp/tools/write.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp_server.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mcp_tool_profiles.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/migrate.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/miner.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mining/__init__.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mining/batching.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mining/chunkers.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mining/kg_extract.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mining/languages.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mining/orchestrator.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mining/projects.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mining/scanner.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mining/symbols.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/mirror_preflight.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/normalize.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/palace_graph.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/py.typed +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/reader.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/retrieval_rerank.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/search_reranker.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/spellcheck.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/split_mega_files.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/storage.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/treesitter.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/version.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/mempalace_code/version_check.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/pyrightconfig.strict.json +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/scripts/bootstrap.sh +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/scripts/codex-review.sh +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/scripts/migrate_storage_smoke.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/scripts/nuke_wing.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/scripts/public_safety_scan.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/conftest.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/fixtures/unreasoned_suppression.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_architecture_extraction.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_backup.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_chroma_compat.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_chroma_import_errors.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_chunking.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_code_retrieval_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_config.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_convo_miner.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_dialect.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_disk_budget.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_dotnet_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_dotnet_config.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_e2e.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_embed_ab_bench.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_entity_registry.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_export.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_general_extractor.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_kg_extract.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_knowledge_graph.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_lang_detect.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_language_catalog.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_layers.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_mcp_registry.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_mcp_server.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_mcp_tool_profiles.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_migrate.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_migrate_storage_smoke.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_miner.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_miner_modules.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_normalize.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_packaging_namespace.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_palace_graph.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_public_safety_scan.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_quality_scorecard.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_reader.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_retrieval_rerank.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_search_reranker.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_split_mega_files.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_stdio.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_storage.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_storage_lance.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_symbol_extract.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_treesitter.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_type_suppressions.py +0 -0
- {mempalace_code-1.10.4 → mempalace_code-1.11.0}/tests/test_version_check.py +0 -0
- {mempalace_code-1.10.4 → 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
|
-
|
|
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
|
-
|
|
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
|
```
|
|
@@ -83,6 +83,25 @@ jobs:
|
|
|
83
83
|
- name: Pyright strict slice
|
|
84
84
|
run: python -m pyright -p pyrightconfig.strict.json
|
|
85
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 }}"
|
|
104
|
+
|
|
86
105
|
model-tests:
|
|
87
106
|
runs-on: ubuntu-latest
|
|
88
107
|
if: github.event_name == 'workflow_dispatch' && github.event.inputs.model_tests == 'true'
|
|
@@ -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
|
|
@@ -2,7 +2,62 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
-
|
|
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.
|
|
6
61
|
|
|
7
62
|
## v1.10.4 — 2026-06-06
|
|
8
63
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mempalace-code
|
|
3
|
-
Version: 1.
|
|
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.
|
|
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.
|
|
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(-))'
|
|
@@ -47,99 +47,28 @@ sections:
|
|
|
47
47
|
# OPEN ITEMS
|
|
48
48
|
# ============================================================
|
|
49
49
|
items:
|
|
50
|
-
- key:
|
|
51
|
-
section: quality
|
|
52
|
-
status: open
|
|
53
|
-
priority: P2
|
|
54
|
-
summary: Add subprocess-level guard that cached model search/fetch never emits HuggingFace token warnings or performs network metadata calls after setup.
|
|
55
|
-
acceptance:
|
|
56
|
-
- Run a real CLI subprocess with a preseeded HuggingFace cache and network/socket access blocked or mocked.
|
|
57
|
-
- Assert `mempalace-code search` exits successfully without `HF_TOKEN`, `unauthenticated`, `huggingface.co`, or retry noise on stdout/stderr.
|
|
58
|
-
- Assert repeated `mempalace-code fetch-model` on a cached model uses local-only resolution and does not perform Hub metadata requests.
|
|
59
|
-
- Keep the existing network-marked download tests separate from this no-network regression guard.
|
|
60
|
-
- key: DEPENDENCY-SECURITY-UPGRADE-GATE
|
|
61
|
-
section: quality
|
|
62
|
-
status: open
|
|
63
|
-
priority: P1
|
|
64
|
-
summary: Add a repeatable audited dependency-upgrade gate before raising package ceilings or refreshing the lock.
|
|
65
|
-
acceptance:
|
|
66
|
-
- Enumerate current and target versions for direct runtime, dev, and optional dependencies from package metadata before changing bounds.
|
|
67
|
-
- Query OSV or an equivalent advisory source for both current and target direct dependency versions; block target ranges that are compromised or currently affected.
|
|
68
|
-
- Run pip-audit or an equivalent resolver-level audit on fresh environments for the default install and every optional extra whose bounds change.
|
|
69
|
-
- Keep deprecated optional backends capped away from affected ranges; do not raise ChromaDB to 1.x while GHSA-f4j7-r4q5-qw2c affects the available 1.x line.
|
|
70
|
-
- Update uv.lock only after the audited resolver passes, then run hosted-CI-equivalent tests in a clean pip environment so stale local locks cannot hide dependency drift.
|
|
71
|
-
- key: DEPENDENCY-SCHEDULED-AUDIT-CI
|
|
50
|
+
- key: BENCHMARK-FIXTURE-FRESHNESS-FACTS
|
|
72
51
|
section: quality
|
|
73
52
|
status: open
|
|
74
53
|
priority: P1
|
|
75
|
-
summary:
|
|
76
|
-
acceptance:
|
|
77
|
-
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
-
|
|
81
|
-
-
|
|
82
|
-
|
|
83
|
-
- key: RELEASE-PUBLICATION-STATUS-GATE
|
|
54
|
+
summary: Refresh benchmark baselines and publish compact fixture facts so public savings claims do not depend on stale repo size numbers.
|
|
55
|
+
acceptance:
|
|
56
|
+
- Run the token-savings benchmark against the current canonical large-repo fixture and record commit/ref, tracked file count, mined drawer count, supported-language count, median/average/peak savings, and retrieval precision.
|
|
57
|
+
- Update public benchmark docs and marketing-safe snippets to use the measured fixture facts instead of the older 19k-chunk wording.
|
|
58
|
+
- Add a small benchmark metadata file or script output that prints fixture facts alongside results so future reruns cannot omit repo size, language coverage, or precision.
|
|
59
|
+
- Add a freshness guard that warns when fixture drawer count or tracked file count drifts materially from the documented baseline.
|
|
60
|
+
- Keep the published facts concise and non-private; do not include customer repo names, private remotes, machine paths, or incident history.
|
|
61
|
+
- key: VERSION-INSTALL-METADATA-CONSISTENCY
|
|
84
62
|
section: quality
|
|
85
63
|
status: open
|
|
86
|
-
priority:
|
|
87
|
-
summary: Add a release
|
|
88
|
-
acceptance:
|
|
89
|
-
- Add a script or documented command that takes an expected version and checks tag existence, tag workflow status, GitHub Release presence, PyPI version visibility, and clean install smoke from PyPI.
|
|
90
|
-
- Verify `publish/main`, the version tag, GitHub Actions tag publish run, GitHub Releases, and PyPI JSON/API state as separate facts with separate pass/fail rows.
|
|
91
|
-
- Fail if branch tests pass but tag publish, release creation, or PyPI visibility is missing or red.
|
|
92
|
-
- Keep output public-safe: no private remote URLs, tokens, local paths, hostnames, or non-public incident notes.
|
|
93
|
-
- Wire the command into the `/release` skill/runbook and require it before release completion summaries.
|
|
94
|
-
- Add tests for parsing mocked GitHub/PyPI responses and for partial-success states such as "tests green, PyPI missing".
|
|
95
|
-
- key: AUTOPILOT-DEMO-QUALITY-SCORECARD
|
|
96
|
-
section: autopilot_demo
|
|
97
|
-
status: done
|
|
98
|
-
priority: P1
|
|
99
|
-
summary: Add a deterministic public quality scorecard that makes Autopilot cleanup progress visible across releases.
|
|
100
|
-
acceptance:
|
|
101
|
-
- Add a script or command that emits markdown and JSON metrics for code size, largest modules, Ruff ignore counts, Pyright mode, unreasoned suppressions, test count, and available smoke suites.
|
|
102
|
-
- Generate any raw baseline evidence under local ignored docs/audits/, then commit only a sanitized public summary with public repo data and relative paths.
|
|
103
|
-
- Document how each Autopilot demo task updates the scorecard with before/after metrics.
|
|
104
|
-
- CI or `/verify` runs the scorecard command and fails on malformed output.
|
|
105
|
-
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"
|
|
106
|
-
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"
|
|
107
|
-
- key: AUTOPILOT-DEMO-PUBLIC-SAFETY-GATE
|
|
108
|
-
section: autopilot_demo
|
|
109
|
-
status: done
|
|
110
|
-
priority: P1
|
|
111
|
-
summary: Add a repo-wide public-safety gate for tracked and staged files.
|
|
112
|
-
acceptance:
|
|
113
|
-
- Add a stdlib scanner that checks tracked worktree files and staged index blobs.
|
|
114
|
-
- Block secret-like tokens, real local machine paths, and local-only artifact paths without printing the matched secret text.
|
|
115
|
-
- Wire the scanner into CI and `/verify`.
|
|
116
|
-
- Remove or ignore any local-only artifact that is already tracked.
|
|
117
|
-
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."
|
|
118
|
-
done_summary: "Repo-wide public-safety scan now gates tracked/staged files and redacts matched content; .verify-state is local-only."
|
|
119
|
-
- key: AUTOPILOT-DEMO-RUFF-RATCHET
|
|
120
|
-
section: autopilot_demo
|
|
121
|
-
status: done
|
|
122
|
-
priority: P1
|
|
123
|
-
summary: Reduce transitional Ruff ignores in a measurable ratchet without broad style-only churn.
|
|
124
|
-
acceptance:
|
|
125
|
-
- Record baseline counts for global ignores, per-file ignores, and inline suppressions before edits.
|
|
126
|
-
- Remove at least one global ignore family or reduce per-file ignore entries by at least 25% for a focused module group.
|
|
127
|
-
- Replace any necessary inline suppressions with reasoned, narrow suppressions; no new blanket `noqa` entries.
|
|
128
|
-
- "`ruff check`, `ruff format --check`, Pyright, and the relevant focused tests pass; update the quality scorecard."
|
|
129
|
-
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."
|
|
130
|
-
done_summary: "Ruff global ignore ratchet: broad historical ignores are now scoped away from scripts; no new inline suppressions."
|
|
131
|
-
- key: AUTOPILOT-DEMO-PYRIGHT-STRICT-SLICE
|
|
132
|
-
section: autopilot_demo
|
|
133
|
-
status: done
|
|
134
|
-
priority: P1
|
|
135
|
-
summary: Establish a strict Pyright slice for stable low-level modules and expand it gradually.
|
|
64
|
+
priority: P2
|
|
65
|
+
summary: Add a release/install smoke that catches mismatches between package metadata, `mempalace_code.__version__`, and the CLI version-check output.
|
|
136
66
|
acceptance:
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
-
|
|
141
|
-
|
|
142
|
-
done_summary: "Initial strict Pyright slice gates three stable low-level modules in CI and /verify."
|
|
67
|
+
- In a fresh isolated install, assert `importlib.metadata.version("mempalace-code")`, `mempalace_code.__version__`, and `mempalace-code version-check --status` report the same version.
|
|
68
|
+
- Include pipx or uv-tool style invocation coverage if practical, because operator installs commonly use those surfaces.
|
|
69
|
+
- Fail with a clear diagnostic that names the disagreeing surfaces and recommended reinstall command without exposing private paths.
|
|
70
|
+
- Wire the smoke into release verification or the release-status gate, not the whole fast unit suite unless it stays cheap.
|
|
71
|
+
- Add a local troubleshooting note for stale tool environments where installed metadata and module source disagree.
|
|
143
72
|
- key: AUTOPILOT-DEMO-PYRIGHT-STRICT-SLICE-EXPANSION
|
|
144
73
|
section: autopilot_demo
|
|
145
74
|
status: open
|
|
@@ -163,18 +92,6 @@ items:
|
|
|
163
92
|
- Add tests proving deleted local-only files do not trigger tracked worktree failures, while committed local-only paths still fail.
|
|
164
93
|
- Wire committed-tree mode into release verification docs or `/release`, not into every edit-time `/verify` run unless it remains fast.
|
|
165
94
|
- Ensure all failure output remains redacted to rule id and file position only.
|
|
166
|
-
- key: AUTOPILOT-DEMO-WORKFLOW-REVIEW-PROTOCOL
|
|
167
|
-
section: autopilot_demo
|
|
168
|
-
status: done
|
|
169
|
-
priority: P1
|
|
170
|
-
summary: Document the public-safe adversarial Claude workflow protocol for repo quality work.
|
|
171
|
-
acceptance:
|
|
172
|
-
- Define review lenses, skeptical refutation, synthesis, implementation, and verification steps.
|
|
173
|
-
- Separate publishable summaries from local-only raw workflow artifacts.
|
|
174
|
-
- Link the protocol from quality docs.
|
|
175
|
-
- Include the canonical quality verification commands.
|
|
176
|
-
resolution: "2026-06-06: Added docs/quality/workflow-review-protocol.md and linked it from docs/quality/README.md."
|
|
177
|
-
done_summary: "Public-safe multi-agent workflow review protocol is documented for future quality improvements."
|
|
178
95
|
- key: AUTOPILOT-DEMO-ARCHITECTURE-GUARD
|
|
179
96
|
section: autopilot_demo
|
|
180
97
|
status: open
|
|
@@ -269,3 +186,11 @@ items:
|
|
|
269
186
|
- Keep raw multi-agent transcripts local-only under ignored paths; commit only the synthesized public summary when needed.
|
|
270
187
|
- Document that passive review output is not enough: each surviving finding must either change code/tests/docs or become a backlog item with acceptance criteria.
|
|
271
188
|
- Add tests for accepted summaries, missing evidence, missing action, and accidental private path/token content.
|
|
189
|
+
- key: WATCH-ALL-BACKUP-FAIL-TEST
|
|
190
|
+
summary: "Add test for watch_all pre-watch-backup-failed state path"
|
|
191
|
+
type: task
|
|
192
|
+
status: open
|
|
193
|
+
priority: low
|
|
194
|
+
size: XS
|
|
195
|
+
section_id: quality
|
|
196
|
+
description: "## Problem\nThe `pre-watch-backup-failed` WATCH_RUN state is emitted in `watch_all` (watcher.py:787) on the same code path as `watch_and_mine`, but only `watch_and_mine` has a dedicated test (`test_pre_watch_backup_failure_emits_failed_state_for_same_run`). A regression in the `watch_all` backup-gate branch would go undetected.\n\n## Deliverable\nAdd a `TestWatchRunReadinessDiagnostics` test case that patches `create_backup` to raise in a `watch_all` call with existing lance data, asserts `state=pre-watch-backup-failed` is emitted on the same `run_id`, and asserts `state=watch-ready` is absent.\n\n## Constraints\n- Must use the same mock pattern as the existing AC-2 test.\n- Must not change production code.\n\n## Acceptance criteria\n\npython -m pytest tests/test_watcher.py::TestWatchRunReadinessDiagnostics::test_watch_all_backup_failure_emits_failed_state -q passes\n\n## Scope\n\npython -m pytest tests/test_watcher.py::TestWatchRunReadinessDiagnostics::test_watch_all_backup_failure_emits_failed_state -q passes\n\n## Evidence\n\n- docs/audits/WATCH-RUN-READINESS-DIAGNOSTICS-round-1.md\n- Source task: WATCH-RUN-READINESS-DIAGNOSTICS"
|