boost-skill-cli 1.0.339__tar.gz → 1.0.341__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 (581) hide show
  1. {boost_skill_cli-1.0.339/boost_skill_cli.egg-info → boost_skill_cli-1.0.341}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/configuration.py +13 -3
  4. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/mcp.py +5 -2
  5. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  6. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  7. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +22 -0
  8. boost_skill_cli-1.0.341/docs/roadmap/items/mcp-search-cost-was-understated.md +44 -0
  9. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap.html +64 -2
  10. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_dense_shards.py +76 -1
  11. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_mcp.py +22 -0
  12. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.gitattributes +0 -0
  13. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.gitignore +0 -0
  14. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.gitleaks.toml +0 -0
  15. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.htmlvalidate.json +0 -0
  16. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.lighthouserc.json +0 -0
  17. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.lycheeignore +0 -0
  18. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.markdownlint-cli2.jsonc +0 -0
  19. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.pre-commit-config.yaml +0 -0
  20. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.stylelintrc.json +0 -0
  21. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.vale/styles/boost/Terminology.yml +0 -0
  22. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  23. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/.vale.ini +0 -0
  24. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/CLAUDE.md +0 -0
  25. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/CODE_OF_CONDUCT.md +0 -0
  26. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/CONTRIBUTING.md +0 -0
  27. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/LICENSE +0 -0
  28. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/MANIFEST.in +0 -0
  29. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/Makefile +0 -0
  30. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/README.md +0 -0
  31. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/SECURITY.md +0 -0
  32. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost +0 -0
  33. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/__init__.py +0 -0
  34. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/__main__.py +0 -0
  35. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/cli.py +0 -0
  36. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/cliparse.py +0 -0
  37. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/__init__.py +0 -0
  38. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/_common.py +0 -0
  39. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/bmad.py +0 -0
  40. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/discovery.py +0 -0
  41. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/hooks.py +0 -0
  42. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/info.py +0 -0
  43. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/intelligence.py +0 -0
  44. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/pkg.py +0 -0
  45. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/quality.py +0 -0
  46. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/run.py +0 -0
  47. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/safety.py +0 -0
  48. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/taps.py +0 -0
  49. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/commands/team.py +0 -0
  50. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/__init__.py +0 -0
  51. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/adapters.py +0 -0
  52. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/agents.py +0 -0
  53. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/ai.py +0 -0
  54. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/capabilities.py +0 -0
  55. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/catalog.py +0 -0
  56. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/claude_settings.py +0 -0
  57. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/config.py +0 -0
  58. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/dense.py +0 -0
  59. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/ed25519.py +0 -0
  60. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/embed.py +0 -0
  61. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/faithfulness.py +0 -0
  62. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/frontmatter.py +0 -0
  63. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/gitutil.py +0 -0
  64. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/imperative.py +0 -0
  65. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/injectscan.py +0 -0
  66. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/installscan.py +0 -0
  67. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/integrity.py +0 -0
  68. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/journal.py +0 -0
  69. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/localembed.py +0 -0
  70. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/lockfile.py +0 -0
  71. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/logs.py +0 -0
  72. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/mcpdecl.py +0 -0
  73. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/mcphost.py +0 -0
  74. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/minisign.py +0 -0
  75. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/nethttp.py +0 -0
  76. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/output.py +0 -0
  77. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/paths.py +0 -0
  78. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/policy.py +0 -0
  79. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/projectlock.py +0 -0
  80. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/provenance.py +0 -0
  81. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/rag.py +0 -0
  82. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/registry.py +0 -0
  83. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/resolve.py +0 -0
  84. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/rules.py +0 -0
  85. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/scopes.py +0 -0
  86. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/secretscan.py +0 -0
  87. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/selfupdate.py +0 -0
  88. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/serve.py +0 -0
  89. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/stackprobe.py +0 -0
  90. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/staleness.py +0 -0
  91. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/store.py +0 -0
  92. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/trustaudit.py +0 -0
  93. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/typosquat.py +0 -0
  94. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/updatediff.py +0 -0
  95. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/util.py +0 -0
  96. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/core/workflows.py +0 -0
  97. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/data/registries.json +0 -0
  98. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/errors.py +0 -0
  99. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_cli/spin.py +0 -0
  100. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  101. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  102. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_skill_cli.egg-info/requires.txt +0 -0
  103. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/boost_skill_cli.egg-info/top_level.txt +0 -0
  104. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/codecov.yml +0 -0
  105. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/.claude/settings.local.json +0 -0
  106. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/DEBUGGING.md +0 -0
  107. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/adapters.html +0 -0
  108. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/architecture/README.md +0 -0
  109. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/architecture/c4-components-core.md +0 -0
  110. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/architecture/c4-containers.md +0 -0
  111. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/architecture/c4-context.md +0 -0
  112. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/architecture/c4-dynamic-install.md +0 -0
  113. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/gifs/distill.gif +0 -0
  114. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/gifs/doctor.gif +0 -0
  115. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/gifs/explain.gif +0 -0
  116. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/gifs/hooks.gif +0 -0
  117. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/gifs/install.gif +0 -0
  118. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/gifs/pulse.gif +0 -0
  119. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/gifs/search.gif +0 -0
  120. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/gifs/tap.gif +0 -0
  121. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/tapes/distill.tape +0 -0
  122. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/tapes/doctor.tape +0 -0
  123. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/tapes/explain.tape +0 -0
  124. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/tapes/hooks.tape +0 -0
  125. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/tapes/install.tape +0 -0
  126. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/tapes/pulse.tape +0 -0
  127. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/tapes/search.tape +0 -0
  128. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel/tapes/tap.tape +0 -0
  129. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/carousel.html +0 -0
  130. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/commands.html +0 -0
  131. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/demo.gif +0 -0
  132. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/demo.tape +0 -0
  133. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/design-roadmap.html +0 -0
  134. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/eval.html +0 -0
  135. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/index.html +0 -0
  136. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/mcp-hub.html +0 -0
  137. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/rag-architecture.md +0 -0
  138. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D01.md +0 -0
  139. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D02.md +0 -0
  140. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D03.md +0 -0
  141. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D04.md +0 -0
  142. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D05.md +0 -0
  143. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D06.md +0 -0
  144. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D07.md +0 -0
  145. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D08.md +0 -0
  146. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D09.md +0 -0
  147. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D10.md +0 -0
  148. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D11.md +0 -0
  149. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D12.md +0 -0
  150. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D13.md +0 -0
  151. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D14.md +0 -0
  152. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D15.md +0 -0
  153. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D16.md +0 -0
  154. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D17.md +0 -0
  155. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D18.md +0 -0
  156. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D19.md +0 -0
  157. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D20.md +0 -0
  158. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D21.md +0 -0
  159. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D22.md +0 -0
  160. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D23.md +0 -0
  161. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D24.md +0 -0
  162. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D25.md +0 -0
  163. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/BOOST-D26.md +0 -0
  164. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  165. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  166. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  167. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  168. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  169. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  170. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  171. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  172. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  173. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  174. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  175. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  176. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  177. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  178. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  179. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  180. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  181. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  182. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  183. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  184. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  185. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  186. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  187. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/command-carousel-page.md +0 -0
  188. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  189. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  190. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  191. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  192. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  193. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  194. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  195. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  196. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  197. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  198. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  199. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  200. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  201. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  202. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  203. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  204. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  205. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  206. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  207. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  208. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  209. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  210. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  211. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  212. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  213. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  214. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  215. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  216. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  217. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/github-community-health-files.md +0 -0
  218. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  219. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  220. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  221. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  222. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  223. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  224. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  225. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  226. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  227. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  228. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  229. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  230. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  231. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  232. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  233. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  234. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  235. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  236. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  237. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  238. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  239. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  240. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  241. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  242. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  243. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  244. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  245. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  246. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  247. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  248. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  249. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  250. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  251. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  252. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  253. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  254. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  255. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  256. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  257. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  258. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  259. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  260. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  261. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  262. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  263. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  264. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  265. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  266. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  267. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  268. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  269. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  270. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  271. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  272. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  273. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  274. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  275. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  276. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  277. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  278. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  279. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  280. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  281. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  282. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  283. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  284. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  285. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  286. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  287. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  288. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  289. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  290. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  291. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  292. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  293. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  294. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  295. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  296. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  297. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  298. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  299. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  300. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  301. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  302. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  303. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  304. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  305. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  306. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  307. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  308. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  309. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  310. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  311. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  312. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  313. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  314. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  315. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  316. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  317. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  318. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  319. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  320. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  321. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  322. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  323. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  324. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  325. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  326. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  327. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  328. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  329. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  330. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  331. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  332. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  333. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  334. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  335. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  336. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  337. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  338. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  339. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  340. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  341. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  342. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  343. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  344. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  345. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  346. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  347. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  348. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  349. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  350. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  351. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/workspace-scope-install.md +0 -0
  352. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  353. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/eslint.config.mjs +0 -0
  354. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/evals/README.md +0 -0
  355. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/evals/__init__.py +0 -0
  356. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/evals/baseline.json +0 -0
  357. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/evals/faithfulness.py +0 -0
  358. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/evals/golden_set.json +0 -0
  359. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/evals/make_corpus.py +0 -0
  360. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/evals/make_golden.py +0 -0
  361. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/evals/metrics.py +0 -0
  362. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/evals/run_evals.py +0 -0
  363. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/examples/README.md +0 -0
  364. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/examples/adapt-demo.sh +0 -0
  365. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/examples/boost-run-prototype.sh +0 -0
  366. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/index.html +0 -0
  367. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/noxfile.py +0 -0
  368. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/pyproject.toml +0 -0
  369. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/coverage-tools.in +0 -0
  370. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/coverage-tools.txt +0 -0
  371. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/lint-tools.in +0 -0
  372. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/lint-tools.txt +0 -0
  373. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/mutation-tools.in +0 -0
  374. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/mutation-tools.txt +0 -0
  375. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/platform-pins.lock +0 -0
  376. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/release-tools.in +0 -0
  377. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/release-tools.txt +0 -0
  378. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/test-tools.in +0 -0
  379. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/requirements/test-tools.txt +0 -0
  380. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/a11y_check.py +0 -0
  381. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/bench_cli.sh +0 -0
  382. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/build_command_reference.py +0 -0
  383. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/build_registries.py +0 -0
  384. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/build_roadmap.py +0 -0
  385. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/check_anchors.py +0 -0
  386. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/check_licenses.py +0 -0
  387. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/check_required_checks.py +0 -0
  388. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/ensure_eval_corpus.sh +0 -0
  389. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/eval_explain.py +0 -0
  390. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/eval_gate.py +0 -0
  391. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/eval_recommend.py +0 -0
  392. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/eval_retrieval.py +0 -0
  393. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/eval_stats_summary.py +0 -0
  394. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/import_budget.py +0 -0
  395. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/lock_toolchain.py +0 -0
  396. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/mutation_gate.py +0 -0
  397. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/mutation_shards.py +0 -0
  398. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/mutation_weights.json +0 -0
  399. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/perf_gate.py +0 -0
  400. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/post_deploy_smoke.py +0 -0
  401. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/release_guard.py +0 -0
  402. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/scripts/release_preflight.py +0 -0
  403. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/setup.cfg +0 -0
  404. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/sonar-project.properties +0 -0
  405. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/style/README.md +0 -0
  406. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/style/boost.css +0 -0
  407. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/style/boost.js +0 -0
  408. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/style/demo.html +0 -0
  409. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/adapt.feature +0 -0
  410. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/browse.feature +0 -0
  411. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/count.feature +0 -0
  412. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/discover.feature +0 -0
  413. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/doctor.feature +0 -0
  414. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/environment.py +0 -0
  415. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/explain.feature +0 -0
  416. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/index.feature +0 -0
  417. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/install.feature +0 -0
  418. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/list.feature +0 -0
  419. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/mcp.feature +0 -0
  420. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/search.feature +0 -0
  421. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/steps/cli_steps.py +0 -0
  422. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/steps/discovery_steps.py +0 -0
  423. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/steps/mcp_steps.py +0 -0
  424. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/bdd/features/steps/quality_steps.py +0 -0
  425. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/conftest.py +0 -0
  426. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/eval/baseline.json +0 -0
  427. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/eval/explain.jsonl +0 -0
  428. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/eval/golden-natural.jsonl +0 -0
  429. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/eval/golden.jsonl +0 -0
  430. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/eval/recommend.jsonl +0 -0
  431. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/eval/taps.txt +0 -0
  432. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_capabilities_policy.py +0 -0
  433. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_adapt.py +0 -0
  434. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_bmad.py +0 -0
  435. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_configuration.py +0 -0
  436. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_discovery.py +0 -0
  437. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_hooks.py +0 -0
  438. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_info.py +0 -0
  439. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_intelligence.py +0 -0
  440. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_pkg.py +0 -0
  441. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_quality.py +0 -0
  442. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_taps.py +0 -0
  443. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_cli_team.py +0 -0
  444. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_everyday_loop.py +0 -0
  445. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_integrity_enforce.py +0 -0
  446. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_property_parsers.py +0 -0
  447. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_run.py +0 -0
  448. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_tap_signing.py +0 -0
  449. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/functional/test_workspace_scope.py +0 -0
  450. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/README.md +0 -0
  451. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  452. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  453. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  454. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  455. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  456. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  457. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  458. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  459. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  460. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  461. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  462. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  463. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  464. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  465. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  466. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  467. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  468. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  469. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  470. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  471. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/fuzz_frontmatter.py +0 -0
  472. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/fuzz/fuzz_registry.py +0 -0
  473. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/make_fixture.py +0 -0
  474. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/perf/test_benchmarks.py +0 -0
  475. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/smoke.sh +0 -0
  476. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_a11y_check.py +0 -0
  477. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_adapters.py +0 -0
  478. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_adapters_multi.py +0 -0
  479. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_adapters_runner.py +0 -0
  480. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_agents.py +0 -0
  481. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_ai.py +0 -0
  482. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_capabilities.py +0 -0
  483. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_catalog.py +0 -0
  484. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_check_anchors.py +0 -0
  485. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_check_licenses.py +0 -0
  486. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_claude_settings.py +0 -0
  487. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_cliparse.py +0 -0
  488. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_codeql_analysis_key.py +0 -0
  489. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_command_reference_fresh.py +0 -0
  490. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_community_health_files.py +0 -0
  491. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_config.py +0 -0
  492. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_content_dedupe.py +0 -0
  493. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_dedup_trust.py +0 -0
  494. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_dense.py +0 -0
  495. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_dense_fallback.py +0 -0
  496. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_dense_fix_hint.py +0 -0
  497. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_dense_status.py +0 -0
  498. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_dependabot_config.py +0 -0
  499. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_docs_pages_linked.py +0 -0
  500. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_docsite_chrome.py +0 -0
  501. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_ed25519.py +0 -0
  502. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_embed.py +0 -0
  503. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_embed_local.py +0 -0
  504. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_entry_key.py +0 -0
  505. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_errors_and_cli_table.py +0 -0
  506. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_eval_baseline.py +0 -0
  507. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_eval_faithfulness.py +0 -0
  508. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_eval_gate.py +0 -0
  509. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_eval_metrics.py +0 -0
  510. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_eval_stats_summary.py +0 -0
  511. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_faithfulness.py +0 -0
  512. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_frontmatter.py +0 -0
  513. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_fuzz_targets.py +0 -0
  514. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_gitleaks_config.py +0 -0
  515. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_gitutil.py +0 -0
  516. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_imperative.py +0 -0
  517. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_import_budget.py +0 -0
  518. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_injectscan.py +0 -0
  519. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_installscan.py +0 -0
  520. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_integrity.py +0 -0
  521. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_journal.py +0 -0
  522. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_localembed.py +0 -0
  523. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_localembed_e2e.py +0 -0
  524. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_lockfile.py +0 -0
  525. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_logs.py +0 -0
  526. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_marketing_counts.py +0 -0
  527. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_mcp_install_scan.py +0 -0
  528. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_mcpdecl.py +0 -0
  529. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_mcphost.py +0 -0
  530. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_minisign.py +0 -0
  531. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_mutation_hardening.py +0 -0
  532. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_mutation_shards.py +0 -0
  533. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_mutation_subfile_shards.py +0 -0
  534. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_mutmut_source_paths.py +0 -0
  535. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_nethttp.py +0 -0
  536. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_output.py +0 -0
  537. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_paths.py +0 -0
  538. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_perf_gate.py +0 -0
  539. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_pkg_confusions.py +0 -0
  540. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_pkg_injection.py +0 -0
  541. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_pkg_secrets.py +0 -0
  542. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_platform_pins.py +0 -0
  543. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_policy.py +0 -0
  544. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_post_deploy_smoke.py +0 -0
  545. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_project_mcp_sidecar.py +0 -0
  546. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_projectlock.py +0 -0
  547. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_provenance.py +0 -0
  548. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_rag.py +0 -0
  549. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_rag_fusion.py +0 -0
  550. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_registries_fresh.py +0 -0
  551. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_registry.py +0 -0
  552. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_registry_categories.py +0 -0
  553. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_release_guard.py +0 -0
  554. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_release_preflight.py +0 -0
  555. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_required_checks.py +0 -0
  556. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_resolve.py +0 -0
  557. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_roadmap_fresh.py +0 -0
  558. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_rules.py +0 -0
  559. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_scopes.py +0 -0
  560. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_secretscan.py +0 -0
  561. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_selfupdate.py +0 -0
  562. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_serve.py +0 -0
  563. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_spin.py +0 -0
  564. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_stackprobe.py +0 -0
  565. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_staleness.py +0 -0
  566. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_store.py +0 -0
  567. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_token_parity.py +0 -0
  568. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_toolchain_lock.py +0 -0
  569. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_trustaudit.py +0 -0
  570. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_typosquat.py +0 -0
  571. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_updatediff.py +0 -0
  572. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_util.py +0 -0
  573. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_version.py +0 -0
  574. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_workflow_concurrency.py +0 -0
  575. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_workflow_timeouts.py +0 -0
  576. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/unit/test_workflows.py +0 -0
  577. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/visual/a11y_check.mjs +0 -0
  578. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/visual/console_check.mjs +0 -0
  579. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/visual/package-lock.json +0 -0
  580. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/visual/package.json +0 -0
  581. {boost_skill_cli-1.0.339 → boost_skill_cli-1.0.341}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.339
