boost-skill-cli 1.0.415__tar.gz → 1.0.417__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 (650) hide show
  1. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/MANIFEST.in +7 -5
  2. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/Makefile +2 -2
  3. {boost_skill_cli-1.0.415/boost_skill_cli.egg-info → boost_skill_cli-1.0.417}/PKG-INFO +4 -1
  4. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/_version.py +2 -2
  5. boost_skill_cli-1.0.417/boost_langchain/__init__.py +51 -0
  6. boost_skill_cli-1.0.417/boost_langchain/_compat.py +24 -0
  7. boost_skill_cli-1.0.417/boost_langchain/graph.py +94 -0
  8. boost_skill_cli-1.0.417/boost_langchain/loader.py +59 -0
  9. boost_skill_cli-1.0.417/boost_langchain/retriever.py +76 -0
  10. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417/boost_skill_cli.egg-info}/PKG-INFO +4 -1
  11. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_skill_cli.egg-info/SOURCES.txt +13 -0
  12. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_skill_cli.egg-info/requires.txt +4 -0
  13. boost_skill_cli-1.0.417/boost_skill_cli.egg-info/top_level.txt +2 -0
  14. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/langchain.html +29 -23
  15. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/boost-langchain-publishing.md +11 -2
  16. boost_skill_cli-1.0.417/docs/roadmap/items/langchain-in-the-wheel.md +46 -0
  17. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +8 -0
  18. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/scripts-under-the-lint-gate.md +4 -2
  19. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap.html +97 -36
  20. boost_skill_cli-1.0.417/evals/publish_golden_dataset.py +91 -0
  21. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/pyproject.toml +54 -3
  22. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_command_reference.py +5 -6
  23. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_scale_corpus.py +11 -11
  24. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/check_licenses.py +5 -5
  25. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/check_required_checks.py +20 -21
  26. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_corpus.py +19 -19
  27. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_explain.py +11 -12
  28. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_gate.py +6 -7
  29. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_recommend.py +14 -14
  30. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_retrieval.py +51 -49
  31. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/eval_stats_summary.py +3 -4
  32. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/import_budget.py +9 -10
  33. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/lock_toolchain.py +6 -6
  34. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/mutation_shards.py +27 -27
  35. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/page_budget.py +5 -5
  36. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/release_guard.py +7 -7
  37. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/serve_docs.py +1 -2
  38. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/setup.cfg +2 -0
  39. boost_skill_cli-1.0.417/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  40. boost_skill_cli-1.0.417/tests/langchain/conftest.py +73 -0
  41. boost_skill_cli-1.0.417/tests/langchain/test_graph.py +125 -0
  42. boost_skill_cli-1.0.417/tests/langchain/test_loader.py +74 -0
  43. boost_skill_cli-1.0.417/tests/langchain/test_retriever.py +104 -0
  44. boost_skill_cli-1.0.417/tests/unit/test_langchain_packaging.py +110 -0
  45. boost_skill_cli-1.0.415/boost_skill_cli.egg-info/top_level.txt +0 -1
  46. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.gitattributes +0 -0
  47. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.gitignore +0 -0
  48. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.gitleaks.toml +0 -0
  49. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.htmlvalidate.json +0 -0
  50. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.lighthouserc.json +0 -0
  51. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.lycheeignore +0 -0
  52. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.markdownlint-cli2.jsonc +0 -0
  53. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.pre-commit-config.yaml +0 -0
  54. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.stylelintrc.json +0 -0
  55. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.vale/styles/boost/Terminology.yml +0 -0
  56. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  57. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/.vale.ini +0 -0
  58. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/CLAUDE.md +0 -0
  59. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/CODE_OF_CONDUCT.md +0 -0
  60. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/CONTRIBUTING.md +0 -0
  61. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/LICENSE +0 -0
  62. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/README.md +0 -0
  63. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/SECURITY.md +0 -0
  64. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost +0 -0
  65. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/__init__.py +0 -0
  66. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/__main__.py +0 -0
  67. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/cli.py +0 -0
  68. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/cliparse.py +0 -0
  69. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/__init__.py +0 -0
  70. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/_common.py +0 -0
  71. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/bmad.py +0 -0
  72. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/configuration.py +0 -0
  73. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/discovery.py +0 -0
  74. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/hooks.py +0 -0
  75. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/info.py +0 -0
  76. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/intelligence.py +0 -0
  77. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/pkg.py +0 -0
  78. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/quality.py +0 -0
  79. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/run.py +0 -0
  80. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/safety.py +0 -0
  81. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/taps.py +0 -0
  82. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/commands/team.py +0 -0
  83. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/__init__.py +0 -0
  84. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/adapters.py +0 -0
  85. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/agents.py +0 -0
  86. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/ai.py +0 -0
  87. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/capabilities.py +0 -0
  88. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/catalog.py +0 -0
  89. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/chat.py +0 -0
  90. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/claude_settings.py +0 -0
  91. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/complete.py +0 -0
  92. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/config.py +0 -0
  93. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/dense.py +0 -0
  94. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/ed25519.py +0 -0
  95. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/embed.py +0 -0
  96. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/faithfulness.py +0 -0
  97. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/frontmatter.py +0 -0
  98. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/gitutil.py +0 -0
  99. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/imperative.py +0 -0
  100. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/injectscan.py +0 -0
  101. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/installscan.py +0 -0
  102. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/integrity.py +0 -0
  103. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/journal.py +0 -0
  104. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/localembed.py +0 -0
  105. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/lockfile.py +0 -0
  106. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/logs.py +0 -0
  107. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/mcp.py +0 -0
  108. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/mcpdecl.py +0 -0
  109. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/mcphost.py +0 -0
  110. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/minisign.py +0 -0
  111. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/nethttp.py +0 -0
  112. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/output.py +0 -0
  113. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/paths.py +0 -0
  114. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/policy.py +0 -0
  115. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/projectlock.py +0 -0
  116. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/provenance.py +0 -0
  117. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/rag.py +0 -0
  118. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/registry.py +0 -0
  119. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/resolve.py +0 -0
  120. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/rules.py +0 -0
  121. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/scopes.py +0 -0
  122. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/secretscan.py +0 -0
  123. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/selfupdate.py +0 -0
  124. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/serve.py +0 -0
  125. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/stackprobe.py +0 -0
  126. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/staleness.py +0 -0
  127. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/store.py +0 -0
  128. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/trustaudit.py +0 -0
  129. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/typosquat.py +0 -0
  130. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/updatediff.py +0 -0
  131. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/util.py +0 -0
  132. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/core/workflows.py +0 -0
  133. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/data/registries.json +0 -0
  134. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/errors.py +0 -0
  135. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_cli/spin.py +0 -0
  136. /boost_skill_cli-1.0.415/tests/fuzz/corpus/registry/05-empty.txt → /boost_skill_cli-1.0.417/boost_langchain/py.typed +0 -0
  137. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  138. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  139. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/codecov.yml +0 -0
  140. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/.claude/settings.local.json +0 -0
  141. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/DEBUGGING.md +0 -0
  142. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/adapters.html +0 -0
  143. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/README.md +0 -0
  144. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/c4-components-core.md +0 -0
  145. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/c4-containers.md +0 -0
  146. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/c4-context.md +0 -0
  147. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/architecture/c4-dynamic-install.md +0 -0
  148. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/distill.gif +0 -0
  149. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/doctor.gif +0 -0
  150. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/explain.gif +0 -0
  151. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/hooks.gif +0 -0
  152. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/install.gif +0 -0
  153. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/pulse.gif +0 -0
  154. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/search.gif +0 -0
  155. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/gifs/tap.gif +0 -0
  156. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/distill.tape +0 -0
  157. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/doctor.tape +0 -0
  158. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/explain.tape +0 -0
  159. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/hooks.tape +0 -0
  160. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/install.tape +0 -0
  161. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/pulse.tape +0 -0
  162. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/search.tape +0 -0
  163. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel/tapes/tap.tape +0 -0
  164. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/carousel.html +0 -0
  165. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/chat.html +0 -0
  166. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/commands.html +0 -0
  167. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/demo-index.json +0 -0
  168. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/demo.gif +0 -0
  169. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/demo.html +0 -0
  170. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/demo.tape +0 -0
  171. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/design-roadmap.html +0 -0
  172. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/eval-latest.json +0 -0
  173. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/eval.html +0 -0
  174. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/index.html +0 -0
  175. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/mcp-hub.html +0 -0
  176. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/rag-architecture.md +0 -0
  177. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D01.md +0 -0
  178. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D02.md +0 -0
  179. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D03.md +0 -0
  180. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D04.md +0 -0
  181. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D05.md +0 -0
  182. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D06.md +0 -0
  183. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D07.md +0 -0
  184. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D08.md +0 -0
  185. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D09.md +0 -0
  186. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D10.md +0 -0
  187. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D11.md +0 -0
  188. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D12.md +0 -0
  189. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D13.md +0 -0
  190. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D14.md +0 -0
  191. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D15.md +0 -0
  192. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D16.md +0 -0
  193. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D17.md +0 -0
  194. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D18.md +0 -0
  195. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D19.md +0 -0
  196. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D20.md +0 -0
  197. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D21.md +0 -0
  198. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D22.md +0 -0
  199. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D23.md +0 -0
  200. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D24.md +0 -0
  201. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D25.md +0 -0
  202. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/BOOST-D26.md +0 -0
  203. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  204. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  205. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  206. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  207. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  208. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  209. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  210. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  211. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  212. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  213. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  214. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  215. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  216. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  217. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  218. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  219. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  220. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  221. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  222. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  223. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  224. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  225. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  226. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  227. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  228. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  229. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/command-carousel-page.md +0 -0
  230. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  231. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  232. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  233. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  234. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  235. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  236. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  237. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  238. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  239. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  240. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  241. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  242. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  243. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  244. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  245. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  246. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  247. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  248. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  249. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  250. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  251. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  252. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  253. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  254. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  255. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  256. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  257. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  258. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  259. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  260. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  261. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  262. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  263. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  264. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  265. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  266. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/github-community-health-files.md +0 -0
  267. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  268. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  269. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  270. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  271. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  272. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  273. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  274. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  275. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  276. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  277. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  278. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  279. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  280. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  281. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  282. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  283. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  284. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  285. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  286. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  287. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  288. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  289. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  290. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  291. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  292. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  293. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  294. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  295. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  296. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  297. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  298. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  299. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  300. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  301. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  302. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  303. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  304. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  305. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  306. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  307. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  308. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  309. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  310. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  311. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  312. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  313. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  314. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  315. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  316. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  317. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  318. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  319. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  320. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  321. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  322. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  323. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  324. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  325. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  326. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  327. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  328. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  329. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  330. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  331. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  332. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  333. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  334. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  335. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  336. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  337. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  338. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  339. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  340. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  341. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  342. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  343. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  344. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  345. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  346. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  347. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  348. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  349. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  350. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  351. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  352. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  353. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  354. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  355. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  356. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  357. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  358. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  359. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  360. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  361. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  362. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  363. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  364. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  365. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  366. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  367. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  368. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  369. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  370. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  371. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  372. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  373. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  374. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  375. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  376. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  377. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  378. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  379. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  380. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  381. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  382. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  383. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  384. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  385. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  386. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  387. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  388. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  389. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  390. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  391. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  392. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  393. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  394. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  395. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  396. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  397. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  398. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  399. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  400. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  401. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  402. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  403. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  404. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  405. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  406. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  407. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  408. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  409. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  410. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  411. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  412. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  413. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  414. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  415. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  416. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  417. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  418. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/workspace-scope-install.md +0 -0
  419. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/zip-strict-audit.md +0 -0
  420. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  421. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/eslint.config.mjs +0 -0
  422. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/README.md +0 -0
  423. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/__init__.py +0 -0
  424. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/baseline.json +0 -0
  425. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/faithfulness.py +0 -0
  426. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/golden_set.json +0 -0
  427. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/make_corpus.py +0 -0
  428. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/make_golden.py +0 -0
  429. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/metrics.py +0 -0
  430. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/evals/run_evals.py +0 -0
  431. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/examples/README.md +0 -0
  432. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/examples/adapt-demo.sh +0 -0
  433. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/examples/boost-run-prototype.sh +0 -0
  434. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/index.html +0 -0
  435. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/noxfile.py +0 -0
  436. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/coverage-tools.in +0 -0
  437. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/coverage-tools.txt +0 -0
  438. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/lint-tools.in +0 -0
  439. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/lint-tools.txt +0 -0
  440. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/mutation-tools.in +0 -0
  441. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/mutation-tools.txt +0 -0
  442. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/platform-pins.lock +0 -0
  443. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/release-tools.in +0 -0
  444. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/release-tools.txt +0 -0
  445. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/test-tools.in +0 -0
  446. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/requirements/test-tools.txt +0 -0
  447. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/a11y_check.py +0 -0
  448. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/bench_cli.sh +0 -0
  449. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_demo_index.py +0 -0
  450. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_registries.py +0 -0
  451. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/build_roadmap.py +0 -0
  452. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/check_anchors.py +0 -0
  453. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/ensure_eval_corpus.sh +0 -0
  454. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/mutation_gate.py +0 -0
  455. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/mutation_weights.json +0 -0
  456. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/perf_gate.py +0 -0
  457. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/post_deploy_smoke.py +0 -0
  458. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/publish_eval_json.py +0 -0
  459. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/scripts/release_preflight.py +0 -0
  460. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/sonar-project.properties +0 -0
  461. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/style/README.md +0 -0
  462. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/style/boost.css +0 -0
  463. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/style/boost.js +0 -0
  464. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/style/demo.html +0 -0
  465. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/adapt.feature +0 -0
  466. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/browse.feature +0 -0
  467. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/count.feature +0 -0
  468. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/discover.feature +0 -0
  469. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/doctor.feature +0 -0
  470. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/environment.py +0 -0
  471. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/explain.feature +0 -0
  472. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/index.feature +0 -0
  473. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/install.feature +0 -0
  474. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/list.feature +0 -0
  475. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/mcp.feature +0 -0
  476. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/search.feature +0 -0
  477. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/steps/cli_steps.py +0 -0
  478. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/steps/discovery_steps.py +0 -0
  479. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/steps/mcp_steps.py +0 -0
  480. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/bdd/features/steps/quality_steps.py +0 -0
  481. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/conftest.py +0 -0
  482. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/baseline.json +0 -0
  483. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/explain.jsonl +0 -0
  484. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/golden-natural.jsonl +0 -0
  485. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/golden.jsonl +0 -0
  486. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/recommend.jsonl +0 -0
  487. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/taps-scale.txt +0 -0
  488. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/eval/taps.txt +0 -0
  489. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_capabilities_policy.py +0 -0
  490. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_adapt.py +0 -0
  491. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_bmad.py +0 -0
  492. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_chat.py +0 -0
  493. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_configuration.py +0 -0
  494. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_discovery.py +0 -0
  495. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_hooks.py +0 -0
  496. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_info.py +0 -0
  497. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_intelligence.py +0 -0
  498. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_pkg.py +0 -0
  499. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_quality.py +0 -0
  500. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_taps.py +0 -0
  501. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_cli_team.py +0 -0
  502. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_everyday_loop.py +0 -0
  503. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_integrity_enforce.py +0 -0
  504. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_kind_conformance.py +0 -0
  505. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_property_parsers.py +0 -0
  506. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_run.py +0 -0
  507. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_tap_signing.py +0 -0
  508. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/functional/test_workspace_scope.py +0 -0
  509. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/README.md +0 -0
  510. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  511. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  512. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  513. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  514. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  515. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  516. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  517. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  518. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  519. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  520. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  521. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  522. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  523. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  524. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  525. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  526. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  527. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  528. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  529. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/fuzz_frontmatter.py +0 -0
  530. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/fuzz/fuzz_registry.py +0 -0
  531. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/make_fixture.py +0 -0
  532. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/perf/test_benchmarks.py +0 -0
  533. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/smoke.sh +0 -0
  534. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_a11y_check.py +0 -0
  535. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_adapters.py +0 -0
  536. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_adapters_multi.py +0 -0
  537. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_adapters_runner.py +0 -0
  538. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_agents.py +0 -0
  539. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_ai.py +0 -0
  540. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_capabilities.py +0 -0
  541. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_catalog.py +0 -0
  542. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_chat.py +0 -0
  543. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_check_anchors.py +0 -0
  544. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_check_licenses.py +0 -0
  545. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_claude_settings.py +0 -0
  546. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_cliparse.py +0 -0
  547. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_codeql_analysis_key.py +0 -0
  548. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_command_reference_fresh.py +0 -0
  549. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_community_health_files.py +0 -0
  550. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_complete.py +0 -0
  551. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_config.py +0 -0
  552. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_content_dedupe.py +0 -0
  553. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dedup_trust.py +0 -0
  554. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_demo_index.py +0 -0
  555. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense.py +0 -0
  556. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense_fallback.py +0 -0
  557. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense_fix_hint.py +0 -0
  558. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense_shards.py +0 -0
  559. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dense_status.py +0 -0
  560. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_dependabot_config.py +0 -0
  561. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_docs_pages_linked.py +0 -0
  562. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_docsite_chrome.py +0 -0
  563. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_ed25519.py +0 -0
  564. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_embed.py +0 -0
  565. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_embed_local.py +0 -0
  566. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_entry_key.py +0 -0
  567. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_errors_and_cli_table.py +0 -0
  568. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_baseline.py +0 -0
  569. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_corpus.py +0 -0
  570. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_faithfulness.py +0 -0
  571. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_gate.py +0 -0
  572. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_grading.py +0 -0
  573. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_metrics.py +0 -0
  574. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_eval_stats_summary.py +0 -0
  575. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_faithfulness.py +0 -0
  576. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_frontmatter.py +0 -0
  577. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_fuzz_targets.py +0 -0
  578. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_gitleaks_config.py +0 -0
  579. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_gitutil.py +0 -0
  580. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_imperative.py +0 -0
  581. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_import_budget.py +0 -0
  582. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_injectscan.py +0 -0
  583. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_installscan.py +0 -0
  584. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_integrity.py +0 -0
  585. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_journal.py +0 -0
  586. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_link_ownership.py +0 -0
  587. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_localembed.py +0 -0
  588. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_localembed_e2e.py +0 -0
  589. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_lockfile.py +0 -0
  590. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_logs.py +0 -0
  591. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_marketing_counts.py +0 -0
  592. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mcp.py +0 -0
  593. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mcp_install_scan.py +0 -0
  594. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mcpdecl.py +0 -0
  595. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mcphost.py +0 -0
  596. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_minisign.py +0 -0
  597. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mutation_hardening.py +0 -0
  598. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mutation_shards.py +0 -0
  599. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mutation_subfile_shards.py +0 -0
  600. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_mutmut_source_paths.py +0 -0
  601. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_nethttp.py +0 -0
  602. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_output.py +0 -0
  603. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_page_budget.py +0 -0
  604. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_paths.py +0 -0
  605. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_perf_gate.py +0 -0
  606. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_pkg_confusions.py +0 -0
  607. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_pkg_injection.py +0 -0
  608. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_pkg_secrets.py +0 -0
  609. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_platform_pins.py +0 -0
  610. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_policy.py +0 -0
  611. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_post_deploy_smoke.py +0 -0
  612. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_project_mcp_sidecar.py +0 -0
  613. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_projectlock.py +0 -0
  614. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_provenance.py +0 -0
  615. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_rag.py +0 -0
  616. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_rag_fusion.py +0 -0
  617. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_registries_fresh.py +0 -0
  618. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_registry.py +0 -0
  619. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_registry_categories.py +0 -0
  620. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_release_guard.py +0 -0
  621. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_release_preflight.py +0 -0
  622. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_required_checks.py +0 -0
  623. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_resolve.py +0 -0
  624. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_roadmap_fresh.py +0 -0
  625. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_rules.py +0 -0
  626. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_scale_corpus.py +0 -0
  627. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_scopes.py +0 -0
  628. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_secretscan.py +0 -0
  629. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_selfupdate.py +0 -0
  630. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_serve.py +0 -0
  631. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_serve_docs.py +0 -0
  632. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_spin.py +0 -0
  633. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_stackprobe.py +0 -0
  634. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_staleness.py +0 -0
  635. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_store.py +0 -0
  636. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_token_parity.py +0 -0
  637. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_toolchain_lock.py +0 -0
  638. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_trustaudit.py +0 -0
  639. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_typosquat.py +0 -0
  640. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_updatediff.py +0 -0
  641. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_util.py +0 -0
  642. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_version.py +0 -0
  643. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_workflow_concurrency.py +0 -0
  644. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_workflow_timeouts.py +0 -0
  645. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/unit/test_workflows.py +0 -0
  646. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/a11y_check.mjs +0 -0
  647. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/console_check.mjs +0 -0
  648. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/package-lock.json +0 -0
  649. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/package.json +0 -0
  650. {boost_skill_cli-1.0.415 → boost_skill_cli-1.0.417}/tests/visual/visual_check.mjs +0 -0
