kernel-lore-mcp 0.2.2__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/.github/workflows/ci.yml +18 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/CHANGELOG.md +85 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/Cargo.lock +1 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/Cargo.toml +5 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/PKG-INFO +20 -15
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/README.md +19 -14
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/TODO.md +64 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/architecture/deployment-modes.md +3 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ops/production-hardening.md +23 -0
- kernel_lore_mcp-0.3.1/docs/ops/public-launch-checklist.md +104 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ops/runbook.md +14 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/plans/2026-04-17-overdb-followups.md +26 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/plans/2026-04-20-v0.3.0-plan.md +167 -36
- kernel_lore_mcp-0.3.1/docs/plans/2026-04-22-v0.3.1-plan.md +106 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/pyproject.toml +3 -1
- kernel_lore_mcp-0.3.1/scripts/bench/bench_hosted_adversarial.py +572 -0
- kernel_lore_mcp-0.3.1/scripts/bench/stress_mcp_multiprocess.py +789 -0
- kernel_lore_mcp-0.3.1/src/bin/doctor.rs +719 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/bin/sync.rs +445 -40
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/bm25.rs +52 -3
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/ingest.rs +305 -27
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/__init__.py +1 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/__main__.py +58 -2
- kernel_lore_mcp-0.3.1/src/kernel_lore_mcp/cli/doctor.py +150 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/cli/sync.py +48 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/config.py +8 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/cost_class.py +67 -6
- kernel_lore_mcp-0.3.1/src/kernel_lore_mcp/health.py +136 -0
- kernel_lore_mcp-0.3.1/src/kernel_lore_mcp/logging_.py +115 -0
- kernel_lore_mcp-0.3.1/src/kernel_lore_mcp/observability.py +162 -0
- kernel_lore_mcp-0.3.1/src/kernel_lore_mcp/routes/metrics.py +242 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/routes/status.py +9 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/server.py +13 -0
- kernel_lore_mcp-0.3.1/src/kernel_lore_mcp/timeout.py +114 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/corpus_stats.py +70 -30
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/primitives.py +43 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/lib.rs +1 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/python.rs +5 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/reader.rs +27 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/sync.rs +123 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_cost_class.py +53 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_coverage_stats.py +37 -10
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_errors.py +5 -0
- kernel_lore_mcp-0.3.1/tests/python/test_logging_profile.py +91 -0
- kernel_lore_mcp-0.3.1/tests/python/test_observability.py +137 -0
- kernel_lore_mcp-0.3.1/tests/python/test_regex_hosted.py +78 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_resources_routes.py +34 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_status_subcommand.py +5 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/uv.lock +1 -1
- kernel_lore_mcp-0.2.2/src/kernel_lore_mcp/logging_.py +0 -44
- kernel_lore_mcp-0.2.2/src/kernel_lore_mcp/routes/metrics.py +0 -109
- kernel_lore_mcp-0.2.2/src/kernel_lore_mcp/timeout.py +0 -58
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/.github/workflows/release.yml +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/.gitignore +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/.python-version +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/CLAUDE.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/CONTRIBUTING.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/GOVERNANCE.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/LEGAL.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/LICENSE +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/SECURITY.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/README.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/architecture/data-flow.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/architecture/four-tier-index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/architecture/over-db.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/architecture/overview.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/architecture/reciprocity.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/architecture/trade-offs.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/demos/first-session.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/indexing/bm25-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/indexing/compressed-store.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/indexing/metadata-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/indexing/path-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/indexing/tokenizer-spec.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/indexing/trigram-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ingestion/grokmirror.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ingestion/mbox-parsing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ingestion/patch-parsing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ingestion/shard-walking.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/mcp/client-config.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/mcp/query-routing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/mcp/tools.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/mcp/transport-auth.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ops/corpus-coverage.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ops/cost-model.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ops/ec2-sizing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ops/monitoring.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ops/threat-model.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ops/update-cadence.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/ops/update-frequency.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/plans/2026-04-14-best-in-class-kernel-mcp.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/plans/2026-04-15-internalize-grokmirror.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/plans/2026-04-15-mcp-spec-coverage-and-uplift.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/plans/2026-04-17-overdb-metadata-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-agent-ergonomics.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-best-in-class-mcp-survey.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-external-data-sources.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-gix-vs-git2.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-mcp-python-sdk.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-pyo3-maturin.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-search-library-landscape.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-storage-footprint.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-tantivy.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-14-workflow-gap-analysis.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-15-fuzzy-search-design.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-15-path-mentions.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/2026-04-17-overdb-validation.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/research/training-retriever.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/README.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/01-research.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/02-design.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/03-implement.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/04-test.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/05-quality.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/06-review.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/07-commit.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/08-debug.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/09-optimize.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/10-document.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/checklists/index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/code-quality.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/data-structures.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/design/boundaries.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/design/concurrency.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/design/dependencies.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/design/errors.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/design/modules.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/git.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/language.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/libraries/fastmcp.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/libraries/httpx.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/libraries/pydantic.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/libraries/structlog.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/naming.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/pyo3-maturin.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/testing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/python/uv.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/cargo.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/01-research.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/02-design.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/03-implement.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/04-test.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/05-quality.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/06-review.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/07-commit.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/08-debug.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/09-optimize.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/10-document.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/checklists/index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/code-quality.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/design/boundaries.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/design/concurrency.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/design/data-structures.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/design/errors.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/design/modules.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/ffi.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/language.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/libraries/arrow-parquet.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/libraries/gix.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/libraries/pyo3.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/libraries/regex-automata.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/libraries/roaring-fst.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/libraries/tantivy.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/libraries/zstd.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/naming.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/testing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/docs/standards/rust/unsafe.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/rust-toolchain.toml +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/agentic_smoke.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/bench/bench_concurrent_mixed.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/grokmirror-personal.conf +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/grokmirror.conf +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/klmcp-doctor.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/klmcp-grok-pull.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/klmcp-ingest.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/post-pull-hook.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/rust_call_graph.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/systemd/etc-kernel-lore-mcp-env.sample +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/systemd/klmcp-grokmirror.service +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/systemd/klmcp-grokmirror.timer +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/systemd/klmcp-ingest.path +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/systemd/klmcp-ingest.service +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/systemd/klmcp-mcp.service +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/systemd/klmcp-sync.service +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/scripts/systemd/klmcp-sync.timer +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/bin/bench_blob_read.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/bin/bench_ingest_stages.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/bin/build_git_sidecar.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/bin/build_over.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/bin/ingest.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/bin/reindex.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/embedding.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/error.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/git_sidecar.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/_core.pyi +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/_surface_manifest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/cli/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/cli/embed.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/cli/ingest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/cursor.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/embedding.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/errors.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/freshness.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/kwic.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/mapping.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/models.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/prompts.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/reader_cache.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/resources/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/resources/blind_spots.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/resources/coverage_stats.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/resources/templates.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/routes/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/sampling.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/activity.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/author_footprint.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/author_profile.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/expand_citation.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/explain_patch.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/file_timeline.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/maintainer_profile.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/message.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/nearest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/patch.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/patch_diff.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/patch_search.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/path_mentions.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/sampling_tools.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/search.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/series.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/stable_backport.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/subsystem_churn.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/thread.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/kernel_lore_mcp/tools/thread_state.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/maintainers.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/metadata.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/over.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/parse.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/path_tier.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/router.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/schema.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/state.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/store.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/tid.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/timeout.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/src/trigram.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/bin_ingest.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/conftest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/fixtures/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_annotations.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_cost_hints.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_cursor.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_embedding_e2e.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_freshness.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_fuzzy_search.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_http_transport.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_ingest_and_reader.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_kwic.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_mcp_adversarial.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_mcp_tools_e2e.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_path_mentions.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_primitives_e2e.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_prompts.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_resource_templates.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_response_format.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_sampling_tools.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_smoke.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_stdio_subprocess.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_surface_manifest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_sync_cli.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.1}/tests/python/test_thread_patch_explain.py +0 -0
|
@@ -51,6 +51,24 @@ jobs:
|
|
|
51
51
|
- run: uv run maturin develop --release
|
|
52
52
|
- run: uv run pytest -v
|
|
53
53
|
|
|
54
|
+
hosted-load:
|
|
55
|
+
name: hosted load harness
|
|
56
|
+
runs-on: ubuntu-latest
|
|
57
|
+
steps:
|
|
58
|
+
- uses: actions/checkout@v4
|
|
59
|
+
- uses: astral-sh/setup-uv@v5
|
|
60
|
+
with:
|
|
61
|
+
python-version: "3.12"
|
|
62
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
63
|
+
- uses: Swatinem/rust-cache@v2
|
|
64
|
+
- run: uv sync
|
|
65
|
+
- run: uv run maturin develop --release
|
|
66
|
+
- run: .venv/bin/python scripts/bench/bench_hosted_adversarial.py --json-out hosted-load.json
|
|
67
|
+
- uses: actions/upload-artifact@v4
|
|
68
|
+
with:
|
|
69
|
+
name: hosted-load-report
|
|
70
|
+
path: hosted-load.json
|
|
71
|
+
|
|
54
72
|
wheels:
|
|
55
73
|
name: build abi3 wheels (${{ matrix.target }})
|
|
56
74
|
runs-on: ${{ matrix.os }}
|
|
@@ -10,6 +10,91 @@ release tags move them into a dated section. Release process in
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.3.1] — 2026-04-22
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
- `/status` and `kernel-lore-mcp status` now surface live writer state:
|
|
18
|
+
`writer_lock_present`, `sync_active`, and a `sync` block populated
|
|
19
|
+
from `kernel-lore-sync`'s machine-readable heartbeat file.
|
|
20
|
+
- Added `kernel_lore_mcp_writer_lock_present` and
|
|
21
|
+
`kernel_lore_mcp_sync_active` gauges to `/metrics`.
|
|
22
|
+
- Added `scripts/bench/stress_mcp_multiprocess.py`, the async +
|
|
23
|
+
multiprocess soak harness used to pressure-test a hosted box over a
|
|
24
|
+
longer run.
|
|
25
|
+
|
|
26
|
+
### Changed
|
|
27
|
+
|
|
28
|
+
- `kernel-lore-sync` now writes `state/sync.json` while it runs and
|
|
29
|
+
emits explicit operator-facing stage logs for `bm25_commit`,
|
|
30
|
+
`tid_rebuild`, `path_vocab_rebuild`, `generation_bump`, and
|
|
31
|
+
`save_manifest`.
|
|
32
|
+
- Inline BM25 uses conservative explicit writer defaults instead of
|
|
33
|
+
Tantivy's auto-thread selection. New env knobs:
|
|
34
|
+
`KLMCP_BM25_WRITER_THREADS` and `KLMCP_BM25_WRITER_MEMORY_MB`.
|
|
35
|
+
- `rate_limited` and `query_timeout` now return load-aware in-band
|
|
36
|
+
retry hints. Retry guidance rises when a writer-heavy sync stage is
|
|
37
|
+
active on the same box.
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- Writer activity detection no longer confuses “lockfile exists” with
|
|
42
|
+
“writer lock is actively held”; status probes now test the live flock
|
|
43
|
+
state.
|
|
44
|
+
- The “ingest phase done, then silence for minutes” sync log shape is
|
|
45
|
+
gone; BM25 finalization is visible instead of looking hung.
|
|
46
|
+
|
|
47
|
+
## [0.3.0] — 2026-04-21
|
|
48
|
+
|
|
49
|
+
### Added
|
|
50
|
+
|
|
51
|
+
**Hosted deployment profile + operator profiling.**
|
|
52
|
+
- `kernel-lore-mcp serve` now accepts `--mode local|hosted`, and the
|
|
53
|
+
chosen runtime posture is logged explicitly at startup along with
|
|
54
|
+
bind/port, data dir, and the active slow-path thresholds.
|
|
55
|
+
- Python-side hosted logging now emits structured slow-path events for
|
|
56
|
+
MCP requests, tool calls, inner runtime, and cost-class admission
|
|
57
|
+
delay, so operators can distinguish queueing from tool-body work
|
|
58
|
+
during live incidents.
|
|
59
|
+
- New environment knobs:
|
|
60
|
+
`KLMCP_SLOW_REQUEST_MS`, `KLMCP_SLOW_TOOL_MS`, and
|
|
61
|
+
`KLMCP_SLOW_QUEUE_WAIT_MS`.
|
|
62
|
+
|
|
63
|
+
**Repeatable hosted-load gate.**
|
|
64
|
+
- Added `scripts/bench/bench_hosted_adversarial.py`: a real HTTP/MCP
|
|
65
|
+
harness that boots the server in hosted mode, floods cheap queries,
|
|
66
|
+
saturates moderate and expensive tools, polls `/status` concurrently,
|
|
67
|
+
and emits a JSON report comparing client-observed latency with
|
|
68
|
+
server-side histograms.
|
|
69
|
+
- Wired the harness into CI and added
|
|
70
|
+
`docs/ops/public-launch-checklist.md` so launch readiness is a
|
|
71
|
+
repeatable gate, not an operator memory exercise.
|
|
72
|
+
|
|
73
|
+
### Changed
|
|
74
|
+
|
|
75
|
+
**The would-be `0.2.3` hosted-hardening line ships here.**
|
|
76
|
+
- `kernel-lore-sync` now self-heals poisoned local shard repos by
|
|
77
|
+
deleting zero-ref / unopenable repos and recloning them during sync.
|
|
78
|
+
- Hosted `lore_regex` is permanently narrowed to list-scoped,
|
|
79
|
+
anchored, metadata-only regex shapes; unsafe full-corpus / prose /
|
|
80
|
+
patch scans now reject fast with `hosted_restriction`.
|
|
81
|
+
- `lore_corpus_stats` is now cached by generation and warmed at server
|
|
82
|
+
startup so the steady-state path stays off the timeout cliff.
|
|
83
|
+
- Sync rebuilds `paths/vocab.txt` automatically, eliminating the
|
|
84
|
+
post-sync manual step for `lore_path_mentions`.
|
|
85
|
+
- `/metrics` now records end-to-end request latency, queue-wait, tool
|
|
86
|
+
latency, and non-`ok` statuses including `rate_limited` even when a
|
|
87
|
+
call is rejected before the tool body runs.
|
|
88
|
+
|
|
89
|
+
### Fixed
|
|
90
|
+
|
|
91
|
+
- Hosted default logs are quiet enough to follow a real incident:
|
|
92
|
+
third-party INFO chatter is suppressed by default while our own
|
|
93
|
+
warnings/errors remain visible.
|
|
94
|
+
- The latency gap seen in client stress runs is now measurable rather
|
|
95
|
+
than anecdotal: the hosted-load harness and the new metrics/logging
|
|
96
|
+
surface make queueing / transport inflation directly visible.
|
|
97
|
+
|
|
13
98
|
## [0.2.2] — 2026-04-21
|
|
14
99
|
|
|
15
100
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "kernel_lore_mcp"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.1"
|
|
4
4
|
edition = "2024"
|
|
5
5
|
rust-version = "1.85"
|
|
6
6
|
authors = ["Michael Bommarito <michael@bommaritollc.com>"]
|
|
@@ -179,3 +179,7 @@ path = "src/bin/bench_ingest_stages.rs"
|
|
|
179
179
|
[[bin]]
|
|
180
180
|
name = "kernel-lore-sync"
|
|
181
181
|
path = "src/bin/sync.rs"
|
|
182
|
+
|
|
183
|
+
[[bin]]
|
|
184
|
+
name = "kernel-lore-doctor"
|
|
185
|
+
path = "src/bin/doctor.rs"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kernel-lore-mcp
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Classifier: Development Status :: 2 - Pre-Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -78,17 +78,19 @@ kernel-lore-sync \
|
|
|
78
78
|
--include '/wireguard/*' --include '/linux-cifs/*'
|
|
79
79
|
# Drop --include to mirror all ~390 lists. Plan the disk + time.
|
|
80
80
|
|
|
81
|
-
# 3.
|
|
82
|
-
python -c 'from kernel_lore_mcp import _core; \
|
|
83
|
-
print(_core.rebuild_path_vocab("'"$KLMCP_DATA_DIR"'"))'
|
|
84
|
-
|
|
85
|
-
# 4. confirm freshness + which capabilities are provisioned
|
|
81
|
+
# 3. confirm freshness + which capabilities are provisioned
|
|
86
82
|
kernel-lore-mcp status --data-dir "$KLMCP_DATA_DIR"
|
|
87
83
|
# Look at `capabilities`: each over_db / bm25 / path_vocab / embedding /
|
|
88
84
|
# maintainers / git_sidecar boolean tells you which tools will actually
|
|
89
|
-
# return data on this deployment.
|
|
85
|
+
# return data on this deployment. While a sync is active, the same
|
|
86
|
+
# status output also shows `writer_lock_present`, `sync_active`, and
|
|
87
|
+
# the current sync stage.
|
|
88
|
+
|
|
89
|
+
# 3b. inspect shard/index health; add --heal to repair unborn shard HEADs
|
|
90
|
+
# and remove unrecoverable shard repos so the next sync reclones them
|
|
91
|
+
kernel-lore-doctor --data-dir "$KLMCP_DATA_DIR"
|
|
90
92
|
|
|
91
|
-
#
|
|
93
|
+
# 4. verify the MCP surface — zero API cost
|
|
92
94
|
git clone --depth 1 https://github.com/mjbommar/kernel-lore-mcp.git
|
|
93
95
|
cd kernel-lore-mcp && ./scripts/agentic_smoke.sh local
|
|
94
96
|
# PASS: 7/7 tools, 5/5 resource templates, 5/5 prompts (the
|
|
@@ -130,8 +132,9 @@ git clone https://github.com/mjbommar/kernel-lore-mcp.git
|
|
|
130
132
|
cd kernel-lore-mcp
|
|
131
133
|
uv sync
|
|
132
134
|
uv run maturin develop --release
|
|
133
|
-
cargo build --release --bin kernel-lore-sync --bin kernel-lore-ingest
|
|
135
|
+
cargo build --release --bin kernel-lore-sync --bin kernel-lore-ingest --bin kernel-lore-doctor
|
|
134
136
|
./target/release/kernel-lore-sync --data-dir $KLMCP_DATA_DIR --with-over
|
|
137
|
+
./target/release/kernel-lore-doctor --data-dir $KLMCP_DATA_DIR
|
|
135
138
|
```
|
|
136
139
|
|
|
137
140
|
### Going bigger
|
|
@@ -143,13 +146,13 @@ Want production-grade systemd deployment (single `klmcp-sync.timer`
|
|
|
143
146
|
replacing the pre-v0.2.0 grokmirror + ingest pair)?
|
|
144
147
|
[`docs/ops/runbook.md`](./docs/ops/runbook.md) §1 onwards.
|
|
145
148
|
|
|
146
|
-
## Status — v0.
|
|
149
|
+
## Status — v0.3.1 (2026-04-22)
|
|
147
150
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
Current release: `v0.3.1`, the first patch line after the hosted
|
|
152
|
+
readiness release. The focus is same-box sync visibility and safer
|
|
153
|
+
inline BM25 behavior: live sync state in `/status`, explicit
|
|
154
|
+
post-ingest stage logs, conservative BM25 writer defaults, and
|
|
155
|
+
load-aware retry hints when writer-heavy work is active.
|
|
153
156
|
|
|
154
157
|
Shipped:
|
|
155
158
|
|
|
@@ -245,6 +248,8 @@ retriever on that self-supervised signal. Recipe:
|
|
|
245
248
|
5-min cadence policy + fanout-to-one cost analysis
|
|
246
249
|
- [`docs/ops/production-hardening.md`](./docs/ops/production-hardening.md) —
|
|
247
250
|
threat model, cost-class caps, capability flags, systemd layout
|
|
251
|
+
- [`docs/ops/public-launch-checklist.md`](./docs/ops/public-launch-checklist.md) —
|
|
252
|
+
pre-launch hosted-box gate: shard health, metrics, harness, log readability
|
|
248
253
|
- [`docs/mcp/client-config.md`](./docs/mcp/client-config.md) —
|
|
249
254
|
copy-paste snippets for Claude Code, Codex, Cursor, Zed
|
|
250
255
|
- [`docs/mcp/transport-auth.md`](./docs/mcp/transport-auth.md) —
|
|
@@ -43,17 +43,19 @@ kernel-lore-sync \
|
|
|
43
43
|
--include '/wireguard/*' --include '/linux-cifs/*'
|
|
44
44
|
# Drop --include to mirror all ~390 lists. Plan the disk + time.
|
|
45
45
|
|
|
46
|
-
# 3.
|
|
47
|
-
python -c 'from kernel_lore_mcp import _core; \
|
|
48
|
-
print(_core.rebuild_path_vocab("'"$KLMCP_DATA_DIR"'"))'
|
|
49
|
-
|
|
50
|
-
# 4. confirm freshness + which capabilities are provisioned
|
|
46
|
+
# 3. confirm freshness + which capabilities are provisioned
|
|
51
47
|
kernel-lore-mcp status --data-dir "$KLMCP_DATA_DIR"
|
|
52
48
|
# Look at `capabilities`: each over_db / bm25 / path_vocab / embedding /
|
|
53
49
|
# maintainers / git_sidecar boolean tells you which tools will actually
|
|
54
|
-
# return data on this deployment.
|
|
50
|
+
# return data on this deployment. While a sync is active, the same
|
|
51
|
+
# status output also shows `writer_lock_present`, `sync_active`, and
|
|
52
|
+
# the current sync stage.
|
|
53
|
+
|
|
54
|
+
# 3b. inspect shard/index health; add --heal to repair unborn shard HEADs
|
|
55
|
+
# and remove unrecoverable shard repos so the next sync reclones them
|
|
56
|
+
kernel-lore-doctor --data-dir "$KLMCP_DATA_DIR"
|
|
55
57
|
|
|
56
|
-
#
|
|
58
|
+
# 4. verify the MCP surface — zero API cost
|
|
57
59
|
git clone --depth 1 https://github.com/mjbommar/kernel-lore-mcp.git
|
|
58
60
|
cd kernel-lore-mcp && ./scripts/agentic_smoke.sh local
|
|
59
61
|
# PASS: 7/7 tools, 5/5 resource templates, 5/5 prompts (the
|
|
@@ -95,8 +97,9 @@ git clone https://github.com/mjbommar/kernel-lore-mcp.git
|
|
|
95
97
|
cd kernel-lore-mcp
|
|
96
98
|
uv sync
|
|
97
99
|
uv run maturin develop --release
|
|
98
|
-
cargo build --release --bin kernel-lore-sync --bin kernel-lore-ingest
|
|
100
|
+
cargo build --release --bin kernel-lore-sync --bin kernel-lore-ingest --bin kernel-lore-doctor
|
|
99
101
|
./target/release/kernel-lore-sync --data-dir $KLMCP_DATA_DIR --with-over
|
|
102
|
+
./target/release/kernel-lore-doctor --data-dir $KLMCP_DATA_DIR
|
|
100
103
|
```
|
|
101
104
|
|
|
102
105
|
### Going bigger
|
|
@@ -108,13 +111,13 @@ Want production-grade systemd deployment (single `klmcp-sync.timer`
|
|
|
108
111
|
replacing the pre-v0.2.0 grokmirror + ingest pair)?
|
|
109
112
|
[`docs/ops/runbook.md`](./docs/ops/runbook.md) §1 onwards.
|
|
110
113
|
|
|
111
|
-
## Status — v0.
|
|
114
|
+
## Status — v0.3.1 (2026-04-22)
|
|
112
115
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
Current release: `v0.3.1`, the first patch line after the hosted
|
|
117
|
+
readiness release. The focus is same-box sync visibility and safer
|
|
118
|
+
inline BM25 behavior: live sync state in `/status`, explicit
|
|
119
|
+
post-ingest stage logs, conservative BM25 writer defaults, and
|
|
120
|
+
load-aware retry hints when writer-heavy work is active.
|
|
118
121
|
|
|
119
122
|
Shipped:
|
|
120
123
|
|
|
@@ -210,6 +213,8 @@ retriever on that self-supervised signal. Recipe:
|
|
|
210
213
|
5-min cadence policy + fanout-to-one cost analysis
|
|
211
214
|
- [`docs/ops/production-hardening.md`](./docs/ops/production-hardening.md) —
|
|
212
215
|
threat model, cost-class caps, capability flags, systemd layout
|
|
216
|
+
- [`docs/ops/public-launch-checklist.md`](./docs/ops/public-launch-checklist.md) —
|
|
217
|
+
pre-launch hosted-box gate: shard health, metrics, harness, log readability
|
|
213
218
|
- [`docs/mcp/client-config.md`](./docs/mcp/client-config.md) —
|
|
214
219
|
copy-paste snippets for Claude Code, Codex, Cursor, Zed
|
|
215
220
|
- [`docs/mcp/transport-auth.md`](./docs/mcp/transport-auth.md) —
|
|
@@ -10,6 +10,68 @@ Status markers:
|
|
|
10
10
|
- `[DEFER]` — decided to defer past v1; must have a `--> docs/...`
|
|
11
11
|
pointer explaining why
|
|
12
12
|
|
|
13
|
+
## Current release track (2026-04-22)
|
|
14
|
+
|
|
15
|
+
`v0.3.0` shipped on 2026-04-21. The active patch line is
|
|
16
|
+
`v0.3.1`: sync-under-load hardening, operator visibility, and release
|
|
17
|
+
cleanup after the first same-box hosted soak on `server6`.
|
|
18
|
+
|
|
19
|
+
### 0.3.1 target — sync-under-load visibility + safer inline BM25
|
|
20
|
+
|
|
21
|
+
- [x] `kernel-lore-sync` writes live machine-readable progress under
|
|
22
|
+
`state/sync.json`, and `/status` + `kernel-lore-mcp status` surface
|
|
23
|
+
`writer_lock_present`, `sync_active`, and the current sync stage.
|
|
24
|
+
- [x] Sync logs the post-ingest work explicitly:
|
|
25
|
+
`bm25_commit`, `tid_rebuild`, `path_vocab_rebuild`,
|
|
26
|
+
`generation_bump`, and `save_manifest` are no longer silent gaps.
|
|
27
|
+
- [x] Inline BM25 is safer-by-default and operator-tunable:
|
|
28
|
+
default BM25 writer thread count is conservative, and env knobs exist
|
|
29
|
+
for thread count + memory budget.
|
|
30
|
+
- [x] `rate_limited` / `query_timeout` retry hints are load-aware and
|
|
31
|
+
rise when a live writer-heavy sync stage is active.
|
|
32
|
+
- [x] The async + multiprocess soak harness used against `server6`
|
|
33
|
+
lives in-tree and is referenced by the launch docs.
|
|
34
|
+
|
|
35
|
+
### 0.2.3 carry-forward — land these in `v0.3.0` first
|
|
36
|
+
|
|
37
|
+
- [x] `kernel-lore-sync` self-heals poisoned shard repos: detect
|
|
38
|
+
zero-ref / unopenable local shard repos, delete them, and
|
|
39
|
+
reclone automatically. `kernel-lore-doctor --heal` stays as the
|
|
40
|
+
explicit maintenance tool, not the primary recovery path.
|
|
41
|
+
- [x] `lore_regex` public-hosted posture: disable/gate it in hosted
|
|
42
|
+
mode or add enough admission control that the full-corpus default
|
|
43
|
+
path never just burns 5 s and returns `query_timeout`.
|
|
44
|
+
- [x] `_cached_corpus_stats` generation cache + warm path so warm
|
|
45
|
+
calls stay well under the wall-clock cap on the full corpus.
|
|
46
|
+
- [x] `/metrics` must record `rate_limited` and every other
|
|
47
|
+
non-`ok` status consistently, including overload that rejects
|
|
48
|
+
before the tool body runs.
|
|
49
|
+
- [x] Add end-to-end request latency + queue-wait histograms so the
|
|
50
|
+
client-side p95 inflation seen under concurrency is visible in
|
|
51
|
+
Prometheus.
|
|
52
|
+
- [x] Auto-build `paths/vocab.txt` during sync so
|
|
53
|
+
`lore_path_mentions` works on a fresh healthy hosted box without
|
|
54
|
+
a manual follow-up command.
|
|
55
|
+
- [x] Hosted default logging drops `tantivy::*` INFO churn unless
|
|
56
|
+
explicitly enabled; operator logs should show our own progress /
|
|
57
|
+
warning / error lines first.
|
|
58
|
+
|
|
59
|
+
### 0.3.0 target — ship after the carry-forward hardening line above
|
|
60
|
+
|
|
61
|
+
- [x] Hosted deployment profile (`local` vs `hosted`, or equivalent)
|
|
62
|
+
that flips the exact runtime defaults we intend to expose on the
|
|
63
|
+
public internet.
|
|
64
|
+
- [x] Repeatable adversarial HTTP/MCP load harness in CI: cheap
|
|
65
|
+
flood, moderate over-cap concurrency, expensive-tool saturation,
|
|
66
|
+
and concurrent `/status` responsiveness checks.
|
|
67
|
+
- [x] Public-safe `lore_regex` redesign or permanently narrower
|
|
68
|
+
admission control. Current full-corpus behavior is not launchable.
|
|
69
|
+
- [x] Reconcile client-observed latency vs server-side tool latency
|
|
70
|
+
before retuning concurrency caps or over.db pool sizes.
|
|
71
|
+
- [x] Public-launch checklist against a full-corpus host: generation
|
|
72
|
+
health, shard health, tool surface, metrics, abuse posture, and
|
|
73
|
+
operator-log readability.
|
|
74
|
+
|
|
13
75
|
## Phase 0 — scaffold correctness (blocks everything else)
|
|
14
76
|
|
|
15
77
|
- [x] Use `uv init --build-backend maturin` for canonical layout
|
|
@@ -323,7 +385,8 @@ wired to real data. Those are Phase 2.
|
|
|
323
385
|
## Public Instance Track
|
|
324
386
|
|
|
325
387
|
Independent of Phase 1–6. Gates the hosted instance, not the
|
|
326
|
-
code. Runs in parallel.
|
|
388
|
+
code. Runs in parallel. Release-gated by the current release-track
|
|
389
|
+
section above.
|
|
327
390
|
|
|
328
391
|
- [ ] Pin `KLMCP_MODE` in `kernel_lore_mcp.config`
|
|
329
392
|
(`local` default, `hosted` opt-in). Same binary, runtime
|
|
@@ -71,6 +71,9 @@ env-driven). Proposed:
|
|
|
71
71
|
```
|
|
72
72
|
KLMCP_MODE=local # default
|
|
73
73
|
KLMCP_MODE=hosted # enables embargo quarantine + rate limits
|
|
74
|
+
|
|
75
|
+
# or equivalently on the serve CLI:
|
|
76
|
+
kernel-lore-mcp serve --transport http --mode hosted
|
|
74
77
|
```
|
|
75
78
|
|
|
76
79
|
No feature flag hides the code paths. A hosted instance that
|
|
@@ -49,7 +49,11 @@ at the open internet.
|
|
|
49
49
|
| `KLMCP_COST_CAP_EXPENSIVE` | 4 | Rarely; expensive tools are expensive |
|
|
50
50
|
| `KLMCP_MAINTAINERS_FILE` | `<data_dir>/MAINTAINERS` | Custom kernel-tree snapshot path |
|
|
51
51
|
| `KLMCP_CURSOR_KEY` | (unset) | Required in http mode once pagination ships |
|
|
52
|
+
| `KLMCP_MODE` | `local` | `hosted` for the public-safe posture + quieter operator logs |
|
|
52
53
|
| `KLMCP_LOG_LEVEL` | INFO | DEBUG when diagnosing a specific request |
|
|
54
|
+
| `KLMCP_SLOW_REQUEST_MS` | mode-aware (`1000` hosted / `3000` local) | Lower for tighter slow-request profiling |
|
|
55
|
+
| `KLMCP_SLOW_TOOL_MS` | mode-aware (`500` hosted / `2000` local) | Lower for tool-latency profiling |
|
|
56
|
+
| `KLMCP_SLOW_QUEUE_WAIT_MS` | mode-aware (`25` hosted / `100` local) | Lower to surface admission-delay incidents sooner |
|
|
53
57
|
| `KLMCP_DISABLE_OVER` | (unset) | Set to `1` for parity tests that compare the over.db indexed paths against the legacy Parquet scan. Production leaves this unset. |
|
|
54
58
|
| `KLMCP_BIND` | 127.0.0.1 | **`0.0.0.0` only when behind a reverse proxy** |
|
|
55
59
|
|
|
@@ -134,6 +138,25 @@ What to alert on:
|
|
|
134
138
|
regression (the OOM round should make this unreachable, but
|
|
135
139
|
worth watching).
|
|
136
140
|
|
|
141
|
+
## Adversarial harness
|
|
142
|
+
|
|
143
|
+
Before changing cost caps or the over.db pool, run the hosted-load
|
|
144
|
+
harness and compare client-observed latency with the server-side
|
|
145
|
+
histograms:
|
|
146
|
+
|
|
147
|
+
```sh
|
|
148
|
+
./.venv/bin/python scripts/bench/bench_hosted_adversarial.py \
|
|
149
|
+
--json-out /tmp/klmcp-hosted-load.json
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
Interpretation:
|
|
153
|
+
|
|
154
|
+
- If client p95 rises while `/status` stays fast and the server-side
|
|
155
|
+
tool histogram stays modest, the pain is queueing / transport /
|
|
156
|
+
admission overhead, not the inner reader path.
|
|
157
|
+
- If server-side tool p95 rises with client p95, the tool body is the
|
|
158
|
+
real hotspot and merits profiling before any cap changes.
|
|
159
|
+
|
|
137
160
|
## Known gaps (not blocking launch, worth knowing)
|
|
138
161
|
|
|
139
162
|
- **Per-IP fairness** — the cost-class semaphore is process-global.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Public Launch Checklist
|
|
2
|
+
|
|
3
|
+
This is the "do we actually trust this hosted box?" checklist for a
|
|
4
|
+
full-corpus public deployment.
|
|
5
|
+
|
|
6
|
+
The goal is not paperwork. The goal is to keep us from launching a
|
|
7
|
+
box that is technically up but operationally blind, query-hostile, or
|
|
8
|
+
quietly broken.
|
|
9
|
+
|
|
10
|
+
## 1. Corpus and shard health
|
|
11
|
+
|
|
12
|
+
- `kernel-lore-mcp status --data-dir "$KLMCP_DATA_DIR"` reports
|
|
13
|
+
`generation >= 1` and `freshness_ok == true`.
|
|
14
|
+
- `kernel-lore-doctor --data-dir "$KLMCP_DATA_DIR"` reports:
|
|
15
|
+
`healthy == total`, `broken == 0`, `repairable == 0`.
|
|
16
|
+
- `over_db_ready/open_ok == true/true`.
|
|
17
|
+
- Expected tier markers are present for the surface we are exposing:
|
|
18
|
+
`bm25`, `trigram`, `tid`, `path_vocab`.
|
|
19
|
+
|
|
20
|
+
## 2. Hosted posture
|
|
21
|
+
|
|
22
|
+
- The server is running with `KLMCP_MODE=hosted` or
|
|
23
|
+
`kernel-lore-mcp serve --mode hosted`.
|
|
24
|
+
- Bind is intentional:
|
|
25
|
+
`127.0.0.1` behind a reverse proxy, or explicit `0.0.0.0`
|
|
26
|
+
with equivalent network controls.
|
|
27
|
+
- Hosted regex posture is enforced:
|
|
28
|
+
list-scoped, anchored, metadata-only regexes succeed; unsafe
|
|
29
|
+
full-corpus or patch/prose regex shapes reject fast with
|
|
30
|
+
`hosted_restriction`.
|
|
31
|
+
|
|
32
|
+
## 3. Metrics and overload visibility
|
|
33
|
+
|
|
34
|
+
- `/metrics` is reachable from the monitoring path.
|
|
35
|
+
- `kernel_lore_mcp_requests_total`,
|
|
36
|
+
`kernel_lore_mcp_request_latency_seconds`,
|
|
37
|
+
`kernel_lore_mcp_tool_calls_total`,
|
|
38
|
+
`kernel_lore_mcp_tool_latency_seconds`,
|
|
39
|
+
`kernel_lore_mcp_tool_runtime_seconds`,
|
|
40
|
+
`kernel_lore_mcp_tool_queue_wait_seconds`, and
|
|
41
|
+
`kernel_lore_mcp_tool_inflight` are all present.
|
|
42
|
+
- A synthetic overload run records non-`ok` statuses, including
|
|
43
|
+
`rate_limited`, in `/metrics`.
|
|
44
|
+
|
|
45
|
+
## 4. Repeatable hosted-load gate
|
|
46
|
+
|
|
47
|
+
Run the adversarial harness against the exact binary + config you
|
|
48
|
+
intend to expose:
|
|
49
|
+
|
|
50
|
+
```sh
|
|
51
|
+
./.venv/bin/python scripts/bench/bench_hosted_adversarial.py \
|
|
52
|
+
--json-out /tmp/klmcp-hosted-load.json
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Pass criteria:
|
|
56
|
+
|
|
57
|
+
- Cheap flood completes without `rate_limited`.
|
|
58
|
+
- Moderate and expensive saturation both emit `rate_limited`.
|
|
59
|
+
- `/status` remains responsive while those tool classes saturate.
|
|
60
|
+
- The JSON report shows both client-observed latency and server-side
|
|
61
|
+
histogram summaries so we can distinguish queueing from tool-body
|
|
62
|
+
work.
|
|
63
|
+
|
|
64
|
+
For a longer soak on a live box, also run:
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
uv run python scripts/bench/stress_mcp_multiprocess.py \
|
|
68
|
+
--base-url http://127.0.0.1:8080 \
|
|
69
|
+
--scenario mixed_hot \
|
|
70
|
+
--processes 4 \
|
|
71
|
+
--concurrency-per-process 16 \
|
|
72
|
+
--duration-seconds 600 \
|
|
73
|
+
--json-out /tmp/klmcp-soak.json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Use this when you want the “can we make it ugly over 10 minutes?”
|
|
77
|
+
answer, not just the short adversarial gate.
|
|
78
|
+
|
|
79
|
+
## 5. Operator-log readability
|
|
80
|
+
|
|
81
|
+
- Hosted default logs are readable without hand-filtering.
|
|
82
|
+
- Third-party INFO spam is absent by default.
|
|
83
|
+
- Startup logs state:
|
|
84
|
+
version, mode, transport, bind/port, data dir, and slow-path
|
|
85
|
+
profiling thresholds.
|
|
86
|
+
- Slow requests, slow tool runs, delayed admission, and timeouts emit
|
|
87
|
+
structured warning/info lines with enough context to debug the next
|
|
88
|
+
incident.
|
|
89
|
+
|
|
90
|
+
## 6. Surface sanity
|
|
91
|
+
|
|
92
|
+
- `scripts/agentic_smoke.sh local` passes against the target data dir.
|
|
93
|
+
- HTTP smoke passes:
|
|
94
|
+
`uv run pytest tests/python/test_http_transport.py -q`
|
|
95
|
+
- stdio smoke passes:
|
|
96
|
+
`uv run pytest tests/python/test_stdio_subprocess.py -q`
|
|
97
|
+
|
|
98
|
+
## 7. Release proof
|
|
99
|
+
|
|
100
|
+
- The tagged release version matches:
|
|
101
|
+
`pyproject.toml`, `Cargo.toml`, `src/kernel_lore_mcp/__init__.py`.
|
|
102
|
+
- `CHANGELOG.md` contains a dated section for the exact version.
|
|
103
|
+
- A clean install from PyPI succeeds in a throwaway venv and both
|
|
104
|
+
`kernel-lore-mcp --help` and `kernel-lore-sync --help` work.
|
|
@@ -48,6 +48,10 @@ mkdir -p "$KLMCP_DATA_DIR"
|
|
|
48
48
|
--include '/netdev/*'
|
|
49
49
|
# Drop --include entirely to mirror all 390 shards (will take hours
|
|
50
50
|
# and ~100+ GB of disk on the first run).
|
|
51
|
+
# Keep BM25 deferred on a serving box unless you have measured that the
|
|
52
|
+
# overlap is acceptable. Inline `--with-bm25` is the heavier path;
|
|
53
|
+
# prefer `kernel-lore-ingest --rebuild-bm25` off-peak if prose freshness
|
|
54
|
+
# matters.
|
|
51
55
|
|
|
52
56
|
# 0A.5b — over.db has already been written incrementally by the
|
|
53
57
|
# sync in 0A.4 (because we passed --with-over). If you skipped that
|
|
@@ -63,6 +67,16 @@ mkdir -p "$KLMCP_DATA_DIR"
|
|
|
63
67
|
# 0A.6 — confirm the index is live (no HTTP needed)
|
|
64
68
|
./.venv/bin/kernel-lore-mcp status --data-dir "$KLMCP_DATA_DIR"
|
|
65
69
|
# Expect: {"generation": >= 1, "freshness_ok": true, ...}
|
|
70
|
+
# While a sync is active, status also reports `writer_lock_present`,
|
|
71
|
+
# `sync_active`, and the current sync stage from `state/sync.json`.
|
|
72
|
+
|
|
73
|
+
# 0A.6b — inspect shard/index health. If a prior run left poisoned shard
|
|
74
|
+
# repos behind, --heal repairs unborn HEADs in place and removes
|
|
75
|
+
# unrecoverable shard repos so the next sync reclones them cleanly.
|
|
76
|
+
cargo build --release --bin kernel-lore-doctor
|
|
77
|
+
./target/release/kernel-lore-doctor --data-dir "$KLMCP_DATA_DIR"
|
|
78
|
+
# Or repair + clean automatically:
|
|
79
|
+
./target/release/kernel-lore-doctor --data-dir "$KLMCP_DATA_DIR" --heal
|
|
66
80
|
|
|
67
81
|
# 0A.7 — sanity-check the MCP surface without burning API tokens
|
|
68
82
|
./scripts/agentic_smoke.sh local
|
|
@@ -10,6 +10,32 @@ inconsistencies — discovered during the build or validation.
|
|
|
10
10
|
|
|
11
11
|
Items are ordered by **user-visible impact**, not by ease of fix.
|
|
12
12
|
|
|
13
|
+
## Hosted-readiness addendum (2026-04-21)
|
|
14
|
+
|
|
15
|
+
The live full-corpus hosted run on `server6` closed one loop and
|
|
16
|
+
opened another:
|
|
17
|
+
|
|
18
|
+
- The shard-corruption incident was real, and the new
|
|
19
|
+
`kernel-lore-doctor --heal` path fixed it cleanly (16 broken
|
|
20
|
+
shard repos removed; full refetch + ingest completed with
|
|
21
|
+
`failed_shards=0`). The remaining gap is **automatic sync-side
|
|
22
|
+
self-heal**, not further manual-repair tooling.
|
|
23
|
+
- The expensive-path posture is now the bigger blocker:
|
|
24
|
+
`lore_regex` on the full corpus timed out even for simple,
|
|
25
|
+
list-scoped patterns, and overload produced the correct
|
|
26
|
+
`query_timeout` + `rate_limited` mix but still proved the tool is
|
|
27
|
+
not public-ready in its current shape.
|
|
28
|
+
- Client-side stress also showed a metrics gap: `rate_limited`
|
|
29
|
+
surfaced to callers but did not show up cleanly in `/metrics`,
|
|
30
|
+
and end-to-end request latency inflated under concurrency without
|
|
31
|
+
a matching request-scope histogram on the server side.
|
|
32
|
+
- `_cached_corpus_stats` improved from timeout to ~2.2 s once
|
|
33
|
+
warmed, but still needs a generation-bound cache/warm path before
|
|
34
|
+
it is safe on a public box.
|
|
35
|
+
|
|
36
|
+
These items now roll into `docs/plans/2026-04-20-v0.3.0-plan.md`
|
|
37
|
+
Phase 2 (hosted-readiness hardening).
|
|
38
|
+
|
|
13
39
|
## Performance
|
|
14
40
|
|
|
15
41
|
### F1. patch_search latency = 68 seconds (SHIPPED 2026-04-19, 6.8x win)
|