kernel-lore-mcp 0.2.2__tar.gz → 0.3.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.
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/.github/workflows/ci.yml +18 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/CHANGELOG.md +51 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/Cargo.lock +1 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/Cargo.toml +5 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/PKG-INFO +17 -8
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/README.md +16 -7
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/TODO.md +49 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/deployment-modes.md +3 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/production-hardening.md +23 -0
- kernel_lore_mcp-0.3.0/docs/ops/public-launch-checklist.md +89 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/runbook.md +8 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-17-overdb-followups.md +26 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-20-v0.3.0-plan.md +167 -36
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/pyproject.toml +3 -1
- kernel_lore_mcp-0.3.0/scripts/bench/bench_hosted_adversarial.py +572 -0
- kernel_lore_mcp-0.3.0/src/bin/doctor.rs +719 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/sync.rs +144 -7
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/ingest.rs +305 -27
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/__init__.py +1 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/__main__.py +49 -2
- kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/cli/doctor.py +150 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cli/sync.py +48 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/config.py +8 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cost_class.py +52 -0
- kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/logging_.py +115 -0
- kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/observability.py +162 -0
- kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/routes/metrics.py +226 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/server.py +13 -0
- kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/timeout.py +105 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/corpus_stats.py +70 -30
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/primitives.py +43 -1
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/python.rs +5 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/reader.rs +27 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/sync.rs +122 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_coverage_stats.py +37 -10
- kernel_lore_mcp-0.3.0/tests/python/test_logging_profile.py +91 -0
- kernel_lore_mcp-0.3.0/tests/python/test_observability.py +136 -0
- kernel_lore_mcp-0.3.0/tests/python/test_regex_hosted.py +78 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/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.0}/.github/workflows/release.yml +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/.gitignore +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/.python-version +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/CLAUDE.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/CONTRIBUTING.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/GOVERNANCE.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/LEGAL.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/LICENSE +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/SECURITY.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/README.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/data-flow.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/four-tier-index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/over-db.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/overview.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/reciprocity.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/trade-offs.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/demos/first-session.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/bm25-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/compressed-store.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/metadata-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/path-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/tokenizer-spec.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/trigram-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ingestion/grokmirror.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ingestion/mbox-parsing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ingestion/patch-parsing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ingestion/shard-walking.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/mcp/client-config.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/mcp/query-routing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/mcp/tools.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/mcp/transport-auth.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/corpus-coverage.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/cost-model.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/ec2-sizing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/monitoring.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/threat-model.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/update-cadence.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/update-frequency.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-14-best-in-class-kernel-mcp.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-15-internalize-grokmirror.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-15-mcp-spec-coverage-and-uplift.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-17-overdb-metadata-tier.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-agent-ergonomics.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-best-in-class-mcp-survey.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-external-data-sources.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-gix-vs-git2.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-mcp-python-sdk.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-pyo3-maturin.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-search-library-landscape.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-storage-footprint.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-tantivy.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-workflow-gap-analysis.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-15-fuzzy-search-design.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-15-path-mentions.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-17-overdb-validation.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/training-retriever.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/README.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/01-research.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/02-design.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/03-implement.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/04-test.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/05-quality.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/06-review.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/07-commit.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/08-debug.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/09-optimize.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/10-document.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/code-quality.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/data-structures.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/boundaries.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/concurrency.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/dependencies.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/errors.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/modules.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/git.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/language.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/libraries/fastmcp.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/libraries/httpx.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/libraries/pydantic.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/libraries/structlog.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/naming.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/pyo3-maturin.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/testing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/uv.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/cargo.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/01-research.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/02-design.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/03-implement.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/04-test.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/05-quality.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/06-review.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/07-commit.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/08-debug.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/09-optimize.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/10-document.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/code-quality.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/boundaries.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/concurrency.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/data-structures.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/errors.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/modules.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/ffi.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/index.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/language.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/arrow-parquet.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/gix.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/pyo3.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/regex-automata.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/roaring-fst.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/tantivy.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/zstd.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/naming.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/testing.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/unsafe.md +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/rust-toolchain.toml +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/agentic_smoke.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/bench/bench_concurrent_mixed.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/grokmirror-personal.conf +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/grokmirror.conf +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/klmcp-doctor.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/klmcp-grok-pull.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/klmcp-ingest.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/post-pull-hook.sh +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/rust_call_graph.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/etc-kernel-lore-mcp-env.sample +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-grokmirror.service +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-grokmirror.timer +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-ingest.path +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-ingest.service +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-mcp.service +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-sync.service +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-sync.timer +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/bench_blob_read.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/bench_ingest_stages.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/build_git_sidecar.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/build_over.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/ingest.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/reindex.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bm25.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/embedding.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/error.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/git_sidecar.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/_core.pyi +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/_surface_manifest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cli/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cli/embed.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cli/ingest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cursor.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/embedding.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/errors.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/freshness.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/kwic.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/mapping.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/models.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/prompts.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/reader_cache.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/resources/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/resources/blind_spots.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/resources/coverage_stats.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/resources/templates.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/routes/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/routes/status.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/sampling.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/activity.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/author_footprint.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/author_profile.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/expand_citation.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/explain_patch.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/file_timeline.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/maintainer_profile.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/message.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/nearest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/patch.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/patch_diff.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/patch_search.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/path_mentions.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/sampling_tools.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/search.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/series.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/stable_backport.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/subsystem_churn.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/thread.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/thread_state.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/lib.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/maintainers.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/metadata.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/over.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/parse.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/path_tier.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/router.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/schema.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/state.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/store.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/tid.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/timeout.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/trigram.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/bin_ingest.rs +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/conftest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/fixtures/__init__.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_annotations.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_cost_class.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_cost_hints.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_cursor.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_embedding_e2e.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_errors.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_freshness.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_fuzzy_search.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_http_transport.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_ingest_and_reader.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_kwic.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_mcp_adversarial.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_mcp_tools_e2e.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_path_mentions.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_primitives_e2e.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_prompts.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_resource_templates.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_resources_routes.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_response_format.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_sampling_tools.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_smoke.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_status_subcommand.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_stdio_subprocess.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_surface_manifest.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_sync_cli.py +0 -0
- {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/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,57 @@ release tags move them into a dated section. Release process in
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.3.0] — 2026-04-21
|
|
14
|
+
|
|
15
|
+
### Added
|
|
16
|
+
|
|
17
|
+
**Hosted deployment profile + operator profiling.**
|
|
18
|
+
- `kernel-lore-mcp serve` now accepts `--mode local|hosted`, and the
|
|
19
|
+
chosen runtime posture is logged explicitly at startup along with
|
|
20
|
+
bind/port, data dir, and the active slow-path thresholds.
|
|
21
|
+
- Python-side hosted logging now emits structured slow-path events for
|
|
22
|
+
MCP requests, tool calls, inner runtime, and cost-class admission
|
|
23
|
+
delay, so operators can distinguish queueing from tool-body work
|
|
24
|
+
during live incidents.
|
|
25
|
+
- New environment knobs:
|
|
26
|
+
`KLMCP_SLOW_REQUEST_MS`, `KLMCP_SLOW_TOOL_MS`, and
|
|
27
|
+
`KLMCP_SLOW_QUEUE_WAIT_MS`.
|
|
28
|
+
|
|
29
|
+
**Repeatable hosted-load gate.**
|
|
30
|
+
- Added `scripts/bench/bench_hosted_adversarial.py`: a real HTTP/MCP
|
|
31
|
+
harness that boots the server in hosted mode, floods cheap queries,
|
|
32
|
+
saturates moderate and expensive tools, polls `/status` concurrently,
|
|
33
|
+
and emits a JSON report comparing client-observed latency with
|
|
34
|
+
server-side histograms.
|
|
35
|
+
- Wired the harness into CI and added
|
|
36
|
+
`docs/ops/public-launch-checklist.md` so launch readiness is a
|
|
37
|
+
repeatable gate, not an operator memory exercise.
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
|
|
41
|
+
**The would-be `0.2.3` hosted-hardening line ships here.**
|
|
42
|
+
- `kernel-lore-sync` now self-heals poisoned local shard repos by
|
|
43
|
+
deleting zero-ref / unopenable repos and recloning them during sync.
|
|
44
|
+
- Hosted `lore_regex` is permanently narrowed to list-scoped,
|
|
45
|
+
anchored, metadata-only regex shapes; unsafe full-corpus / prose /
|
|
46
|
+
patch scans now reject fast with `hosted_restriction`.
|
|
47
|
+
- `lore_corpus_stats` is now cached by generation and warmed at server
|
|
48
|
+
startup so the steady-state path stays off the timeout cliff.
|
|
49
|
+
- Sync rebuilds `paths/vocab.txt` automatically, eliminating the
|
|
50
|
+
post-sync manual step for `lore_path_mentions`.
|
|
51
|
+
- `/metrics` now records end-to-end request latency, queue-wait, tool
|
|
52
|
+
latency, and non-`ok` statuses including `rate_limited` even when a
|
|
53
|
+
call is rejected before the tool body runs.
|
|
54
|
+
|
|
55
|
+
### Fixed
|
|
56
|
+
|
|
57
|
+
- Hosted default logs are quiet enough to follow a real incident:
|
|
58
|
+
third-party INFO chatter is suppressed by default while our own
|
|
59
|
+
warnings/errors remain visible.
|
|
60
|
+
- The latency gap seen in client stress runs is now measurable rather
|
|
61
|
+
than anecdotal: the hosted-load harness and the new metrics/logging
|
|
62
|
+
surface make queueing / transport inflation directly visible.
|
|
63
|
+
|
|
13
64
|
## [0.2.2] — 2026-04-21
|
|
14
65
|
|
|
15
66
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "kernel_lore_mcp"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.0"
|
|
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.0
|
|
4
4
|
Classifier: Development Status :: 2 - Pre-Alpha
|
|
5
5
|
Classifier: Intended Audience :: Developers
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -88,6 +88,10 @@ kernel-lore-mcp status --data-dir "$KLMCP_DATA_DIR"
|
|
|
88
88
|
# maintainers / git_sidecar boolean tells you which tools will actually
|
|
89
89
|
# return data on this deployment.
|
|
90
90
|
|
|
91
|
+
# 4b. inspect shard/index health; add --heal to repair unborn shard HEADs
|
|
92
|
+
# and remove unrecoverable shard repos so the next sync reclones them
|
|
93
|
+
kernel-lore-doctor --data-dir "$KLMCP_DATA_DIR"
|
|
94
|
+
|
|
91
95
|
# 5. verify the MCP surface — zero API cost
|
|
92
96
|
git clone --depth 1 https://github.com/mjbommar/kernel-lore-mcp.git
|
|
93
97
|
cd kernel-lore-mcp && ./scripts/agentic_smoke.sh local
|
|
@@ -130,8 +134,9 @@ git clone https://github.com/mjbommar/kernel-lore-mcp.git
|
|
|
130
134
|
cd kernel-lore-mcp
|
|
131
135
|
uv sync
|
|
132
136
|
uv run maturin develop --release
|
|
133
|
-
cargo build --release --bin kernel-lore-sync --bin kernel-lore-ingest
|
|
137
|
+
cargo build --release --bin kernel-lore-sync --bin kernel-lore-ingest --bin kernel-lore-doctor
|
|
134
138
|
./target/release/kernel-lore-sync --data-dir $KLMCP_DATA_DIR --with-over
|
|
139
|
+
./target/release/kernel-lore-doctor --data-dir $KLMCP_DATA_DIR
|
|
135
140
|
```
|
|
136
141
|
|
|
137
142
|
### Going bigger
|
|
@@ -143,13 +148,15 @@ Want production-grade systemd deployment (single `klmcp-sync.timer`
|
|
|
143
148
|
replacing the pre-v0.2.0 grokmirror + ingest pair)?
|
|
144
149
|
[`docs/ops/runbook.md`](./docs/ops/runbook.md) §1 onwards.
|
|
145
150
|
|
|
146
|
-
## Status — v0.
|
|
151
|
+
## Status — v0.3.0 (2026-04-21)
|
|
147
152
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
+
Current release: the hosted-readiness line that would previously have
|
|
154
|
+
been cut as `0.2.3` now lands in `v0.3.0`. The main additions on top of
|
|
155
|
+
`0.2.2` are: sync self-healing for poisoned shard repos, hosted-mode
|
|
156
|
+
regex gating, generation-bound `lore_corpus_stats` caching, automatic
|
|
157
|
+
path-vocab rebuild during sync, explicit `local`/`hosted` deployment
|
|
158
|
+
profiles, structured slow-path profiling logs, and a repeatable
|
|
159
|
+
HTTP/MCP adversarial-load harness plus public-launch checklist.
|
|
153
160
|
|
|
154
161
|
Shipped:
|
|
155
162
|
|
|
@@ -245,6 +252,8 @@ retriever on that self-supervised signal. Recipe:
|
|
|
245
252
|
5-min cadence policy + fanout-to-one cost analysis
|
|
246
253
|
- [`docs/ops/production-hardening.md`](./docs/ops/production-hardening.md) —
|
|
247
254
|
threat model, cost-class caps, capability flags, systemd layout
|
|
255
|
+
- [`docs/ops/public-launch-checklist.md`](./docs/ops/public-launch-checklist.md) —
|
|
256
|
+
pre-launch hosted-box gate: shard health, metrics, harness, log readability
|
|
248
257
|
- [`docs/mcp/client-config.md`](./docs/mcp/client-config.md) —
|
|
249
258
|
copy-paste snippets for Claude Code, Codex, Cursor, Zed
|
|
250
259
|
- [`docs/mcp/transport-auth.md`](./docs/mcp/transport-auth.md) —
|
|
@@ -53,6 +53,10 @@ kernel-lore-mcp status --data-dir "$KLMCP_DATA_DIR"
|
|
|
53
53
|
# maintainers / git_sidecar boolean tells you which tools will actually
|
|
54
54
|
# return data on this deployment.
|
|
55
55
|
|
|
56
|
+
# 4b. inspect shard/index health; add --heal to repair unborn shard HEADs
|
|
57
|
+
# and remove unrecoverable shard repos so the next sync reclones them
|
|
58
|
+
kernel-lore-doctor --data-dir "$KLMCP_DATA_DIR"
|
|
59
|
+
|
|
56
60
|
# 5. verify the MCP surface — zero API cost
|
|
57
61
|
git clone --depth 1 https://github.com/mjbommar/kernel-lore-mcp.git
|
|
58
62
|
cd kernel-lore-mcp && ./scripts/agentic_smoke.sh local
|
|
@@ -95,8 +99,9 @@ git clone https://github.com/mjbommar/kernel-lore-mcp.git
|
|
|
95
99
|
cd kernel-lore-mcp
|
|
96
100
|
uv sync
|
|
97
101
|
uv run maturin develop --release
|
|
98
|
-
cargo build --release --bin kernel-lore-sync --bin kernel-lore-ingest
|
|
102
|
+
cargo build --release --bin kernel-lore-sync --bin kernel-lore-ingest --bin kernel-lore-doctor
|
|
99
103
|
./target/release/kernel-lore-sync --data-dir $KLMCP_DATA_DIR --with-over
|
|
104
|
+
./target/release/kernel-lore-doctor --data-dir $KLMCP_DATA_DIR
|
|
100
105
|
```
|
|
101
106
|
|
|
102
107
|
### Going bigger
|
|
@@ -108,13 +113,15 @@ Want production-grade systemd deployment (single `klmcp-sync.timer`
|
|
|
108
113
|
replacing the pre-v0.2.0 grokmirror + ingest pair)?
|
|
109
114
|
[`docs/ops/runbook.md`](./docs/ops/runbook.md) §1 onwards.
|
|
110
115
|
|
|
111
|
-
## Status — v0.
|
|
116
|
+
## Status — v0.3.0 (2026-04-21)
|
|
112
117
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
+
Current release: the hosted-readiness line that would previously have
|
|
119
|
+
been cut as `0.2.3` now lands in `v0.3.0`. The main additions on top of
|
|
120
|
+
`0.2.2` are: sync self-healing for poisoned shard repos, hosted-mode
|
|
121
|
+
regex gating, generation-bound `lore_corpus_stats` caching, automatic
|
|
122
|
+
path-vocab rebuild during sync, explicit `local`/`hosted` deployment
|
|
123
|
+
profiles, structured slow-path profiling logs, and a repeatable
|
|
124
|
+
HTTP/MCP adversarial-load harness plus public-launch checklist.
|
|
118
125
|
|
|
119
126
|
Shipped:
|
|
120
127
|
|
|
@@ -210,6 +217,8 @@ retriever on that self-supervised signal. Recipe:
|
|
|
210
217
|
5-min cadence policy + fanout-to-one cost analysis
|
|
211
218
|
- [`docs/ops/production-hardening.md`](./docs/ops/production-hardening.md) —
|
|
212
219
|
threat model, cost-class caps, capability flags, systemd layout
|
|
220
|
+
- [`docs/ops/public-launch-checklist.md`](./docs/ops/public-launch-checklist.md) —
|
|
221
|
+
pre-launch hosted-box gate: shard health, metrics, harness, log readability
|
|
213
222
|
- [`docs/mcp/client-config.md`](./docs/mcp/client-config.md) —
|
|
214
223
|
copy-paste snippets for Claude Code, Codex, Cursor, Zed
|
|
215
224
|
- [`docs/mcp/transport-auth.md`](./docs/mcp/transport-auth.md) —
|
|
@@ -10,6 +10,53 @@ 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-21)
|
|
14
|
+
|
|
15
|
+
We are working straight to `v0.3.0` now. There is **no standalone
|
|
16
|
+
`0.2.3` release tag** planned, but the would-be `0.2.3` hardening
|
|
17
|
+
line is still tracked separately here because it is the first block
|
|
18
|
+
of work that must land before a public hosted launch.
|
|
19
|
+
|
|
20
|
+
### 0.2.3 carry-forward — land these in `v0.3.0` first
|
|
21
|
+
|
|
22
|
+
- [x] `kernel-lore-sync` self-heals poisoned shard repos: detect
|
|
23
|
+
zero-ref / unopenable local shard repos, delete them, and
|
|
24
|
+
reclone automatically. `kernel-lore-doctor --heal` stays as the
|
|
25
|
+
explicit maintenance tool, not the primary recovery path.
|
|
26
|
+
- [x] `lore_regex` public-hosted posture: disable/gate it in hosted
|
|
27
|
+
mode or add enough admission control that the full-corpus default
|
|
28
|
+
path never just burns 5 s and returns `query_timeout`.
|
|
29
|
+
- [x] `_cached_corpus_stats` generation cache + warm path so warm
|
|
30
|
+
calls stay well under the wall-clock cap on the full corpus.
|
|
31
|
+
- [x] `/metrics` must record `rate_limited` and every other
|
|
32
|
+
non-`ok` status consistently, including overload that rejects
|
|
33
|
+
before the tool body runs.
|
|
34
|
+
- [x] Add end-to-end request latency + queue-wait histograms so the
|
|
35
|
+
client-side p95 inflation seen under concurrency is visible in
|
|
36
|
+
Prometheus.
|
|
37
|
+
- [x] Auto-build `paths/vocab.txt` during sync so
|
|
38
|
+
`lore_path_mentions` works on a fresh healthy hosted box without
|
|
39
|
+
a manual follow-up command.
|
|
40
|
+
- [x] Hosted default logging drops `tantivy::*` INFO churn unless
|
|
41
|
+
explicitly enabled; operator logs should show our own progress /
|
|
42
|
+
warning / error lines first.
|
|
43
|
+
|
|
44
|
+
### 0.3.0 target — ship after the carry-forward hardening line above
|
|
45
|
+
|
|
46
|
+
- [x] Hosted deployment profile (`local` vs `hosted`, or equivalent)
|
|
47
|
+
that flips the exact runtime defaults we intend to expose on the
|
|
48
|
+
public internet.
|
|
49
|
+
- [x] Repeatable adversarial HTTP/MCP load harness in CI: cheap
|
|
50
|
+
flood, moderate over-cap concurrency, expensive-tool saturation,
|
|
51
|
+
and concurrent `/status` responsiveness checks.
|
|
52
|
+
- [x] Public-safe `lore_regex` redesign or permanently narrower
|
|
53
|
+
admission control. Current full-corpus behavior is not launchable.
|
|
54
|
+
- [x] Reconcile client-observed latency vs server-side tool latency
|
|
55
|
+
before retuning concurrency caps or over.db pool sizes.
|
|
56
|
+
- [x] Public-launch checklist against a full-corpus host: generation
|
|
57
|
+
health, shard health, tool surface, metrics, abuse posture, and
|
|
58
|
+
operator-log readability.
|
|
59
|
+
|
|
13
60
|
## Phase 0 — scaffold correctness (blocks everything else)
|
|
14
61
|
|
|
15
62
|
- [x] Use `uv init --build-backend maturin` for canonical layout
|
|
@@ -323,7 +370,8 @@ wired to real data. Those are Phase 2.
|
|
|
323
370
|
## Public Instance Track
|
|
324
371
|
|
|
325
372
|
Independent of Phase 1–6. Gates the hosted instance, not the
|
|
326
|
-
code. Runs in parallel.
|
|
373
|
+
code. Runs in parallel. Release-gated by the current release-track
|
|
374
|
+
section above.
|
|
327
375
|
|
|
328
376
|
- [ ] Pin `KLMCP_MODE` in `kernel_lore_mcp.config`
|
|
329
377
|
(`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,89 @@
|
|
|
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
|
+
## 5. Operator-log readability
|
|
65
|
+
|
|
66
|
+
- Hosted default logs are readable without hand-filtering.
|
|
67
|
+
- Third-party INFO spam is absent by default.
|
|
68
|
+
- Startup logs state:
|
|
69
|
+
version, mode, transport, bind/port, data dir, and slow-path
|
|
70
|
+
profiling thresholds.
|
|
71
|
+
- Slow requests, slow tool runs, delayed admission, and timeouts emit
|
|
72
|
+
structured warning/info lines with enough context to debug the next
|
|
73
|
+
incident.
|
|
74
|
+
|
|
75
|
+
## 6. Surface sanity
|
|
76
|
+
|
|
77
|
+
- `scripts/agentic_smoke.sh local` passes against the target data dir.
|
|
78
|
+
- HTTP smoke passes:
|
|
79
|
+
`uv run pytest tests/python/test_http_transport.py -q`
|
|
80
|
+
- stdio smoke passes:
|
|
81
|
+
`uv run pytest tests/python/test_stdio_subprocess.py -q`
|
|
82
|
+
|
|
83
|
+
## 7. Release proof
|
|
84
|
+
|
|
85
|
+
- The tagged release version matches:
|
|
86
|
+
`pyproject.toml`, `Cargo.toml`, `src/kernel_lore_mcp/__init__.py`.
|
|
87
|
+
- `CHANGELOG.md` contains a dated section for the exact version.
|
|
88
|
+
- A clean install from PyPI succeeds in a throwaway venv and both
|
|
89
|
+
`kernel-lore-mcp --help` and `kernel-lore-sync --help` work.
|
|
@@ -64,6 +64,14 @@ mkdir -p "$KLMCP_DATA_DIR"
|
|
|
64
64
|
./.venv/bin/kernel-lore-mcp status --data-dir "$KLMCP_DATA_DIR"
|
|
65
65
|
# Expect: {"generation": >= 1, "freshness_ok": true, ...}
|
|
66
66
|
|
|
67
|
+
# 0A.6b — inspect shard/index health. If a prior run left poisoned shard
|
|
68
|
+
# repos behind, --heal repairs unborn HEADs in place and removes
|
|
69
|
+
# unrecoverable shard repos so the next sync reclones them cleanly.
|
|
70
|
+
cargo build --release --bin kernel-lore-doctor
|
|
71
|
+
./target/release/kernel-lore-doctor --data-dir "$KLMCP_DATA_DIR"
|
|
72
|
+
# Or repair + clean automatically:
|
|
73
|
+
./target/release/kernel-lore-doctor --data-dir "$KLMCP_DATA_DIR" --heal
|
|
74
|
+
|
|
67
75
|
# 0A.7 — sanity-check the MCP surface without burning API tokens
|
|
68
76
|
./scripts/agentic_smoke.sh local
|
|
69
77
|
# Expect: PASS: local probe — 6/6 tools, 5/5 resource templates,
|
|
@@ -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)
|