@@ -1,8 +1,10 @@
1
1
  # Keep source releases lean: the runtime is boost_cli/ (with its bundled
2
- # data), plus the usual metadata. Everything below is dev-only or generated
3
- # and should never ship in the sdist.
2
+ # data) plus boost_langchain/ (the LangChain bindings in the wheel, inert
3
+ # without the [langchain] extra), plus the usual metadata. Everything below
4
+ # is dev-only or generated and should never ship in the sdist.
4
5
  include README.md LICENSE pyproject.toml setup.cfg
5
6
  recursive-include boost_cli *.py *.json
7
+ recursive-include boost_langchain *.py py.typed
6
8
  prune mutants
7
9
  prune dist
8
10
  prune .idea
@@ -13,6 +15,6 @@ exclude .coverage
13
15
  # only; nothing in the shipped runtime touches node.
14
16
  exclude package.json package-lock.json
15
17
  global-exclude __pycache__ *.pyc *.pyo .DS_Store
16
- # integrations/ hosts separately-versioned distributions (boost-langchain);
17
- # boost-skill-cli's own sdist must not ship a nested pyproject.
18
- prune integrations
18
+ # The package README is repo documentation, not wheel payload — the wheel's
19
+ # long_description is the root README.
20
+ exclude boost_langchain/README.md
@@ -52,7 +52,7 @@ mutation:
52
52
  $(PY) scripts/mutation_gate.py --run --min 80
