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.
Files changed (273) hide show
  1. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/.github/workflows/ci.yml +18 -0
  2. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/CHANGELOG.md +51 -0
  3. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/Cargo.lock +1 -1
  4. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/Cargo.toml +5 -1
  5. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/PKG-INFO +17 -8
  6. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/README.md +16 -7
  7. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/TODO.md +49 -1
  8. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/deployment-modes.md +3 -0
  9. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/production-hardening.md +23 -0
  10. kernel_lore_mcp-0.3.0/docs/ops/public-launch-checklist.md +89 -0
  11. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/runbook.md +8 -0
  12. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-17-overdb-followups.md +26 -0
  13. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-20-v0.3.0-plan.md +167 -36
  14. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/pyproject.toml +3 -1
  15. kernel_lore_mcp-0.3.0/scripts/bench/bench_hosted_adversarial.py +572 -0
  16. kernel_lore_mcp-0.3.0/src/bin/doctor.rs +719 -0
  17. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/sync.rs +144 -7
  18. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/ingest.rs +305 -27
  19. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/__init__.py +1 -1
  20. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/__main__.py +49 -2
  21. kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/cli/doctor.py +150 -0
  22. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cli/sync.py +48 -0
  23. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/config.py +8 -0
  24. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cost_class.py +52 -0
  25. kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/logging_.py +115 -0
  26. kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/observability.py +162 -0
  27. kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/routes/metrics.py +226 -0
  28. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/server.py +13 -0
  29. kernel_lore_mcp-0.3.0/src/kernel_lore_mcp/timeout.py +105 -0
  30. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/corpus_stats.py +70 -30
  31. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/primitives.py +43 -1
  32. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/python.rs +5 -0
  33. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/reader.rs +27 -0
  34. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/sync.rs +122 -0
  35. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_coverage_stats.py +37 -10
  36. kernel_lore_mcp-0.3.0/tests/python/test_logging_profile.py +91 -0
  37. kernel_lore_mcp-0.3.0/tests/python/test_observability.py +136 -0
  38. kernel_lore_mcp-0.3.0/tests/python/test_regex_hosted.py +78 -0
  39. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/uv.lock +1 -1
  40. kernel_lore_mcp-0.2.2/src/kernel_lore_mcp/logging_.py +0 -44
  41. kernel_lore_mcp-0.2.2/src/kernel_lore_mcp/routes/metrics.py +0 -109
  42. kernel_lore_mcp-0.2.2/src/kernel_lore_mcp/timeout.py +0 -58
  43. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/.github/workflows/release.yml +0 -0
  44. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/.gitignore +0 -0
  45. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/.python-version +0 -0
  46. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/CLAUDE.md +0 -0
  47. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/CONTRIBUTING.md +0 -0
  48. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/GOVERNANCE.md +0 -0
  49. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/LEGAL.md +0 -0
  50. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/LICENSE +0 -0
  51. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/SECURITY.md +0 -0
  52. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/README.md +0 -0
  53. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/data-flow.md +0 -0
  54. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/four-tier-index.md +0 -0
  55. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/over-db.md +0 -0
  56. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/overview.md +0 -0
  57. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/reciprocity.md +0 -0
  58. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/architecture/trade-offs.md +0 -0
  59. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/demos/first-session.md +0 -0
  60. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/bm25-tier.md +0 -0
  61. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/compressed-store.md +0 -0
  62. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/metadata-tier.md +0 -0
  63. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/path-tier.md +0 -0
  64. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/tokenizer-spec.md +0 -0
  65. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/indexing/trigram-tier.md +0 -0
  66. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ingestion/grokmirror.md +0 -0
  67. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ingestion/mbox-parsing.md +0 -0
  68. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ingestion/patch-parsing.md +0 -0
  69. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ingestion/shard-walking.md +0 -0
  70. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/mcp/client-config.md +0 -0
  71. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/mcp/query-routing.md +0 -0
  72. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/mcp/tools.md +0 -0
  73. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/mcp/transport-auth.md +0 -0
  74. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/corpus-coverage.md +0 -0
  75. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/cost-model.md +0 -0
  76. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/ec2-sizing.md +0 -0
  77. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/monitoring.md +0 -0
  78. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/threat-model.md +0 -0
  79. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/update-cadence.md +0 -0
  80. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/ops/update-frequency.md +0 -0
  81. {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
  82. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-15-internalize-grokmirror.md +0 -0
  83. {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
  84. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/plans/2026-04-17-overdb-metadata-tier.md +0 -0
  85. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-agent-ergonomics.md +0 -0
  86. {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
  87. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-external-data-sources.md +0 -0
  88. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-gix-vs-git2.md +0 -0
  89. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-mcp-python-sdk.md +0 -0
  90. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-pyo3-maturin.md +0 -0
  91. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-search-library-landscape.md +0 -0
  92. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-storage-footprint.md +0 -0
  93. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-tantivy.md +0 -0
  94. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-14-workflow-gap-analysis.md +0 -0
  95. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-15-fuzzy-search-design.md +0 -0
  96. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-15-path-mentions.md +0 -0
  97. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/2026-04-17-overdb-validation.md +0 -0
  98. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/research/training-retriever.md +0 -0
  99. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/README.md +0 -0
  100. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/01-research.md +0 -0
  101. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/02-design.md +0 -0
  102. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/03-implement.md +0 -0
  103. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/04-test.md +0 -0
  104. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/05-quality.md +0 -0
  105. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/06-review.md +0 -0
  106. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/07-commit.md +0 -0
  107. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/08-debug.md +0 -0
  108. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/09-optimize.md +0 -0
  109. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/10-document.md +0 -0
  110. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/checklists/index.md +0 -0
  111. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/code-quality.md +0 -0
  112. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/data-structures.md +0 -0
  113. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/boundaries.md +0 -0
  114. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/concurrency.md +0 -0
  115. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/dependencies.md +0 -0
  116. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/errors.md +0 -0
  117. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/design/modules.md +0 -0
  118. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/git.md +0 -0
  119. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/index.md +0 -0
  120. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/language.md +0 -0
  121. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/libraries/fastmcp.md +0 -0
  122. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/libraries/httpx.md +0 -0
  123. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/libraries/pydantic.md +0 -0
  124. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/libraries/structlog.md +0 -0
  125. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/naming.md +0 -0
  126. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/pyo3-maturin.md +0 -0
  127. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/testing.md +0 -0
  128. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/python/uv.md +0 -0
  129. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/cargo.md +0 -0
  130. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/01-research.md +0 -0
  131. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/02-design.md +0 -0
  132. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/03-implement.md +0 -0
  133. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/04-test.md +0 -0
  134. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/05-quality.md +0 -0
  135. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/06-review.md +0 -0
  136. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/07-commit.md +0 -0
  137. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/08-debug.md +0 -0
  138. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/09-optimize.md +0 -0
  139. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/10-document.md +0 -0
  140. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/checklists/index.md +0 -0
  141. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/code-quality.md +0 -0
  142. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/boundaries.md +0 -0
  143. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/concurrency.md +0 -0
  144. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/data-structures.md +0 -0
  145. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/errors.md +0 -0
  146. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/design/modules.md +0 -0
  147. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/ffi.md +0 -0
  148. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/index.md +0 -0
  149. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/language.md +0 -0
  150. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/arrow-parquet.md +0 -0
  151. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/gix.md +0 -0
  152. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/pyo3.md +0 -0
  153. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/regex-automata.md +0 -0
  154. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/roaring-fst.md +0 -0
  155. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/tantivy.md +0 -0
  156. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/libraries/zstd.md +0 -0
  157. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/naming.md +0 -0
  158. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/testing.md +0 -0
  159. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/docs/standards/rust/unsafe.md +0 -0
  160. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/rust-toolchain.toml +0 -0
  161. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/agentic_smoke.sh +0 -0
  162. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/bench/bench_concurrent_mixed.py +0 -0
  163. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/grokmirror-personal.conf +0 -0
  164. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/grokmirror.conf +0 -0
  165. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/klmcp-doctor.sh +0 -0
  166. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/klmcp-grok-pull.sh +0 -0
  167. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/klmcp-ingest.sh +0 -0
  168. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/post-pull-hook.sh +0 -0
  169. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/rust_call_graph.py +0 -0
  170. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/etc-kernel-lore-mcp-env.sample +0 -0
  171. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-grokmirror.service +0 -0
  172. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-grokmirror.timer +0 -0
  173. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-ingest.path +0 -0
  174. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-ingest.service +0 -0
  175. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-mcp.service +0 -0
  176. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-sync.service +0 -0
  177. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/scripts/systemd/klmcp-sync.timer +0 -0
  178. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/bench_blob_read.rs +0 -0
  179. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/bench_ingest_stages.rs +0 -0
  180. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/build_git_sidecar.rs +0 -0
  181. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/build_over.rs +0 -0
  182. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/ingest.rs +0 -0
  183. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bin/reindex.rs +0 -0
  184. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/bm25.rs +0 -0
  185. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/embedding.rs +0 -0
  186. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/error.rs +0 -0
  187. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/git_sidecar.rs +0 -0
  188. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/_core.pyi +0 -0
  189. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/_surface_manifest.py +0 -0
  190. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cli/__init__.py +0 -0
  191. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cli/embed.py +0 -0
  192. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cli/ingest.py +0 -0
  193. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/cursor.py +0 -0
  194. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/embedding.py +0 -0
  195. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/errors.py +0 -0
  196. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/freshness.py +0 -0
  197. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/kwic.py +0 -0
  198. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/mapping.py +0 -0
  199. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/models.py +0 -0
  200. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/prompts.py +0 -0
  201. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/reader_cache.py +0 -0
  202. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/resources/__init__.py +0 -0
  203. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/resources/blind_spots.py +0 -0
  204. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/resources/coverage_stats.py +0 -0
  205. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/resources/templates.py +0 -0
  206. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/routes/__init__.py +0 -0
  207. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/routes/status.py +0 -0
  208. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/sampling.py +0 -0
  209. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/__init__.py +0 -0
  210. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/activity.py +0 -0
  211. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/author_footprint.py +0 -0
  212. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/author_profile.py +0 -0
  213. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/expand_citation.py +0 -0
  214. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/explain_patch.py +0 -0
  215. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/file_timeline.py +0 -0
  216. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/maintainer_profile.py +0 -0
  217. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/message.py +0 -0
  218. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/nearest.py +0 -0
  219. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/patch.py +0 -0
  220. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/patch_diff.py +0 -0
  221. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/patch_search.py +0 -0
  222. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/path_mentions.py +0 -0
  223. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/sampling_tools.py +0 -0
  224. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/search.py +0 -0
  225. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/series.py +0 -0
  226. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/stable_backport.py +0 -0
  227. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/subsystem_churn.py +0 -0
  228. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/thread.py +0 -0
  229. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/kernel_lore_mcp/tools/thread_state.py +0 -0
  230. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/lib.rs +0 -0
  231. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/maintainers.rs +0 -0
  232. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/metadata.rs +0 -0
  233. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/over.rs +0 -0
  234. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/parse.rs +0 -0
  235. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/path_tier.rs +0 -0
  236. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/router.rs +0 -0
  237. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/schema.rs +0 -0
  238. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/state.rs +0 -0
  239. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/store.rs +0 -0
  240. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/tid.rs +0 -0
  241. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/timeout.rs +0 -0
  242. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/src/trigram.rs +0 -0
  243. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/__init__.py +0 -0
  244. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/bin_ingest.rs +0 -0
  245. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/__init__.py +0 -0
  246. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/conftest.py +0 -0
  247. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/fixtures/__init__.py +0 -0
  248. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_annotations.py +0 -0
  249. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_cost_class.py +0 -0
  250. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_cost_hints.py +0 -0
  251. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_cursor.py +0 -0
  252. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_embedding_e2e.py +0 -0
  253. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_errors.py +0 -0
  254. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_freshness.py +0 -0
  255. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_fuzzy_search.py +0 -0
  256. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_http_transport.py +0 -0
  257. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_ingest_and_reader.py +0 -0
  258. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_kwic.py +0 -0
  259. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_mcp_adversarial.py +0 -0
  260. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_mcp_tools_e2e.py +0 -0
  261. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_path_mentions.py +0 -0
  262. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_primitives_e2e.py +0 -0
  263. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_prompts.py +0 -0
  264. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_resource_templates.py +0 -0
  265. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_resources_routes.py +0 -0
  266. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_response_format.py +0 -0
  267. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_sampling_tools.py +0 -0
  268. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_smoke.py +0 -0
  269. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_status_subcommand.py +0 -0
  270. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_stdio_subprocess.py +0 -0
  271. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_surface_manifest.py +0 -0
  272. {kernel_lore_mcp-0.2.2 → kernel_lore_mcp-0.3.0}/tests/python/test_sync_cli.py +0 -0
  273. {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
@@ -2638,7 +2638,7 @@ dependencies = [
2638
2638
 
2639
2639
  [[package]]
2640
2640
  name = "kernel_lore_mcp"
2641
- version = "0.2.2"
2641
+ version = "0.3.0"
2642
2642
  dependencies = [
2643
2643
  "aho-corasick",
2644
2644
  "anyhow",
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "kernel_lore_mcp"
3
- version = "0.2.2"
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.2.2
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.2.2 (2026-04-21)
151
+ ## Status — v0.3.0 (2026-04-21)
147
152
 
148
- Latest patch release: hardens `kernel-lore-sync` for real full-corpus
149
- bootstrap loads. Sync now chooses a memory-aware worker count, reports
150
- its RAM budget in startup logs, and emits live RSS / available-memory
151
- telemetry during fetch and ingest so operators can see pressure before
152
- the host gets OOM-killed.
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.2.2 (2026-04-21)
116
+ ## Status — v0.3.0 (2026-04-21)
112
117
 
113
- Latest patch release: hardens `kernel-lore-sync` for real full-corpus
114
- bootstrap loads. Sync now chooses a memory-aware worker count, reports
115
- its RAM budget in startup logs, and emits live RSS / available-memory
116
- telemetry during fetch and ingest so operators can see pressure before
117
- the host gets OOM-killed.
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)