3
+ Version: 1.0.341
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -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.339'
22
- __version_tuple__ = version_tuple = (1, 0, 339)
21
+ __version__ = version = '1.0.341'
22
+ __version_tuple__ = version_tuple = (1, 0, 341)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -816,7 +816,15 @@ REGISTRY = mcp.Registry()
816
816
  def _tool_search(args: dict):
817
817
  query = str(args.get("query", ""))
818
818
  rag.ensure() # build the full-content index on first use (BM25 by default)
819
- rag_result = rag.search(query, limit=10)
819
+ # smart=True is stated, not inherited. It is `rag.search`'s default, so this
820
+ # path was spending an LLM call per search by accident of a signature —
821
+ # while the CLI makes the user ask for it with `--smart`. Measured on the
822
+ # 91-query golden set, the rerank moves hit@1 from 0.791 to 0.945, and an
823
+ # agent acts on the top result rather than scanning ten, so it is the one
824
+ # caller for whom the seconds are clearly worth it. Written down here so
825
+ # the asymmetry with the CLI is a decision someone can revisit, not a
826
+ # default nobody chose. It degrades on its own when no AI is configured.
827
+ rag_result = rag.search(query, limit=10, smart=True)
820
828
  if rag_result is not None: # full-content index is built
821
829
  hits, _ranker = rag_result