53
53
 
54
54
  lint:
55
- $(VENV)/bin/ruff check boost_cli tests evals
55
+ $(VENV)/bin/ruff check boost_cli boost_langchain tests evals scripts
56
56
  $(VENV)/bin/mypy
57
57
  $(VENV)/bin/pyright
58
58
  $(VENV)/bin/lint-imports
@@ -60,7 +60,7 @@ lint:
60
60
  $(VENV)/bin/xenon --max-absolute F --max-modules E --max-average B boost_cli
61
61
  $(VENV)/bin/interrogate boost_cli/core
62
62
  $(VENV)/bin/refurb boost_cli
63
- $(VENV)/bin/codespell boost_cli docs README.md
63
+ $(VENV)/bin/codespell boost_cli boost_langchain docs README.md
64
64
  @# actionlint does not lint `run:` blocks itself — it shells out to
65
65
  @# shellcheck, and if shellcheck is not on PATH it skips them silently and
66
66
  @# still exits 0. So `make lint` could report a clean workflow lint having
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.415
3
+ Version: 1.0.417
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -707,6 +707,9 @@ Requires-Dist: ragas<0.3,>=0.2; extra == "eval"
707
707
  Requires-Dist: langchain-core<0.4; extra == "eval"
708
708
  Requires-Dist: langchain-community<0.4; extra == "eval"
