kernel-lore-mcp 0.2.2__tar.gz → 0.3.1__tar.gz

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