822
830
  if not hits:
@@ -953,8 +961,10 @@ REGISTRY.register(
953
961
  "in front of you has a name you could say out loud — \"set up code "
954
962
  "review\", \"add commit conventions\", \"debug flaky tests\" — and before "
955
963
  "writing a skill, subagent, slash-command or rule from scratch. Read-only, "
956
- "no side effects, installs nothing. Returning nothing relevant is a fine "
957
- "answer: it means build it yourself.",
964
+ "no side effects, installs nothing. Takes a few seconds because it ranks "
965
+ "the matches with an LLM, which is what makes the top result worth acting "
966
+ "on. Returning nothing relevant is a fine answer: it means build it "
967
+ "yourself.",
958
968
  {"type": "object",
959
969
  "properties": {"query": {"type": "string",
960
970
  "description": "what the skill should do (a task, "
@@ -113,8 +113,11 @@ INSTRUCTIONS = (
113
113
  "review\", \"add commit conventions\", \"write a migration\", \"debug "
114
114
  "flaky tests\" — someone has probably already written it down. Call "
115
115
  "boost_list for what is installed on this machine and boost_search for "
116
- "what exists. Both are read-only, take about a second, and install "
117
- "nothing.\n"
116
+ "what exists. Both are read-only and install nothing. boost_list is "
117
+ "instant. boost_search takes a few seconds: it retrieves, then ranks them "
118
+ "with an LLM, which is worth it because you act on the top result — "
119
+ "measured, that ranking puts the right skill first 95% of the time "
120
+ "against 79% without it.\n"
118
121
  "\n"
119
122
  "Finding nothing is a good outcome, not a wasted call: it tells you to "
120
123
  "build it yourself, now knowing that nothing already covers it. Finding "
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.339
3
+ Version: 1.0.341
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -255,6 +255,7 @@ docs/roadmap/items/mcp-launch-objc-fork-safety.md
255
255
  docs/roadmap/items/mcp-one-benefit-nameable-task.md
256
256
  docs/roadmap/items/mcp-register-names-server-before-env.md
257
257
  docs/roadmap/items/mcp-search-before-reinventing.md
258
+ docs/roadmap/items/mcp-search-cost-was-understated.md
258
259
  docs/roadmap/items/mcp-servers-ignore-install-scope.md
259
260
  docs/roadmap/items/mcp-startup-self-harden-fork-safety.md
260
261
  docs/roadmap/items/memoize-config-load-in-process.md
@@ -331,3 +331,25 @@ both sides, and only the document half can be shipped ahead of time.
331
331
  <b>Still open in step 2:</b> the CI workflow that publishes shards as release artifacts, and the
332
332
  <code>boost tap</code> integration that fetches one automatically. Both are now plumbing on top of a
333
333
  verified mechanism rather than open questions. Steps 3 and 5 are untouched.
334
+
335
+ <b>Step 3 works, and it did not need new code &mdash; it needed proving.</b> Local delta top-up falls
336
+ out of the shard mechanism plus the commit-keyed reuse <code>build()</code> already had:
337
+ <code>import_shard</code> records the tap's commit in the same <code>meta.commits</code> map
338
+ <code>build()</code> consults, so an imported shard is indistinguishable from locally-built vectors
339
+ as far as reuse is concerned.
340
+
341
+ Measured end to end with a stubbed embedder, on a store holding an imported shard for
342
+ <code>anthropics/skills</code> plus a freshly tapped <code>Aaronontheweb/dotnet-cursor-rules</code>:
343
+ <b>158 chunks embedded &mdash; the new tap only &mdash; and the shard's 262 untouched</b>. The
344
+ resulting store is one coherent embedding space: 420 vectors, both taps' commits recorded, single
345
+ provider/model/dim. That is exactly the shape this step asks for &mdash; shards cover the popular
346
+ registries, the local model makes the long tail self-serve, and cost scales with what a user taps
347
+ rather than with the ecosystem.
348
+
349
+ Two tests now pin it, because the coupling is the kind that breaks silently: an import that forgot to
350
+ record the commit would still produce a <em>working</em> store, and the only symptom would be
351
+ re-embedding the shard's chunks on every later build &mdash; minutes of wasted CPU that nothing
352
+ reports.
353
+
354
+ <b>Steps 1, 2, 3, 4 and 6 are now done; step 5 (a hosted demo) is the remainder</b>, along with the
355
+ CI workflow that publishes shards as release artifacts, which is noted under step 2.
@@ -0,0 +1,44 @@
1
+ ---
2
+ id: mcp-search-cost-was-understated
3
+ board: code
4
+ section: dx
5
+ status: inflight
6
+ category: Interop · Adoption
7
+ complexity: S
8
+ impact: Medium
9
+ wow: 2
10
+ note: the instructions claimed a second; it is twelve
11
+ order: 76
12
+ owner: loop/mcp-true-cost
13
+ pr:
14
+ title: The MCP instructions understated what a search costs by 100x
15
+ ---
16
+ <a href="#mcp-one-benefit-nameable-task">The nameable-task rewrite</a> gave the MCP
17
+ server a stated cost, on the reasoning that an unknown-price call with an unknown hit
18
+ rate gets skipped. That reasoning still holds. The number was wrong: <em>"Both are
19
+ read-only, take about a second, and install nothing."</em> Measured against the real
20
+ path, <code>boost_list</code> is instant but <code>boost_search</code> runs
21
+ <b>11.7&ndash;17.0&nbsp;s</b> (median ~12) against <b>0.10&nbsp;s</b> with the rerank
22
+ off &mdash; because <code>rag.search</code> defaults <code>smart=True</code> and the MCP
23
+ tool called it bare, so every agent search spends an LLM call while the CLI makes a
24
+ human ask with <code>--smart</code>.
25
+ <b>Ship the cost, not a smaller one.</b> The fix is not to hide the latency: the rerank
26
+ is the largest measured quality lever in the retrieval stack. On the 91-query golden set
27
+ it moves <code>hit@1</code> from <b>0.791 to 0.945</b> &mdash; +14 net queries, against
28
+ the ~6-query floor for <em>p</em>&lt;0.05 at this <em>n</em>. For scale, full-content
29
+ BM25 beat the old frontmatter search by +0.077, and dense retrieval tied BM25 exactly at
30
+ 0.000. An agent acts on the top result rather than scanning ten, so it is the caller for
31
+ whom those seconds are most clearly worth paying. The instructions now separate the two
32
+ tools (<code>boost_list</code> instant, <code>boost_search</code> a few seconds) and say
33
+ what the seconds buy, because a wrong cost in the one paragraph whose job is to make the
34
+ tool worth reaching for discredits everything around it &mdash; and an agent that
35
+ budgeted a second gets a surprise instead of a decision.
36
+ <b>The default is now written down.</b> <code>smart=True</code> is passed explicitly at
37
+ the MCP call site with the measurement in a comment. It was previously inherited from
38
+ <code>rag.search</code>'s signature, which meant the most expensive behaviour in the
39
+ tool was an accident nobody had chosen and nobody could find. Same asymmetry as before,
40
+ but now it is a decision someone can revisit.
41
+ <b>What is still unmeasured:</b> the lift is over <em>raw BM25</em>, the pipeline that
42
+ stopped shipping when RRF fusion landed. Whether it survives over the fused ranking
43
+ needs the arm that
44
+ <a href="#keyless-semantic-search-for-everyone">step 6</a> is already committed to.
@@ -111,7 +111,7 @@
111
111
  <div class="stat"><b>16</b><span>Shipped</span></div>
112
112
  <div class="stat"><b>1</b><span>Next up</span></div>
113
113
  <div class="stat"><b>4</b><span>Planned</span></div>
114
- <div class="stat"><b>190</b><span>Loop finds</span></div>
114
+ <div class="stat"><b>191</b><span>Loop finds</span></div>
115
115
  <!-- /ROADMAP:stats -->
116
116
  </div>
117
117
  </section>
@@ -918,7 +918,29 @@ both sides, and only the document half can be shipped ahead of time.
918
918
 
919
919
  <b>Still open in step 2:</b> the CI workflow that publishes shards as release artifacts, and the
920
920
  <code>boost tap</code> integration that fetches one automatically. Both are now plumbing on top of a
921
- verified mechanism rather than open questions. Steps 3 and 5 are untouched.</p>
921
+ verified mechanism rather than open questions. Steps 3 and 5 are untouched.
922
+
923
+ <b>Step 3 works, and it did not need new code &mdash; it needed proving.</b> Local delta top-up falls
924
+ out of the shard mechanism plus the commit-keyed reuse <code>build()</code> already had:
925
+ <code>import_shard</code> records the tap's commit in the same <code>meta.commits</code> map
926
+ <code>build()</code> consults, so an imported shard is indistinguishable from locally-built vectors
927
+ as far as reuse is concerned.
928
+
929
+ Measured end to end with a stubbed embedder, on a store holding an imported shard for
930
+ <code>anthropics/skills</code> plus a freshly tapped <code>Aaronontheweb/dotnet-cursor-rules</code>:
931
+ <b>158 chunks embedded &mdash; the new tap only &mdash; and the shard's 262 untouched</b>. The
932
+ resulting store is one coherent embedding space: 420 vectors, both taps' commits recorded, single
933
+ provider/model/dim. That is exactly the shape this step asks for &mdash; shards cover the popular
934
+ registries, the local model makes the long tail self-serve, and cost scales with what a user taps
935
+ rather than with the ecosystem.
936
+
937
+ Two tests now pin it, because the coupling is the kind that breaks silently: an import that forgot to
938
+ record the commit would still produce a <em>working</em> store, and the only symptom would be
939
+ re-embedding the shard's chunks on every later build &mdash; minutes of wasted CPU that nothing
940
+ reports.
941
+
942
+ <b>Steps 1, 2, 3, 4 and 6 are now done; step 5 (a hosted demo) is the remainder</b>, along with the
943
+ CI workflow that publishes shards as release artifacts, which is noted under step 2.</p>
922
944
  <div class="meta">
923
945
  <span class="m">Complexity <b>L</b></span>
924
946
  <span class="m hi">Impact <b>High</b></span>
@@ -4755,6 +4777,46 @@ with a negative assertion so the hop cannot creep back.</p>
4755
4777
  <span class="m">agent reflex</span>
4756
4778
  </div>
4757
4779
  </article>
4780
+
4781
+ <article class="cap rcard" id="mcp-search-cost-was-understated">
4782
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">Interop · Adoption</span></div>
4783
+ <h3>The MCP instructions understated what a search costs by 100x</h3>
4784
+ <p><a href="#mcp-one-benefit-nameable-task">The nameable-task rewrite</a> gave the MCP
4785
+ server a stated cost, on the reasoning that an unknown-price call with an unknown hit
4786
+ rate gets skipped. That reasoning still holds. The number was wrong: <em>"Both are
4787
+ read-only, take about a second, and install nothing."</em> Measured against the real
4788
+ path, <code>boost_list</code> is instant but <code>boost_search</code> runs
4789
+ <b>11.7&ndash;17.0&nbsp;s</b> (median ~12) against <b>0.10&nbsp;s</b> with the rerank
4790
+ off &mdash; because <code>rag.search</code> defaults <code>smart=True</code> and the MCP
4791
+ tool called it bare, so every agent search spends an LLM call while the CLI makes a
4792
+ human ask with <code>--smart</code>.
4793
+ <b>Ship the cost, not a smaller one.</b> The fix is not to hide the latency: the rerank
4794
+ is the largest measured quality lever in the retrieval stack. On the 91-query golden set
4795
+ it moves <code>hit@1</code> from <b>0.791 to 0.945</b> &mdash; +14 net queries, against
4796
+ the ~6-query floor for <em>p</em>&lt;0.05 at this <em>n</em>. For scale, full-content
4797
+ BM25 beat the old frontmatter search by +0.077, and dense retrieval tied BM25 exactly at
4798
+ 0.000. An agent acts on the top result rather than scanning ten, so it is the caller for
4799
+ whom those seconds are most clearly worth paying. The instructions now separate the two
4800
+ tools (<code>boost_list</code> instant, <code>boost_search</code> a few seconds) and say
4801
+ what the seconds buy, because a wrong cost in the one paragraph whose job is to make the
4802
+ tool worth reaching for discredits everything around it &mdash; and an agent that
4803
+ budgeted a second gets a surprise instead of a decision.
4804
+ <b>The default is now written down.</b> <code>smart=True</code> is passed explicitly at
4805
+ the MCP call site with the measurement in a comment. It was previously inherited from
4806
+ <code>rag.search</code>'s signature, which meant the most expensive behaviour in the
4807
+ tool was an accident nobody had chosen and nobody could find. Same asymmetry as before,
4808
+ but now it is a decision someone can revisit.
4809
+ <b>What is still unmeasured:</b> the lift is over <em>raw BM25</em>, the pipeline that
4810
+ stopped shipping when RRF fusion landed. Whether it survives over the fused ranking
4811
+ needs the arm that
4812
+ <a href="#keyless-semantic-search-for-everyone">step 6</a> is already committed to.</p>
4813
+ <div class="meta">
4814
+ <span class="m">Complexity <b>S</b></span>
4815
+ <span class="m">Impact <b>Medium</b></span>
4816
+ <span class="m">Wow <b class="wow">★★</b></span>
4817
+ <span class="m">the instructions claimed a second; it is twelve</span>
4818
+ </div>
4819
+ </article>
4758
4820
  <!-- /ROADMAP:cards -->
4759
4821
 
4760
4822
  </div>
@@ -96,7 +96,19 @@ def with_backend(monkeypatch):
96
96
  instead of exercising the check they are named for, which is how they
97
97
  passed locally and reddened three macOS legs plus the canary.
98
98
  """
99
- monkeypatch.setattr(dense, "_load", lambda: object())
99
+ class _FakeVec:
100
+ """Enough of sqlite_vec for the paths under test.
101
+
102
+ `serialize_float32` is real: tests that WRITE vectors reach it, and a
103
+ bare object() stub only survived while every test stopped at validation.
104
+ """
105
+
106
+ @staticmethod
107
+ def serialize_float32(vec):
108
+ import struct
109
+ return struct.pack("%df" % len(vec), *vec)
110
+
111
+ monkeypatch.setattr(dense, "_load", lambda: _FakeVec)
100
112
  monkeypatch.setattr(dense, "_connect",
101
113
  lambda: sqlite3.connect(str(dense.db_path())))
102
114
 
@@ -240,3 +252,66 @@ class TestWorksWithoutTheExtension:
240
252
  "commit": "c1", "chunks": []}
241
253
  ok, reason = dense.import_shard(shard, commit="c1")
242
254
  assert ok is False and "backend" in reason
255
+
256
+
257
+ class TestDeltaTopUp:
258
+ """An imported shard must make `build` skip that tap and embed only the rest.
259
+
260
+ This is step 3 of the keyless epic — "when a tap runs ahead of its published
261
+ shard, or is a registry CI has never seen, embed just those files on the
262
+ spot". It works because `import_shard` records the tap's commit in the same
263
+ `meta.commits` map that `build` consults, so a shard is indistinguishable
264
+ from locally-built vectors as far as reuse is concerned.
265
+
266
+ That coupling is easy to break silently: an import that forgot to record the
267
+ commit would still produce a working store, and the only symptom would be
268
+ re-embedding the shard's chunks on the next build — minutes of wasted CPU
269
+ that nothing reports. Hence a test.
270
+ """
271
+
272
+ def _tap_seen(self, monkeypatch, commits):
273
+ from boost_cli.core import rag
274
+ monkeypatch.setattr(rag, "_tap_commits", lambda: commits)
275
+ monkeypatch.setattr(rag, "_tap_paths", lambda: {})
276
+
277
+ def test_an_imported_shard_is_reused_not_re_embedded(self, sandbox,
278
+ with_backend,
279
+ monkeypatch):
280
+ from boost_cli.core import embed
281
+ _store(rows=(("a", "acme/skills"),))
282
+ embedded = []
283
+ monkeypatch.setattr(embed, "embed",
284
+ lambda texts, **kw: embedded.extend(texts) or
285
+ [[0.1, 0.2, 0.3] for _ in texts])
286
+ monkeypatch.setattr(embed, "available", lambda: True)
287
+ monkeypatch.setattr(embed, "dimension", lambda: 3)
288
+ monkeypatch.setattr(embed, "provider", lambda: "local")
289
+ monkeypatch.setattr(embed, "model", lambda: "bge")
290
+ self._tap_seen(monkeypatch, {"acme__skills": "c1"})
291
+ entries = [{"name": "a", "tap": "acme/skills", "kind": "skill",
292
+ "skill_md": "a/SKILL.md", "_body": "text", "description": ""}]
293
+ stats = dense.build(entries=entries, force=False)
294
+ assert stats is not None
295
+ assert "acme__skills" in stats["reused"]
296
+ assert embedded == [], "re-embedded a tap the shard already covered"
297
+
298
+ def test_a_tap_the_shard_does_not_cover_is_still_embedded(self, sandbox,
299
+ with_backend,
300
+ monkeypatch):
301
+ # The other half: shards cover the popular registries, the local model
302
+ # makes the long tail self-serve. If this regressed, an uncatalogued
303
+ # registry would be a dead end for a keyless user.
304
+ from boost_cli.core import embed
305
+ _store(rows=(("a", "acme/skills"),))
306
+ monkeypatch.setattr(embed, "embed",
307
+ lambda texts, **kw: [[0.1, 0.2, 0.3] for _ in texts])
308
+ monkeypatch.setattr(embed, "available", lambda: True)
309
+ monkeypatch.setattr(embed, "dimension", lambda: 3)
310
+ monkeypatch.setattr(embed, "provider", lambda: "local")
311
+ monkeypatch.setattr(embed, "model", lambda: "bge")
312
+ self._tap_seen(monkeypatch, {"acme__skills": "c1", "new__repo": "z9"})
313
+ entries = [{"name": "b", "tap": "new/repo", "kind": "skill",
314
+ "skill_md": "b/SKILL.md", "_body": "text", "description": ""}]
315
+ stats = dense.build(entries=entries, force=False)
316
+ assert stats is not None
317
+ assert "new/repo" in stats["reindexed"]
@@ -149,6 +149,28 @@ class TestHandleRequest:
149
149
  assert "before you write a new skill" not in low
150
150
  assert "authoring" not in low
151
151
 
152
+ def test_instructions_do_not_understate_what_a_search_costs(self):
153
+ # The first version of this block said both tools "take about a second".
154
+ # boost_list does; boost_search does NOT -- it reranks with an LLM by
155
+ # default, measured at ~12s median against 0.10s without. Shipping a
156
+ # false cost in the text whose whole job is making the tool worth
157
+ # reaching for is the one lie that discredits the rest of it, and an
158
+ # agent that budgeted a second gets a surprise instead of a decision.
159
+ low = mcp.INSTRUCTIONS.lower()
160
+ assert "about a second" not in low
161
+ # State it, and state why it is worth paying rather than just warning.
162
+ assert "seconds" in low
163
+ assert "ranks them with an llm" in low or "reranks" in low
164
+ assert "read-only" in low # the part that WAS true stays
165
+
166
+ def test_instructions_still_separate_the_free_tool_from_the_slow_one(self):
167
+ # boost_list really is instant, and collapsing the two costs into one
168
+ # number is what produced the wrong claim. Naming them separately is
169
+ # what lets an agent reach for the cheap one freely.
170
+ low = mcp.INSTRUCTIONS.lower()
171
+ assert "boost_list" in low and "boost_search" in low
172
+ assert "instant" in low
173
+
152
174
  def test_instructions_route_search_straight_to_install(self):
153
175
  # boost_info sat between search and install in the advertised flow, but
154
176
  # search already returns each hit's description — the only field that