709
709
  Requires-Dist: langchain-openai<1; extra == "eval"
710
+ Provides-Extra: langchain
711
+ Requires-Dist: langchain-core<2,>=1; extra == "langchain"
712
+ Requires-Dist: pydantic>=2; extra == "langchain"
710
713
  Provides-Extra: bdd
711
714
  Requires-Dist: behave>=1.2.6; extra == "bdd"
712
715
  Provides-Extra: perf
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.0.415'
22
- __version_tuple__ = version_tuple = (1, 0, 415)
21
+ __version__ = version = '1.0.417'
22
+ __version_tuple__ = version_tuple = (1, 0, 417)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -0,0 +1,51 @@
1
+ """LangChain bindings for boost's skill catalog.
2
+
3
+ Three seams, all thin on purpose: :class:`BoostRetriever` puts the tapped
4
+ catalog behind LangChain's retriever contract, :class:`SkillMarkdownLoader`
5
+ turns one SKILL.md into a Document, and :func:`skill_context_node` wraps the
6
+ retriever as a LangGraph-shaped node (built on ``langchain_core`` types only,
7
+ so langgraph stays a separate install). Everything that decides *what comes
8
+ back* — ranking, fusion, dedupe, the degrade ladder — stays in
9
+ ``boost_cli.core``, where it is measured by the repo's eval gate; this
10
+ package only translates the result into LangChain's types.
11
+
12
+ This package ships inside the ``boost-skill-cli`` wheel, but its
13
+ dependencies ride the opt-in ``[langchain]`` extra — the default install
14
+ stays zero-dependency, so the module files are always present while
15
+ ``langchain_core`` may not be. The guard below turns that mismatch into the
16
+ one actionable message instead of a bare import error pointing at an
17
+ internal module.
18
+ """
19
+ from ._compat import supported_langchain_core
20
+
21
+ try:
22
+ from .graph import skill_context_node
23
+ from .loader import SkillMarkdownLoader
24
+ from .retriever import BoostRetriever
25
+ except ModuleNotFoundError as exc:
26
+ _root = (exc.name or "").partition(".")[0]
27
+ if _root in ("langchain_core", "pydantic"):
28
+ raise ModuleNotFoundError(
29
+ "boost_langchain ships with boost-skill-cli, but its LangChain "
30
+ "dependencies are opt-in — install the extra: "
31
+ "pip install 'boost-skill-cli[langchain]'",
32
+ name=_root,
33
+ ) from exc
34
+ raise
35
+
36
+ # The imports above SUCCEED on langchain-core 0.3 — the [eval] extra's pin —
37
+ # and then fail subtly at runtime (see _compat). Enforce the declared major
38
+ # here, where the failure can name the fix, instead of surfacing later as an
39
+ # AttributeError mid-graph.
40
+ import langchain_core as _langchain_core
41
+
42
+ if not supported_langchain_core(getattr(_langchain_core, "__version__", "")):
43
+ raise ImportError(
44
+ "boost_langchain requires langchain-core>=1,<2 but %s is installed. "
45
+ "The [eval] extra pins the langchain 0.3 stack, so [eval] and "
46
+ "[langchain] cannot share an environment until ragas ships its "
47
+ "langchain-1.x fix — reinstall with: "
48
+ "pip install 'boost-skill-cli[langchain]'"
49
+ % getattr(_langchain_core, "__version__", "unknown"))
50
+
51
+ __all__ = ["BoostRetriever", "SkillMarkdownLoader", "skill_context_node"]
@@ -0,0 +1,24 @@
1
+ """Import-time compatibility checks, importable without langchain installed.
2
+
3
+ Deliberately dependency-free: the package __init__ needs this BEFORE it can
4
+ trust the langchain imports, and the unit suite needs to test the rule from
5
+ the base venv, where importing boost_langchain itself raises the extra hint.
6
+ """
7
+ from __future__ import annotations
8
+
9
+
10
+ def supported_langchain_core(version: str) -> bool:
11
+ """True when ``version`` satisfies the [langchain] extra's pin (>=1,<2).
12
+
13
+ The floor is not pedantry: langchain-core 0.3 — exactly what the [eval]
14
+ extra pins — satisfies every import this package makes (BaseRetriever,
15
+ BaseLoader and the message types all exist there) and then fails subtly
16
+ at runtime, because ``BaseMessage.text`` is a method in 0.3 and a
17
+ property from 1.0. The cap matters for the same reason in reverse: the
18
+ BaseRetriever contract moves on majors.
19
+ """
20
+ try:
21
+ major = int(version.partition(".")[0])
22
+ except ValueError:
23
+ return False
24
+ return 1 <= major < 2
@@ -0,0 +1,94 @@
1
+ """A LangGraph node that pulls the right skill into a run, mid-run.
2
+
3
+ The alternative this exists to avoid is stuffing every procedure into the
4
+ system prompt up front: that spends context on procedures the run never
5
+ needs and stops scaling the moment the catalog does. Retrieving against the
6
+ current state instead means each turn carries only the procedures that turn
7
+ asked for.
8
+
9
+ Nothing in this module imports langgraph. A graph node is just a callable
10
+ from state to a partial state update, so building the callable against
11
+ ``langchain_core`` types alone keeps langgraph out of the ``[langchain]``
12
+ extra entirely — install it only if your app actually runs graphs — while
13
+ the node still drops straight into ``builder.add_node``.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ from collections.abc import Callable
18
+
19
+ from langchain_core.messages import BaseMessage, HumanMessage, SystemMessage
20
+
21
+ from .retriever import BoostRetriever
22
+
23
+
24
+ def _last_human_text(messages: list[BaseMessage]) -> str:
25
+ """The most recent human turn — the query the *current* state poses.
26
+
27
+ Earlier human turns are already answered context; retrieving on them
28
+ would re-inject procedures for questions the graph has moved past.
29
+ ``.text`` rather than ``.content`` because content may be a block list.
30
+ """
31
+ for msg in reversed(messages):
32
+ if isinstance(msg, HumanMessage):
33
+ return msg.text
34
+ return ""
35
+
36
+
37
+ def skill_context_node(
38
+ retriever: BoostRetriever | None = None,
39
+ k: int = 3,
40
+ kind: str | None = None,
41
+ ) -> Callable[[dict], dict]:
42
+ """Build a graph node that injects relevant boost procedures as context.
43
+
44
+ The returned callable reads the last human message from
45
+ ``state["messages"]``, retrieves up to ``k`` matching catalog items, and
46
+ returns ``{"messages": [SystemMessage(...)]}`` carrying their full
47
+ bodies. Three choices worth knowing about:
48
+
49
+ - **It degrades to a no-op.** No human turn, nothing tapped, or no match
50
+ all return ``{}`` — in langgraph, "no state update". A graph wired
51
+ through this node must keep working on a machine with an empty
52
+ catalog, because retrieval here is an enhancement, not a dependency.
53
+ - **Provenance rides along.** Every injected procedure is prefixed with
54
+ its name, tap, in-repo path and version. Injected text steers the
55
+ model, so when a run goes wrong the first question is *which* skill
56
+ said that and *where it came from* — a poisoned or stale skill is
57
+ traceable from the transcript alone, without re-running retrieval.
58
+ - **``k`` defaults lower than the retriever's own.** These are full
59
+ procedure bodies landing in a live conversation; three is a context
60
+ budget, eight is a search page.
61
+
62
+ Pass a configured ``retriever`` to control retrieval wholesale (it wins
63
+ over ``k``/``kind``, which only shape the default ``BoostRetriever``).
64
+ """
65
+ if retriever is None:
66
+ retriever = BoostRetriever(k=k, kind=kind, full_content=True)
67
+
68
+ def boost_skill_context(state: dict) -> dict:
69
+ query = _last_human_text(state.get("messages") or [])
70
+ if not query.strip():
71
+ return {}
72
+ docs = retriever.invoke(query)
73
+ if not docs:
74
+ return {}
75
+ blocks = []
76
+ for doc in docs:
77
+ meta = doc.metadata
78
+ prov = "%s:%s" % (meta.get("tap") or "?", meta.get("source") or "?")
79
+ if meta.get("version"):
80
+ prov = "%s @ %s" % (prov, meta["version"])
81
+ blocks.append("### %s (%s — %s)\n\n%s" % (
82
+ meta.get("name") or "unnamed",
83
+ meta.get("kind") or "skill",
84
+ prov,
85
+ doc.page_content,
86
+ ))
87
+ content = (
88
+ "Procedures from the boost catalog relevant to the current "
89
+ "request. Apply the ones that fit; each is labeled with its "
90
+ "source so it can be audited.\n\n%s" % "\n\n".join(blocks)
91
+ )
92
+ return {"messages": [SystemMessage(content=content)]}
93
+
94
+ return boost_skill_context
@@ -0,0 +1,59 @@
1
+ """Load one skill's SKILL.md as a LangChain ``Document``."""
2
+ from __future__ import annotations
3
+
4
+ from collections.abc import Iterator
5
+ from pathlib import Path
6
+
7
+ from langchain_core.document_loaders import BaseLoader
8
+ from langchain_core.documents import Document
9
+
10
+ from boost_cli.core import frontmatter
11
+
12
+
13
+ class SkillMarkdownLoader(BaseLoader):
14
+ """Yield a SKILL.md as one Document: body as content, frontmatter as metadata.
15
+
16
+ One Document per skill, not one per chunk: a skill file is already the
17
+ author's chosen unit of instruction, and boost's own indexer moved off
18
+ chunking for the same reason (see rag._make_docs). Callers that want
19
+ chunks can run any LangChain splitter over the result.
20
+
21
+ Parsing reuses ``boost_cli.core.frontmatter`` rather than a YAML library
22
+ so this loader reads a skill file *exactly* the way boost's catalog does —
23
+ including the lossless-number rule that keeps ``version: 1.10`` from
24
+ silently becoming ``1.1``.
25
+ """
26
+
27
+ def __init__(self, path: str | Path):
28
+ """``path`` is a SKILL.md file, or a directory holding one."""
29
+ self.path = Path(path)
30
+
31
+ @classmethod
32
+ def from_installed(cls, name: str) -> SkillMarkdownLoader:
33
+ """Loader for a skill installed in boost's canonical store.
34
+
35
+ Resolves through ``store.skill_store_dir`` so the path is the single
36
+ source of truth every agent's symlink points at — not one particular
37
+ agent's view of it — and so unsafe names are rejected exactly the way
38
+ ``boost install`` rejects them (raises BoostError). A name installed
39
+ as a rule or workflow is declined by kind rather than with a bare
40
+ missing-file error: those kinds materialize into agent context files
41
+ and keep no store copy to load.
42
+ """
43
+ from boost_cli.core import lockfile, store
44
+ found = lockfile.find_any(name)
45
+ if found is not None and found[0] != "skill":
46
+ raise ValueError(
47
+ "%s is a %s — it materializes into agent context files and "
48
+ "has no store copy to load; retrieve it with "
49
+ "BoostRetriever(kind=%r) instead" % (name, found[0], found[0]))
50
+ return cls(store.skill_store_dir(name))
51
+
52
+ def lazy_load(self) -> Iterator[Document]:
53
+ path = self.path / "SKILL.md" if self.path.is_dir() else self.path
54
+ text = path.read_text(encoding="utf-8", errors="replace")
55
+ meta, body = frontmatter.parse(text)
56
+ # The real file path wins over any frontmatter key that happens to be
57
+ # named "source": metadata provenance must state where the bytes came
58
+ # from, and a self-reported value is the one thing that cannot.
59
+ yield Document(page_content=body, metadata={**meta, "source": str(path)})
@@ -0,0 +1,76 @@
1
+ """A LangChain retriever over boost's tapped skill/rule/workflow catalog."""
2
+ from __future__ import annotations
3
+
4
+ from typing import Literal
5
+
6
+ from langchain_core.callbacks import CallbackManagerForRetrieverRun
7
+ from langchain_core.documents import Document
8
+ from langchain_core.retrievers import BaseRetriever
9
+ from pydantic import Field
10
+
11
+ from boost_cli.core import rag
12
+
13
+
14
+ class BoostRetriever(BaseRetriever):
15
+ """Retrieve tapped boost items as LangChain ``Document`` objects.
16
+
17
+ This deliberately reuses boost's own engine (``rag.retrieve_any``) rather
18
+ than re-embedding the catalog into a vector store. Retrieval quality is
19
+ the reason: boost's Tier-1 eval gate floors recall@k, hit@1, MRR and
20
+ nDCG@k over a golden set on every merge, so wrapping that engine means the
21
+ retriever ships with numbers rather than claims — a fresh embedding
22
+ pipeline here would start from zero evidence. Reuse also inherits the
23
+ degrade ladder for free: hybrid RRF when the user has built a dense store,
24
+ BM25 full-content otherwise, and never an API key as the entry fee.
25
+
26
+ ``kind`` narrows results to one of boost's three item kinds ("skill",
27
+ "rule", "workflow"); ``None`` searches all of them. ``full_content``
28
+ controls whether a Document carries the item's whole body (what a chain
29
+ stuffing context wants) or just its one-line description (what a router
30
+ choosing among items wants).
31
+ """
32
+
33
+ # Validated at construction: a typo'd kind would otherwise return [] for
34
+ # every query, indistinguishable from an empty catalog; a negative k
35
+ # would silently drop the last hit via slice semantics.
36
+ k: int = Field(default=8, ge=0)
37
+ kind: Literal["skill", "rule", "workflow"] | None = None
38
+ full_content: bool = True
39
+
40
+ def _get_relevant_documents(
41
+ self, query: str, *, run_manager: CallbackManagerForRetrieverRun
42
+ ) -> list[Document]:
43
+ # ensure() is what makes first use behave like `boost search`: it
44
+ # builds the BM25 index from the tapped catalog on demand and is
45
+ # incremental after that. Without it, a freshly tapped HOME would
46
+ # answer [] until the user happened to run a CLI search first.
47
+ rag.ensure()
48
+ hits, engine = rag.retrieve_any(query, k=self.k, kind=self.kind)
49
+ if hits is None:
50
+ # No index of any kind could be built — nothing is tapped. Mirror
51
+ # the CLI's degrade-cleanly rule: an empty shelf is an answer, not
52
+ # an error, and a chain should keep running without boost context.
53
+ return []
54
+ docs: list[Document] = []
55
+ for hit in hits:
56
+ entry = hit["entry"]
57
+ if self.full_content:
58
+ content = rag.read_body(entry)
59
+ else:
60
+ content = entry.get("description") or rag.surface(entry)
61
+ docs.append(Document(
62
+ page_content=content,
63
+ metadata={
64
+ "name": entry.get("name", ""),
65
+ "kind": entry.get("kind", "skill"),
66
+ "tap": entry.get("tap", ""),
67
+ "version": entry.get("version", ""),
68
+ "source": entry.get("skill_md", ""),
69
+ # Which engine actually answered (BM25 / dense / hybrid
70
+ # RRF). Carried per-document because it is the first thing
71
+ # to check when result quality surprises — see rag.rerank
72
+ # for why a guessed label is worse than none.
73
+ "engine": engine,
74
+ },
75
+ ))
76
+ return docs
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.415
3
+ Version: 1.0.417
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -707,6 +707,9 @@ Requires-Dist: ragas<0.3,>=0.2; extra == "eval"
707
707
  Requires-Dist: langchain-core<0.4; extra == "eval"
708
708
  Requires-Dist: langchain-community<0.4; extra == "eval"
709
709
  Requires-Dist: langchain-openai<1; extra == "eval"
710
+ Provides-Extra: langchain
711
+ Requires-Dist: langchain-core<2,>=1; extra == "langchain"
712
+ Requires-Dist: pydantic>=2; extra == "langchain"
710
713
  Provides-Extra: bdd
711
714
  Requires-Dist: behave>=1.2.6; extra == "bdd"
712
715
  Provides-Extra: perf
@@ -98,6 +98,12 @@ boost_cli/core/updatediff.py
98
98
  boost_cli/core/util.py
99
99
  boost_cli/core/workflows.py
100
100
  boost_cli/data/registries.json
101
+ boost_langchain/__init__.py
102
+ boost_langchain/_compat.py
103
+ boost_langchain/graph.py
104
+ boost_langchain/loader.py
105
+ boost_langchain/py.typed
106
+ boost_langchain/retriever.py
101
107
  boost_skill_cli.egg-info/PKG-INFO
102
108
  boost_skill_cli.egg-info/SOURCES.txt
103
109
  boost_skill_cli.egg-info/dependency_links.txt
@@ -252,6 +258,7 @@ docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md
252
258
  docs/roadmap/items/journal-rotation-race-and-handle-leak.md
253
259
  docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md
254
260
  docs/roadmap/items/keyless-semantic-search-for-everyone.md
261
+ docs/roadmap/items/langchain-in-the-wheel.md
255
262
  docs/roadmap/items/langchain-integration-explainer-page.md
256
263
  docs/roadmap/items/langchain-langgraph-langsmith-integration.md
257
264
  docs/roadmap/items/layering-guard-import-linter.md
@@ -398,6 +405,7 @@ evals/golden_set.json
398
405
  evals/make_corpus.py
399
406
  evals/make_golden.py
400
407
  evals/metrics.py
408
+ evals/publish_golden_dataset.py
401
409
  evals/run_evals.py
402
410
  examples/README.md
403
411
  examples/adapt-demo.sh
@@ -515,6 +523,10 @@ tests/fuzz/corpus/registry/05-empty.txt
515
523
  tests/fuzz/corpus/registry/06-space.txt
516
524
  tests/fuzz/corpus/registry/07-slash.txt
517
525
  tests/fuzz/corpus/registry/08-bare-host.txt
526
+ tests/langchain/conftest.py
527
+ tests/langchain/test_graph.py
528
+ tests/langchain/test_loader.py
529
+ tests/langchain/test_retriever.py
518
530
  tests/perf/test_benchmarks.py
519
531
  tests/unit/test_a11y_check.py
520
532
  tests/unit/test_adapters.py
@@ -568,6 +580,7 @@ tests/unit/test_injectscan.py
568
580
  tests/unit/test_installscan.py
569
581
  tests/unit/test_integrity.py
570
582
  tests/unit/test_journal.py
583
+ tests/unit/test_langchain_packaging.py
571
584
  tests/unit/test_link_ownership.py
572
585
  tests/unit/test_localembed.py
573
586
  tests/unit/test_localembed_e2e.py
@@ -9,6 +9,10 @@ langchain-core<0.4
9
9
  langchain-community<0.4
10
10
  langchain-openai<1
11
11
 
12
+ [langchain]
13
+ langchain-core<2,>=1
14
+ pydantic>=2
15
+
12
16
  [perf]
13
17
  pytest-benchmark>=4.0
14
18
 
@@ -0,0 +1,2 @@
1
+ boost_cli
2
+ boost_langchain
@@ -129,10 +129,12 @@
129
129
  <!-- ===== hero ===== -->
130
130
  <div class="wrap hero">
131
131
  <p class="crumbs"><a href="index.html">boost</a> / docs / langchain integration</p>
132
- <span class="badge">Interop · shipped in PR #466</span>
132
+ <span class="badge">Interop · shipped in PR #466 · folded into the wheel in PR #472</span>
133
133
  <h1>The skill catalog, <span class="grad-text">behind LangChain's</span> retriever contract.</h1>
134
134
  <p class="lede">boost's tapped catalog is 10,000+ retrievable procedures with frontmatter,
135
- provenance and a lock file. <code>boost-langchain</code> makes it addressable from a Python
135
+ provenance and a lock file. The <code>boost_langchain</code> package shipped inside the
136
+ <code>boost-skill-cli</code> wheel, switched on by the <code>[langchain]</code> extra —
137
+ makes it addressable from a Python
136
138
  agent runtime: a <b>retriever</b> over the same measured engine <code>boost search</code>
137
139
  runs on, a <b>document loader</b> for one SKILL.md, and a <b>LangGraph node</b> that pulls
138
140
  the right procedure into a run mid-flight. No API key, ever — and nothing tapped means
@@ -182,7 +184,7 @@
182
184
  the engine is why wrapping it beats re-embedding the catalog.</p>
183
185
 
184
186
  <div class="diagram">
185
- <svg viewBox="0 0 900 400" role="img" aria-label="boost-langchain architecture: a LangChain app calls the boost_langchain seams, which call boost's retrieval engine over the tapped catalog; the Tier-1 eval gate floors the engine's quality">
187
+ <svg viewBox="0 0 900 400" role="img" aria-label="boost langchain integration architecture: a LangChain app calls the boost_langchain seams, which call boost's retrieval engine over the tapped catalog; the Tier-1 eval gate floors the engine's quality">
186
188
  <defs>
187
189
  <marker id="ah" markerWidth="9" markerHeight="9" refX="7" refY="3" orient="auto">
188
190
  <path d="M0,0 L7,3 L0,6 Z" fill="#7dd3fc"></path>
@@ -482,7 +484,7 @@ builder.<span class="fn">add_edge</span>(<span class="s">"skills"</span>, <span
482
484
  story). To run <b>online</b> evals against the <em>same</em> ground truth, publish the
483
485
  golden set as a LangSmith dataset with the
484
486
  <code>publish_golden_dataset.py</code> script (under
485
- <code>integrations/langchain/scripts/</code>) — key-gated,
487
+ <code>evals/</code>) — key-gated,
486
488
  opt-in, run from a boost checkout. Re-running replaces examples wholesale, so the
487
489
  dataset always mirrors <code>tests/eval/golden.jsonl</code> rather than accreting. The
488
490
  point is one set of judgments in both places: an online regression and an offline
@@ -493,13 +495,14 @@ builder.<span class="fn">add_edge</span>(<span class="s">"skills"</span>, <span
493
495
  <p><b>The honest dependency paragraph.</b> boost's own <code>[eval]</code> extra pins the
494
496
  langchain 0.3 stack, because ragas — through 0.4.3 — still imports a
495
497
  <code>ChatVertexAI</code> path that langchain-community 0.4 removed, so
496
- <code>import ragas</code> crashes beside langchain 1.x. What dissolves the conflict is
497
- distribution isolation, not an unpin: <code>boost-langchain</code> is a separately
498
- versioned package, so the langchain 1.x stack lives in its own environment and its own
499
- CI leg while <code>[eval]</code> keeps its 0.3-stack pins in its own. The two majors
500
- never co-install pip refuses the combination loudly — and each surface tests against
501
- the stack it really runs on. The unpin becomes a small follow-up the day ragas ships a
502
- release after 0.4.3, which already carries the fix on its main branch.</p>
498
+ <code>import ragas</code> crashes beside langchain 1.x. What keeps the conflict honest
499
+ is <b>extra isolation</b>: the integration ships in the same wheel, but its langchain
500
+ 1.x dependencies live in the <code>[langchain]</code> extra while <code>[eval]</code>
501
+ keeps its 0.3-stack pins. The two majors never co-install — asking pip for both extras
502
+ at once fails resolution loudly rather than silently breaking one of them — and each
503
+ surface tests against the stack it really runs on (the conformance leg installs the
504
+ extra; the eval tooling installs its own). The unpin becomes a small follow-up the day
505
+ ragas ships a release after 0.4.3, which already carries the fix on its main branch.</p>
503
506
  </div>
504
507
  </div>
505
508
  </section>
@@ -508,34 +511,37 @@ builder.<span class="fn">add_edge</span>(<span class="s">"skills"</span>, <span
508
511
  <section>
509
512
  <div class="wrap">
510
513
  <span class="eyebrow">Install</span>
511
- <h2 class="sec-title">One pip install, two optional extras</h2>
514
+ <h2 class="sec-title">One extra on the wheel you already have</h2>
512
515
  <div class="term-wrap">
513
516
  <div class="window">
514
517
  <div class="bar"><div class="dots"><i></i><i></i><i></i></div>
515
- <div class="bar-title">pip · boost-langchain</div></div>
516
- <pre><span class="cm"># the packagepulls in boost-skill-cli + langchain-core</span>
517
- <span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> boost-langchain
518
+ <div class="bar-title">pip · boost-skill-cli[langchain]</div></div>
519
+ <pre><span class="cm"># the CLI plus the LangChain bindings one wheel, one extra</span>
520
+ <span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> 'boost-skill-cli[langchain]'
518
521
 
519
522
  <span class="cm"># give boost something to search (once)</span>
520
523
  <span class="tp">$</span> <span class="tv">boost</span> <span class="tc">tap</span> anthropics/skills
521
524
 
522
525
  <span class="cm"># optional: the LangGraph runtime for skill_context_node graphs</span>
523
- <span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> 'boost-langchain[langgraph]'
526
+ <span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> langgraph
524
527
 
525
528
  <span class="cm"># optional: publish the golden set as a LangSmith dataset</span>
526
- <span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> 'boost-langchain[langsmith]'
527
- <span class="tp">$</span> <span class="tv">python</span> integrations/langchain/scripts/publish_golden_dataset.py
529
+ <span class="tp">$</span> <span class="tv">pip</span> <span class="tc">install</span> langsmith
530
+ <span class="tp">$</span> <span class="tv">python</span> evals/publish_golden_dataset.py
528
531
  <span class="tdim">published 91 examples to LangSmith dataset 'boost-golden-retrieval'</span></pre>
529
532
  </div>
530
533
  </div>
531
- <p class="caption">The dataset publish is illustrative output; it exits with a one-line hint
534
+ <p class="caption">Without the extra the modules still ship but decline to import — naming
535
+ this exact fix. The dataset publish is illustrative output; it exits with a one-line hint
532
536
  rather than a traceback when the key or package is missing.</p>
533
537
  <div class="prose">
534
538
  <p>More depth: the
535
- <a href="https://github.com/jonnyeclectic/boost/tree/main/integrations/langchain">package
536
- README</a> covers the same ground as a reference, and the
537
- <a href="roadmap.html#langchain-langgraph-langsmith-integration">roadmap card</a> holds
538
- the full reasoning — including the packaging decision and the corrected ragas story.</p>
539
+ <a href="https://github.com/jonnyeclectic/boost/tree/main/boost_langchain">package
540
+ README</a> covers the same ground as a reference, and two roadmap cards hold the
541
+ reasoning: <a href="roadmap.html#langchain-langgraph-langsmith-integration">the
542
+ integration itself</a> and
543
+ <a href="roadmap.html#langchain-in-the-wheel">why it rides the wheel</a> instead of a
544
+ second PyPI project.</p>
539
545
  </div>
540
546
  </div>
541
547
  </section>
@@ -2,15 +2,24 @@
2
2
  id: boost-langchain-publishing
3
3
  board: code
4
4
  section: planned
5
- status: planned
5
+ status: declined
6
6
  category: Release
7
7
  complexity: S
8
8
  impact: Med
9
9
  wow: 2
10
- note: the artifacts already build and pass twine check in CI what is missing is a cadence and a Trusted Publisher
10
+ note: declined superseded by shipping the integration inside the boost-skill-cli wheel (see langchain-in-the-wheel)
11
11
  order: 98
12
12
  title: give <code>boost-langchain</code> a release path to PyPI
13
13
  ---
14
+ <b>Declined, deliberately.</b> Both missing pieces below were owner-only or upstream-blocked, and
15
+ the research they prompted dissolved the premise: a second PyPI project bought a separate release
16
+ cadence nobody needed (boost releases more often than langchain), while the ecosystem evidence —
17
+ langchain-community sunset, non-<code>langchain-*</code> names in LangChain's own integrations
18
+ listing, in-host precedents from <code>ragatouille</code> to <code>mlflow</code> — showed the
19
+ standalone distribution was never required. The integration now ships inside the
20
+ <code>boost-skill-cli</code> wheel behind a <code>[langchain]</code> extra instead; see
21
+ <code>langchain-in-the-wheel</code>. The original card follows for the record.
22
+
14
23
  The <code>boost-langchain</code> distribution shipped under <code>integrations/langchain/</code>
15
24
  with its whole point being a <b>separate release cadence</b> from <code>boost-skill-cli</code> —
16
25
  langchain majors move faster than boost does, and the conformance workflow already builds the