boost-skill-cli 1.2.49__tar.gz → 1.2.51__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 (815) hide show
  1. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/CLAUDE.md +12 -0
  2. {boost_skill_cli-1.2.49/boost_skill_cli.egg-info → boost_skill_cli-1.2.51}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/configuration.py +61 -20
  5. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/discovery.py +41 -4
  6. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/dense.py +43 -8
  7. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/util.py +17 -0
  8. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  9. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  10. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/mcp.feature +2 -1
  11. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_configuration.py +73 -2
  12. boost_skill_cli-1.2.51/tests/unit/test_dense_progress.py +211 -0
  13. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.gitattributes +0 -0
  14. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.gitignore +0 -0
  15. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.gitleaks.toml +0 -0
  16. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.htmlvalidate.json +0 -0
  17. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.lighthouserc.json +0 -0
  18. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.lycheeignore +0 -0
  19. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.markdownlint-cli2.jsonc +0 -0
  20. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.pre-commit-config.yaml +0 -0
  21. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.stylelintrc.json +0 -0
  22. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.vale/styles/boost/AIWriting.yml +0 -0
  23. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.vale/styles/boost/Terminology.yml +0 -0
  24. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  25. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/.vale.ini +0 -0
  26. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/CODE_OF_CONDUCT.md +0 -0
  27. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/CONTRIBUTING.md +0 -0
  28. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/DCO +0 -0
  29. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/GOVERNANCE.md +0 -0
  30. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/LICENSE +0 -0
  31. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/MAINTAINERS.md +0 -0
  32. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/MANIFEST.in +0 -0
  33. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/Makefile +0 -0
  34. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/README.md +0 -0
  35. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/SECURITY.md +0 -0
  36. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/SUPPORT.md +0 -0
  37. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost +0 -0
  38. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/__init__.py +0 -0
  39. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/__main__.py +0 -0
  40. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/cli.py +0 -0
  41. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/cliparse.py +0 -0
  42. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/__init__.py +0 -0
  43. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/_common.py +0 -0
  44. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/bmad.py +0 -0
  45. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/hooks.py +0 -0
  46. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/info.py +0 -0
  47. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/intelligence.py +0 -0
  48. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/pkg.py +0 -0
  49. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/quality.py +0 -0
  50. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/quickstart.py +0 -0
  51. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/run.py +0 -0
  52. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/safety.py +0 -0
  53. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/taps.py +0 -0
  54. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/commands/team.py +0 -0
  55. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/__init__.py +0 -0
  56. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/adapters.py +0 -0
  57. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/agents.py +0 -0
  58. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/ai.py +0 -0
  59. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/aihost.py +0 -0
  60. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/bmad.py +0 -0
  61. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/bootstrap.py +0 -0
  62. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/browse.py +0 -0
  63. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/builtin.py +0 -0
  64. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/capabilities.py +0 -0
  65. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/catalog.py +0 -0
  66. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/catalogbundle.py +0 -0
  67. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/chat.py +0 -0
  68. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/claude_settings.py +0 -0
  69. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/complete.py +0 -0
  70. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/config.py +0 -0
  71. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/ed25519.py +0 -0
  72. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/embed.py +0 -0
  73. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/faithfulness.py +0 -0
  74. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/frontmatter.py +0 -0
  75. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/gitutil.py +0 -0
  76. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/hookhost.py +0 -0
  77. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/imperative.py +0 -0
  78. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/injectscan.py +0 -0
  79. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/installscan.py +0 -0
  80. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/integrity.py +0 -0
  81. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/journal.py +0 -0
  82. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/localembed.py +0 -0
  83. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/lockfile.py +0 -0
  84. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/logs.py +0 -0
  85. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/mcp.py +0 -0
  86. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/mcpdecl.py +0 -0
  87. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/mcphost.py +0 -0
  88. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/minisign.py +0 -0
  89. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/nethttp.py +0 -0
  90. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/output.py +0 -0
  91. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/paths.py +0 -0
  92. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/policy.py +0 -0
  93. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/projectlock.py +0 -0
  94. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/provenance.py +0 -0
  95. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/rag.py +0 -0
  96. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/registry.py +0 -0
  97. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/resolve.py +0 -0
  98. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/rules.py +0 -0
  99. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/scopes.py +0 -0
  100. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/secretscan.py +0 -0
  101. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/selfupdate.py +0 -0
  102. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/serve.py +0 -0
  103. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/shards.py +0 -0
  104. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/stackprobe.py +0 -0
  105. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/staleness.py +0 -0
  106. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/store.py +0 -0
  107. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/trustaudit.py +0 -0
  108. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/typosquat.py +0 -0
  109. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/updatediff.py +0 -0
  110. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/core/workflows.py +0 -0
  111. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/data/registries.json +0 -0
  112. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/data/rules/boost-first.mdc +0 -0
  113. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/errors.py +0 -0
  114. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_cli/spin.py +0 -0
  115. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_langchain/__init__.py +0 -0
  116. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_langchain/_compat.py +0 -0
  117. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_langchain/graph.py +0 -0
  118. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_langchain/loader.py +0 -0
  119. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_langchain/py.typed +0 -0
  120. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_langchain/retriever.py +0 -0
  121. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  122. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  123. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_skill_cli.egg-info/requires.txt +0 -0
  124. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/boost_skill_cli.egg-info/top_level.txt +0 -0
  125. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/codecov.yml +0 -0
  126. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/.claude/settings.local.json +0 -0
  127. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/DEBUGGING.md +0 -0
  128. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/adapters.html +0 -0
  129. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/architecture/README.md +0 -0
  130. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/architecture/c4-components-core.md +0 -0
  131. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/architecture/c4-containers.md +0 -0
  132. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/architecture/c4-context.md +0 -0
  133. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/architecture/c4-dynamic-install.md +0 -0
  134. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/bmad.md +0 -0
  135. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/gifs/distill.gif +0 -0
  136. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/gifs/doctor.gif +0 -0
  137. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/gifs/explain.gif +0 -0
  138. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/gifs/hooks.gif +0 -0
  139. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/gifs/install.gif +0 -0
  140. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/gifs/pulse.gif +0 -0
  141. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/gifs/search.gif +0 -0
  142. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/gifs/tap.gif +0 -0
  143. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/tapes/distill.tape +0 -0
  144. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/tapes/doctor.tape +0 -0
  145. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/tapes/explain.tape +0 -0
  146. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/tapes/hooks.tape +0 -0
  147. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/tapes/install.tape +0 -0
  148. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/tapes/pulse.tape +0 -0
  149. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/tapes/search.tape +0 -0
  150. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel/tapes/tap.tape +0 -0
  151. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/carousel.html +0 -0
  152. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/chat.html +0 -0
  153. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/code-review.md +0 -0
  154. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/commands.html +0 -0
  155. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/commit-audit.md +0 -0
  156. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/demo-index.json +0 -0
  157. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/demo.gif +0 -0
  158. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/demo.html +0 -0
  159. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/demo.tape +0 -0
  160. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/dependencies.md +0 -0
  161. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/design-roadmap.html +0 -0
  162. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/eval-latest.json +0 -0
  163. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/eval.html +0 -0
  164. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/index.html +0 -0
  165. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/langchain.html +0 -0
  166. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/mcp-hub.html +0 -0
  167. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/openssf-badge.md +0 -0
  168. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/openssf-playbook.md +0 -0
  169. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/rag-architecture.md +0 -0
  170. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D01.md +0 -0
  171. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D02.md +0 -0
  172. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D03.md +0 -0
  173. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D04.md +0 -0
  174. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D05.md +0 -0
  175. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D06.md +0 -0
  176. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D07.md +0 -0
  177. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D08.md +0 -0
  178. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D09.md +0 -0
  179. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D10.md +0 -0
  180. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D11.md +0 -0
  181. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D12.md +0 -0
  182. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D13.md +0 -0
  183. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D14.md +0 -0
  184. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D15.md +0 -0
  185. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D16.md +0 -0
  186. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D17.md +0 -0
  187. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D18.md +0 -0
  188. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D19.md +0 -0
  189. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D20.md +0 -0
  190. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D21.md +0 -0
  191. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D22.md +0 -0
  192. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D23.md +0 -0
  193. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D24.md +0 -0
  194. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D25.md +0 -0
  195. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D26.md +0 -0
  196. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/BOOST-D27.md +0 -0
  197. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  198. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  199. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  200. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  201. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  202. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  203. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  204. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  205. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  206. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  207. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  208. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  209. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  210. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  211. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  212. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  213. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/boost-first-rule.md +0 -0
  214. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  215. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  216. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/branch-current-gate.md +0 -0
  217. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  218. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  219. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  220. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  221. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  222. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  223. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  224. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  225. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  226. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  227. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  228. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  229. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  230. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  231. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/cli-command-audit.md +0 -0
  232. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  233. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  234. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  235. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  236. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/command-carousel-page.md +0 -0
  237. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  238. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  239. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  240. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  241. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  242. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  243. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  244. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  245. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  246. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  247. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  248. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  249. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  250. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  251. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  252. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  253. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  254. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  255. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  256. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  257. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  258. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  259. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  260. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  261. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  262. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  263. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  264. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  265. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  266. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  267. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  268. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  269. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  270. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  271. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  272. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  273. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  274. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  275. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  276. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  277. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  278. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  279. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  280. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  281. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  282. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  283. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  284. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  285. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  286. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  287. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/github-community-health-files.md +0 -0
  288. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  289. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  290. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  291. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  292. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  293. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  294. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  295. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  296. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  297. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  298. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  299. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  300. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  301. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  302. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  303. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  304. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  305. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  306. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  307. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  308. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  309. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  310. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  311. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  312. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  313. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  314. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  315. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  316. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  317. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  318. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  319. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  320. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  321. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  322. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  323. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  324. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  325. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  326. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  327. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  328. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  329. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  330. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  331. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  332. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  333. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  334. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  335. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  336. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  337. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  338. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  339. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  340. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  341. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  342. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  343. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  344. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  345. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  346. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  347. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  348. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  349. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  350. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  351. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  352. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  353. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  354. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  355. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  356. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  357. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  358. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  359. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  360. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  361. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  362. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  363. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  364. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/openssf-playbook.md +0 -0
  365. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/openssf-silver.md +0 -0
  366. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  367. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  368. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  369. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  370. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  371. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  372. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  373. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  374. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  375. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  376. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  377. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  378. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  379. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  380. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  381. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  382. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  383. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  384. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  385. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  386. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  387. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  388. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  389. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  390. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  391. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  392. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  393. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  394. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  395. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  396. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  397. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  398. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/relicence-apache-2.md +0 -0
  399. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  400. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  401. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  402. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  403. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  404. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  405. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  406. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  407. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  408. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  409. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  410. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  411. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  412. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  413. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  414. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  415. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  416. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  417. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  418. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  419. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  420. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  421. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  422. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  423. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  424. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  425. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  426. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  427. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  428. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  429. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  430. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  431. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  432. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  433. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  434. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  435. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  436. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  437. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  438. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  439. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  440. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  441. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  442. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  443. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  444. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  445. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  446. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  447. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  448. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  449. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  450. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  451. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  452. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  453. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  454. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  455. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  456. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  457. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  458. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  459. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  460. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  461. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  462. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  463. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  464. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  465. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  466. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  467. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  468. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  469. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  470. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  471. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  472. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  473. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  474. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  475. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  476. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  477. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  478. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/workspace-scope-install.md +0 -0
  479. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/zip-strict-audit.md +0 -0
  480. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  481. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  482. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/roadmap.html +0 -0
  483. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/security-design.md +0 -0
  484. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/semantic-search.md +0 -0
  485. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  486. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/verifying-releases.md +0 -0
  487. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/vex/meta.md +0 -0
  488. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/vex/openvex.json +0 -0
  489. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  490. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  491. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  492. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  493. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/eslint.config.mjs +0 -0
  494. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/README.md +0 -0
  495. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/__init__.py +0 -0
  496. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/baseline.json +0 -0
  497. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/faithfulness.py +0 -0
  498. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/golden_set.json +0 -0
  499. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/make_corpus.py +0 -0
  500. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/make_golden.py +0 -0
  501. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/metrics.py +0 -0
  502. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/publish_golden_dataset.py +0 -0
  503. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/evals/run_evals.py +0 -0
  504. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/examples/README.md +0 -0
  505. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/examples/adapt-demo.sh +0 -0
  506. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/examples/boost-run-prototype.sh +0 -0
  507. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/index.html +0 -0
  508. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/noxfile.py +0 -0
  509. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/pyproject.toml +0 -0
  510. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/coverage-tools.in +0 -0
  511. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/coverage-tools.txt +0 -0
  512. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/lint-tools.in +0 -0
  513. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/lint-tools.txt +0 -0
  514. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/mutation-tools.in +0 -0
  515. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/mutation-tools.txt +0 -0
  516. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/platform-pins.lock +0 -0
  517. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/release-tools.in +0 -0
  518. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/release-tools.txt +0 -0
  519. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/test-tools.in +0 -0
  520. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/requirements/test-tools.txt +0 -0
  521. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/a11y_check.py +0 -0
  522. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/add_spdx_headers.py +0 -0
  523. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/bench_cli.sh +0 -0
  524. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/build_command_reference.py +0 -0
  525. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/build_demo_index.py +0 -0
  526. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/build_registries.py +0 -0
  527. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/build_roadmap.py +0 -0
  528. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/build_scale_corpus.py +0 -0
  529. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/build_vex.py +0 -0
  530. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/check_anchors.py +0 -0
  531. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/check_branch_current.py +0 -0
  532. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/check_dco.py +0 -0
  533. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/check_licenses.py +0 -0
  534. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/check_reproducible.py +0 -0
  535. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/check_required_checks.py +0 -0
  536. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/ensure_eval_corpus.sh +0 -0
  537. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/eval_corpus.py +0 -0
  538. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/eval_explain.py +0 -0
  539. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/eval_gate.py +0 -0
  540. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/eval_recommend.py +0 -0
  541. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/eval_retrieval.py +0 -0
  542. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/eval_stats_summary.py +0 -0
  543. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/import_budget.py +0 -0
  544. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/lock_toolchain.py +0 -0
  545. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/measure_registry.py +0 -0
  546. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/mutation_gate.py +0 -0
  547. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/mutation_shards.py +0 -0
  548. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/mutation_weights.json +0 -0
  549. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/normalize_sdist.py +0 -0
  550. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/page_budget.py +0 -0
  551. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/perf_gate.py +0 -0
  552. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/post_deploy_smoke.py +0 -0
  553. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/publish_eval_json.py +0 -0
  554. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/publish_shards.py +0 -0
  555. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/release_guard.py +0 -0
  556. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/release_preflight.py +0 -0
  557. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/serve_docs.py +0 -0
  558. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/scripts/shard_plan.py +0 -0
  559. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/setup.cfg +0 -0
  560. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/sonar-project.properties +0 -0
  561. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/style/README.md +0 -0
  562. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/style/boost.css +0 -0
  563. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/style/boost.js +0 -0
  564. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/style/demo.html +0 -0
  565. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/adapt.feature +0 -0
  566. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/browse.feature +0 -0
  567. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/count.feature +0 -0
  568. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/discover.feature +0 -0
  569. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/doctor.feature +0 -0
  570. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/environment.py +0 -0
  571. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/explain.feature +0 -0
  572. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/index.feature +0 -0
  573. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/install.feature +0 -0
  574. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/list.feature +0 -0
  575. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/search.feature +0 -0
  576. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/steps/cli_steps.py +0 -0
  577. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/steps/discovery_steps.py +0 -0
  578. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/steps/mcp_steps.py +0 -0
  579. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/bdd/features/steps/quality_steps.py +0 -0
  580. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/conftest.py +0 -0
  581. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/eval/baseline.json +0 -0
  582. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/eval/explain.jsonl +0 -0
  583. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/eval/golden-natural.jsonl +0 -0
  584. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/eval/golden.jsonl +0 -0
  585. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/eval/recommend.jsonl +0 -0
  586. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/eval/taps-scale.txt +0 -0
  587. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/eval/taps.txt +0 -0
  588. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_bmad_all_hosts.py +0 -0
  589. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_capabilities_policy.py +0 -0
  590. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_adapt.py +0 -0
  591. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_bmad.py +0 -0
  592. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_catalog.py +0 -0
  593. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_chat.py +0 -0
  594. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_discovery.py +0 -0
  595. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_hooks.py +0 -0
  596. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_hooks_gemini.py +0 -0
  597. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_info.py +0 -0
  598. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_intelligence.py +0 -0
  599. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_pane_width.py +0 -0
  600. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_pkg.py +0 -0
  601. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_quality.py +0 -0
  602. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_quickstart.py +0 -0
  603. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_tap_pins.py +0 -0
  604. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_taps.py +0 -0
  605. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_cli_team.py +0 -0
  606. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_everyday_loop.py +0 -0
  607. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_integrity_enforce.py +0 -0
  608. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_kind_conformance.py +0 -0
  609. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_property_parsers.py +0 -0
  610. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_run.py +0 -0
  611. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_tap_signing.py +0 -0
  612. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/functional/test_workspace_scope.py +0 -0
  613. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/README.md +0 -0
  614. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  615. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  616. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  617. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  618. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  619. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  620. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  621. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  622. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  623. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  624. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  625. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  626. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  627. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  628. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  629. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  630. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  631. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  632. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  633. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  634. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  635. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  636. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  637. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/fuzz_frontmatter.py +0 -0
  638. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/fuzz/fuzz_registry.py +0 -0
  639. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/langchain/conftest.py +0 -0
  640. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/langchain/test_graph.py +0 -0
  641. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/langchain/test_loader.py +0 -0
  642. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/langchain/test_retriever.py +0 -0
  643. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/make_fixture.py +0 -0
  644. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/perf/test_benchmarks.py +0 -0
  645. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/smoke.sh +0 -0
  646. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_a11y_check.py +0 -0
  647. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_action_pin_lockstep.py +0 -0
  648. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_adapters.py +0 -0
  649. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_adapters_multi.py +0 -0
  650. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_adapters_runner.py +0 -0
  651. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_agents.py +0 -0
  652. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_ai.py +0 -0
  653. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_aihost.py +0 -0
  654. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_bmad_core.py +0 -0
  655. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_boost_first_offer.py +0 -0
  656. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_bootstrap.py +0 -0
  657. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_branch_current.py +0 -0
  658. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_browse.py +0 -0
  659. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_builtin.py +0 -0
  660. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_capabilities.py +0 -0
  661. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_catalog.py +0 -0
  662. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_catalogbundle.py +0 -0
  663. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_chat.py +0 -0
  664. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_check_anchors.py +0 -0
  665. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_check_dco.py +0 -0
  666. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_check_licenses.py +0 -0
  667. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_check_reproducible.py +0 -0
  668. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_claude_settings.py +0 -0
  669. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_clean_internal_cache.py +0 -0
  670. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_cliparse.py +0 -0
  671. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_codeql_analysis_key.py +0 -0
  672. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_command_reference_fresh.py +0 -0
  673. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_community_health_files.py +0 -0
  674. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_compact.py +0 -0
  675. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_complete.py +0 -0
  676. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_complete_rc_block.py +0 -0
  677. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_config.py +0 -0
  678. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_content_dedupe.py +0 -0
  679. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_content_identity.py +0 -0
  680. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_crash_redaction.py +0 -0
  681. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dedup_trust.py +0 -0
  682. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_demo_index.py +0 -0
  683. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense.py +0 -0
  684. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_embed_dedupe.py +0 -0
  685. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_fallback.py +0 -0
  686. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_fix_hint.py +0 -0
  687. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_quantized.py +0 -0
  688. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_ready_order.py +0 -0
  689. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_shard_real_schema.py +0 -0
  690. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  691. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_shards.py +0 -0
  692. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_status.py +0 -0
  693. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dense_status_cheap.py +0 -0
  694. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_dependabot_config.py +0 -0
  695. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_docs_pages_linked.py +0 -0
  696. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_docsite_chrome.py +0 -0
  697. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_ed25519.py +0 -0
  698. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_embed.py +0 -0
  699. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_embed_local.py +0 -0
  700. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_embed_truncated_response.py +0 -0
  701. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_entry_key.py +0 -0
  702. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_errors_and_cli_table.py +0 -0
  703. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_eval_baseline.py +0 -0
  704. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_eval_corpus.py +0 -0
  705. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_eval_faithfulness.py +0 -0
  706. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_eval_gate.py +0 -0
  707. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_eval_grading.py +0 -0
  708. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_eval_metrics.py +0 -0
  709. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_eval_stats_summary.py +0 -0
  710. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  711. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_faithfulness.py +0 -0
  712. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_frontmatter.py +0 -0
  713. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_fuzz_targets.py +0 -0
  714. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  715. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_gitleaks_config.py +0 -0
  716. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_gitutil.py +0 -0
  717. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_gitutil_lfs.py +0 -0
  718. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_gitutil_sparse.py +0 -0
  719. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_hook_settings_hosts.py +0 -0
  720. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_hookhost.py +0 -0
  721. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_imperative.py +0 -0
  722. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_import_budget.py +0 -0
  723. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_injectscan.py +0 -0
  724. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_install_permission_error.py +0 -0
  725. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_installscan.py +0 -0
  726. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_integrity.py +0 -0
  727. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_journal.py +0 -0
  728. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_langchain_packaging.py +0 -0
  729. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_link_ownership.py +0 -0
  730. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_localembed.py +0 -0
  731. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_localembed_e2e.py +0 -0
  732. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_lockfile.py +0 -0
  733. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_logs.py +0 -0
  734. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_marketing_counts.py +0 -0
  735. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_mcp.py +0 -0
  736. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_mcp_install_scan.py +0 -0
  737. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_mcpdecl.py +0 -0
  738. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_mcphost.py +0 -0
  739. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_measure_registry.py +0 -0
  740. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_minisign.py +0 -0
  741. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_mutation_hardening.py +0 -0
  742. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_mutation_shards.py +0 -0
  743. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_mutation_subfile_shards.py +0 -0
  744. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_mutmut_source_paths.py +0 -0
  745. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_nethttp.py +0 -0
  746. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_normalize_sdist.py +0 -0
  747. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_output.py +0 -0
  748. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_page_budget.py +0 -0
  749. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_paths.py +0 -0
  750. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_perf_gate.py +0 -0
  751. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_pkg_confusions.py +0 -0
  752. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_pkg_injection.py +0 -0
  753. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_pkg_secrets.py +0 -0
  754. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_platform_pins.py +0 -0
  755. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_policy.py +0 -0
  756. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_post_deploy_smoke.py +0 -0
  757. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_project_mcp_sidecar.py +0 -0
  758. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_projectlock.py +0 -0
  759. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_provenance.py +0 -0
  760. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_publish_golden_dataset.py +0 -0
  761. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_rag.py +0 -0
  762. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_rag_fastpath.py +0 -0
  763. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_rag_fusion.py +0 -0
  764. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_registries_fresh.py +0 -0
  765. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_registry.py +0 -0
  766. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_registry_categories.py +0 -0
  767. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_registry_control_chars.py +0 -0
  768. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_registry_parallel.py +0 -0
  769. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_release_guard.py +0 -0
  770. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_release_preflight.py +0 -0
  771. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_required_checks.py +0 -0
  772. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_rerank_cache.py +0 -0
  773. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_resolve.py +0 -0
  774. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_roadmap_fresh.py +0 -0
  775. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_rules.py +0 -0
  776. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_scale_corpus.py +0 -0
  777. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_scopes.py +0 -0
  778. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_secretscan.py +0 -0
  779. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_selfupdate.py +0 -0
  780. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_serve.py +0 -0
  781. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_serve_docs.py +0 -0
  782. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_shard_plan.py +0 -0
  783. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_shards.py +0 -0
  784. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_shards_matrix.py +0 -0
  785. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_smoke_covers_every_command.py +0 -0
  786. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_spdx_headers.py +0 -0
  787. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_spin.py +0 -0
  788. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_stackprobe.py +0 -0
  789. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_staleness.py +0 -0
  790. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_store.py +0 -0
  791. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_store_materialize.py +0 -0
  792. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_sync_blocked_links.py +0 -0
  793. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  794. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_tap_pins.py +0 -0
  795. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_token_parity.py +0 -0
  796. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_toolchain_lock.py +0 -0
  797. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_trustaudit.py +0 -0
  798. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_typosquat.py +0 -0
  799. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_updatediff.py +0 -0
  800. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_util.py +0 -0
  801. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_version.py +0 -0
  802. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_version_tags.py +0 -0
  803. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_vex.py +0 -0
  804. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_visual_harness_flags.py +0 -0
  805. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_workflow_concurrency.py +0 -0
  806. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  807. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  808. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_workflow_timeouts.py +0 -0
  809. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_workflows.py +0 -0
  810. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  811. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/visual/a11y_check.mjs +0 -0
  812. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/visual/console_check.mjs +0 -0
  813. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/visual/package-lock.json +0 -0
  814. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/visual/package.json +0 -0
  815. {boost_skill_cli-1.2.49 → boost_skill_cli-1.2.51}/tests/visual/visual_check.mjs +0 -0
@@ -534,6 +534,18 @@ Consequences for code you write here:
534
534
  the measured trade is **3.40 GB → 3.87 GB (+14%), in 1360 s**, peaking at
535
535
  ~2× while both copies coexist. Don't describe it as size-neutral — an earlier
536
536
  draft of this section did, from prediction rather than measurement.
537
+ - **Embedding reports progress and commits as it goes.** `dense.build` takes
538
+ `on_progress(done, total)` and `_embed_and_store` commits every
539
+ `_COMMIT_EVERY` rows. Both are bug fixes, not polish: a full catalogue is
540
+ tens of thousands of distinct chunks under one fixed spinner label, which a
541
+ user reported as a hang after hours; and every row used to land in a single
542
+ transaction that committed after the last one, so an interrupt threw away the
543
+ whole build. Periodic commits are safe because `build` deletes each changed
544
+ tap's rows *before* re-inserting, so a partial store is replaced rather than
545
+ doubled. The total counts **distinct** texts, not rows — 42.9% of chunks on a
546
+ real install are repeats and are embedded once — so a progress total taken
547
+ from row count would over-report the work.
548
+
537
549
  - **Nothing on the search path may count `chunks`.** `SELECT COUNT(*)` scans the
538
550
  `chunks_tap` covering index — 8,419 pages / 34.5 MB, measured 1.94 s — and
539
551
  both `ready()` and `status()` did it on every search, the latter only to word
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.49
3
+ Version: 1.2.51
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -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.2.49'
22
- __version_tuple__ = version_tuple = (1, 2, 49)
21
+ __version__ = version = '1.2.51'
22
+ __version_tuple__ = version_tuple = (1, 2, 51)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1450,30 +1450,46 @@ def _mcp_tool(tool: str, args: dict):
1450
1450
  return REGISTRY.call(tool, args)
1451
1451
 
1452
1452
 
1453
- def _run_mcp_host(host: str, action: str, cmd) -> bool:
1454
- """Run one host's register/unregister argv. True if it actually ran.
1453
+ #: Substrings an agent CLI uses to say "this server is already registered".
1454
+ #: Registering twice is not a failure — it is the state the user asked for —
1455
+ #: and treating it as one is what made `--host auto` abort on host one and
1456
+ #: never reach host two on any machine where boost was already in Claude.
1457
+ _ALREADY = ("already exists", "already registered", "already configured")
1455
1458
 
1456
- A host whose CLI is not installed is *not* an error — most machines have
1457
- one agent CLI, not all of them — so the argv is printed for the user to run
1458
- later and the caller moves on to the next host. A CLI that is present and
1459
- fails is a real error and raises.
1459
+
1460
+ def _run_mcp_host(host: str, action: str, cmd) -> tuple[str, str]:
1461
+ """Run one host's register/unregister argv.
1462
+
1463
+ Returns ``(status, detail)`` where status is:
1464
+
1465
+ * ``"ran"`` — the CLI ran and succeeded;
1466
+ * ``"already"`` — it reported the server is already in the state asked
1467
+ for, which is success with a different wording;
1468
+ * ``"missing"`` — the CLI is not installed. Not an error: most machines
1469
+ have one agent CLI, not all of them;
1470
+ * ``"failed"`` — it is installed and something else went wrong.
1471
+
1472
+ It **returns** rather than raises so one host cannot end the sweep. That
1473
+ was the bug: a present CLI exiting non-zero raised straight out of the
1474
+ loop, so with boost already registered in Claude, `--host auto` died on
1475
+ "already exists" and never reached the second agent.
1460
1476
  """
1461
1477
  exe = mcphost.cli(host)
1462
1478
  if not shutil.which(exe):
1463
- return False
1479
+ return "missing", ""
1464
1480
  try:
1465
1481
  proc = subprocess.run(cmd, capture_output=True, text=True, timeout=60)
1466
1482
  except (OSError, subprocess.TimeoutExpired) as e:
1467
- raise BoostError("%s mcp %s failed: %s" % (exe, action, e),
1468
- hint="run it yourself: " + " ".join(cmd)) from e
1483
+ return "failed", str(e)
1469
1484
  for ln in (proc.stdout or "").strip().splitlines():
1470
1485
  out.info(ln)
1471
- if proc.returncode != 0:
1472
- tail = (proc.stderr or "").strip().splitlines()
1473
- raise BoostError("%s mcp %s failed: %s"
1474
- % (exe, action, tail[-1] if tail else "unknown error"),
1475
- hint="run it yourself: " + " ".join(cmd))
1476
- return True
1486
+ if proc.returncode == 0:
1487
+ return "ran", ""
1488
+ blob = ((proc.stderr or "") + (proc.stdout or "")).lower()
1489
+ if action == "register" and any(k in blob for k in _ALREADY):
1490
+ return "already", ""
1491
+ tail = (proc.stderr or "").strip().splitlines()
1492
+ return "failed", tail[-1] if tail else "unknown error"
1477
1493
 
1478
1494
 
1479
1495
  def _seed_catalog_for_mcp(force: bool) -> None:
@@ -1627,11 +1643,18 @@ def cmd_mcp(argv) -> int:
1627
1643
  # `all`) always reports it, so a user setting up a machine can see the argv
1628
1644
  # for an agent CLI they have not installed yet.
1629
1645
  explicit = args.host not in (None, "", "auto")
1630
- done, missing = [], []
1646
+ done, already, missing, failed = [], [], [], {}
1631
1647
  for host in targets:
1632
1648
  cmd = mcphost.argv(host, args.action, shim)
1633
- if _run_mcp_host(host, args.action, cmd):
1649
+ status, detail = _run_mcp_host(host, args.action, cmd)
1650
+ if status == "ran":
1634
1651
  done.append(host)
1652
+ elif status == "already":
1653
+ already.append(host)
1654
+ elif status == "failed":
1655
+ # Collected, not raised: the next host is a different agent on a
1656
+ # different config file and has nothing to do with this failure.
1657
+ failed[host] = detail
1635
1658
  else:
1636
1659
  missing.append(host)
1637
1660
  if explicit:
@@ -1643,7 +1666,23 @@ def cmd_mcp(argv) -> int:
1643
1666
  for host in done:
1644
1667
  out.ok("%sed boost as an MCP server for %s (scope: user)"
1645
1668
  % (verb, mcphost.label(host)))
1646
- if not done:
1669
+ for host in already:
1670
+ out.ok("already registered with %s — nothing to do"
1671
+ % mcphost.label(host))
1672
+ for host, detail in failed.items():
1673
+ out.warn("%s: %s mcp %s failed — %s"
1674
+ % (mcphost.label(host), mcphost.cli(host), args.action,
1675
+ detail))
1676
+ out.info(out.role("run it yourself: %s"
1677
+ % " ".join(mcphost.argv(host, args.action, shim)),
1678
+ "muted"))
1679
+ settled = done + already
1680
+ if not settled:
1681
+ if failed:
1682
+ # Every installed CLI failed. That is a real error — but only after
1683
+ # each one has been tried and named.
1684
+ journal.log("mcp", args.action, hosts="")
1685
+ return 1
1647
1686
  # Nothing ran. Under `auto` nothing has been printed yet, so say which
1648
1687
  # CLIs were looked for rather than exiting silently on success.
1649
1688
  if not explicit:
@@ -1654,8 +1693,10 @@ def cmd_mcp(argv) -> int:
1654
1693
  journal.log("mcp", args.action, hosts="")
1655
1694
  return 0
1656
1695
  if args.action == "register":
1657
- _offer_boost_first(done)
1658
- journal.log("mcp", args.action, hosts=",".join(done))
1696
+ _offer_boost_first(settled)
1697
+ journal.log("mcp", args.action, hosts=",".join(settled))
1698
+ # Same rule as `boost update` across taps: a partial sweep is a success
1699
+ # with a warning, because the hosts that worked really did work.
1659
1700
  return 0
1660
1701
 
1661
1702
 
@@ -388,8 +388,8 @@ def cmd_reindex(argv):
388
388
  # holds — count, stats, trending, plain search. See the import-budget
389
389
  # gate (scripts/import_budget.py).
390
390
  from ..core import embed
391
- with spin.Spinner("embedding chunks into the dense store"):
392
- dense_stats = _reindex_dense(args.force)
391
+ with spin.Spinner("embedding chunks into the dense store") as sp:
392
+ dense_stats = _reindex_dense(args.force, spinner=sp)
393
393
  if args.as_json:
394
394
  print(json.dumps({"bm25": stats, "dense": dense_stats}
395
395
  if args.dense else stats))
@@ -434,7 +434,44 @@ def cmd_reindex(argv):
434
434
  return 0
435
435
 
436
436
 
437
- def _reindex_dense(force):
437
+ def _embed_progress(spinner):
438
+ """A callback that rewrites the spinner's label with real numbers.
439
+
440
+ Embedding is the longest thing boost does — tens of thousands of distinct
441
+ chunks at roughly a second each for a full catalogue — and it ran under a
442
+ fixed label for hours. "embedding chunks into the dense store" is
443
+ indistinguishable from a hang, which is exactly how it was reported.
444
+
445
+ The rate comes from this run rather than a constant, because the two
446
+ backends differ by an order of magnitude and a local model's throughput
447
+ depends on the machine. Until a batch has finished there is nothing to
448
+ estimate from, so it says the total and nothing else rather than guessing.
449
+ """
450
+ started = time.monotonic()
451
+
452
+ def report(done: int, total: int) -> None:
453
+ if spinner is None or not total:
454
+ return
455
+ pct = 100.0 * done / total
456
+ # The bar first, because it is the part that answers the question the
457
+ # user actually has — "is this moving?" — at a glance, before any of
458
+ # the digits are read. `spin.bar` is the same determinate bar the rest
459
+ # of the CLI draws, so this looks like boost rather than like a
460
+ # second progress convention.
461
+ label = "embedding %s %d%% · %s/%s chunks" % (
462
+ spin.bar(done, total, width=16), int(pct),
463
+ format(done, ","), format(total, ","))
464
+ elapsed = time.monotonic() - started
465
+ if done and elapsed > 1:
466
+ remaining = (total - done) * (elapsed / done)
467
+ if remaining >= 1:
468
+ label += " · ~%s left" % util.human_duration(remaining)
469
+ spinner.label = label
470
+
471
+ return report
472
+
473
+
474
+ def _reindex_dense(force, spinner=None):
438
475
  """Build the dense vector store; returns stats or None when unavailable."""
439
476
  # Local import: the dense/embedding engines are opt-in (`search --dense`),
440
477
  # so they stay out of startup for every other command in this module.
@@ -447,7 +484,7 @@ def _reindex_dense(force):
447
484
  # only what changed. Doing it after would quantize, then write float32 rows
448
485
  # into a store that no longer has a float32 table.
449
486
  migrated = dense.quantize()
450
- stats = dense.build(force=force)
487
+ stats = dense.build(force=force, on_progress=_embed_progress(spinner))
451
488
  if migrated and isinstance(stats, dict):
452
489
  stats = stats | {"quantized": migrated["chunks"]}
453
490
  return stats
@@ -25,6 +25,11 @@ from .rag import Hit, chunk, entry_key, read_body
25
25
 
26
26
  INDEX_VERSION = 2
27
27
  _BATCH = 128 # texts per embedding request
28
+
29
+ #: Rows between commits while storing vectors. Small enough that an interrupted
30
+ #: build keeps almost everything it embedded, large enough that the commits are
31
+ #: not the cost — on a 750k-chunk store this is ~150 commits.
32
+ _COMMIT_EVERY = 5000
28
33
  _POOL = 8 # chunk over-fetch factor for KNN before per-entry reduce
29
34
 
30
35
 
@@ -462,12 +467,20 @@ def ready() -> bool:
462
467
  con.close()
463
468
 
464
469
 
465
- def build(entries: list[dict] | None = None,
466
- force: bool = False) -> dict | None:
470
+ def build(entries: list[dict] | None = None, force: bool = False,
471
+ on_progress=None) -> dict | None:
467
472
  """(Re)embed and store chunk vectors, reusing unchanged taps.
468
473
 
469
474
  Returns stats, or ``None`` if the backend or an embeddings provider is
470
475
  unavailable (nothing is written in that case).
476
+
477
+ ``on_progress(done, total)`` is called before the first batch and after
478
+ each one. It exists because this is the longest-running thing boost does —
479
+ a full catalogue is tens of thousands of distinct chunks at roughly a
480
+ second each — and it used to run under a bare spinner that said "embedding
481
+ chunks into the dense store" for hours without a number. A user cannot
482
+ tell that apart from a hang, and the honest fix is to say how many there
483
+ are and how far in we got.
471
484
  """
472
485
  from .rag import _tap_commits, _tap_paths
473
486
  if not have_backend() or not embed.available():
@@ -517,7 +530,8 @@ def build(entries: list[dict] | None = None,
517
530
  removed_taps = sorted(_indexed_taps(con) - {e["tap"] for e in entries})
518
531
  _delete_taps(con, changed_taps + removed_taps)
519
532
 
520
- added, failed_taps = _embed_and_store(con, fresh, tap_paths)
533
+ added, failed_taps = _embed_and_store(con, fresh, tap_paths,
534
+ on_progress=on_progress)
521
535
  # Only record a commit for a tap whose chunks actually landed. Recording
522
536
  # one for a tap that stored nothing makes every later non-forced run
523
537
  # treat it as already built and skip it — one transient rate limit would
@@ -743,8 +757,8 @@ def _delete_taps(con: sqlite3.Connection, taps: list[str]) -> None:
743
757
 
744
758
 
745
759
  def _embed_and_store(con: sqlite3.Connection, entries: list[dict],
746
- tap_paths: dict[str, Path] | None
747
- ) -> tuple[int, set]:
760
+ tap_paths: dict[str, Path] | None,
761
+ on_progress=None) -> tuple[int, set]:
748
762
  """Embed every chunk of ``entries``; returns ``(added, failed_taps)``.
749
763
 
750
764
  A batch the provider rejects (rate limit, quota, oversized input) yields no
@@ -778,15 +792,31 @@ def _embed_and_store(con: sqlite3.Connection, entries: list[dict],
778
792
  order.append(text)
779
793
 
780
794
  vec_of: dict[str, object] = {}
795
+ if on_progress is not None:
796
+ # Reported before the first request, so the size of the job is known
797
+ # up front rather than inferred from how long it has already taken.
798
+ on_progress(0, len(order))
781
799
  for start in range(0, len(order), _BATCH):
782
800
  batch = order[start:start + _BATCH]
783
801
  vecs = embed.embed(batch, input_type="document")
784
- if not vecs or len(vecs) != len(batch):
785
- continue # taps are attributed per row below, not per batch
786
- vec_of.update(zip(batch, vecs, strict=True))
802
+ if vecs and len(vecs) == len(batch):
803
+ vec_of.update(zip(batch, vecs, strict=True))
804
+ # else: taps are attributed per row below, not per batch — but the
805
+ # progress count still advances, or a run with a few rejected batches
806
+ # would appear to stall.
807
+ if on_progress is not None:
808
+ on_progress(min(start + _BATCH, len(order)), len(order))
787
809
 
788
810
  added = 0
789
811
  failed_taps: set = set()
812
+ # Durability, not speed. Every row used to land in one transaction that
813
+ # committed only after the last one, so interrupting a three-hour build —
814
+ # or losing the machine to a sleep or an OOM — threw away every vector it
815
+ # had paid for. Committing as the rows accumulate keeps the work, and
816
+ # re-running is still correct because `_delete_taps` has already removed
817
+ # each changed tap's old rows, so a partial store is replaced rather than
818
+ # doubled.
819
+ since_commit = 0
790
820
  for e, ci, text in rows:
791
821
  vec = vec_of.get(text)
792
822
  if vec is None:
@@ -801,6 +831,11 @@ def _embed_and_store(con: sqlite3.Connection, entries: list[dict],
801
831
  e.get("kind", "skill"), ci, text[:200].strip()))
802
832
  _store_vector(con, cur.lastrowid, mod.serialize_float32(vec))
803
833
  added += 1
834
+ since_commit += 1
835
+ if since_commit >= _COMMIT_EVERY:
836
+ con.commit()
837
+ since_commit = 0
838
+ con.commit()
804
839
  return added, failed_taps
805
840
 
806
841
 
@@ -168,6 +168,23 @@ def rel_time(iso: str) -> str:
168
168
  return then.strftime("%Y-%m-%d")
169
169
 
170
170
 
171
+ def human_duration(seconds: float) -> str:
172
+ """A short, honest duration: ``'45s'``, ``'12m'``, ``'2h 5m'``.
173
+
174
+ Coarse on purpose. This labels an estimate that is extrapolated from a
175
+ partial run, so seconds of precision on a two-hour figure would claim an
176
+ accuracy the number does not have.
177
+ """
178
+ seconds = max(0, int(seconds))
179
+ if seconds < 60:
180
+ return "%ds" % seconds
181
+ minutes = seconds // 60
182
+ if minutes < 60:
183
+ return "%dm" % minutes
184
+ hours, minutes = divmod(minutes, 60)
185
+ return "%dh %dm" % (hours, minutes) if minutes else "%dh" % hours
186
+
187
+
171
188
  def human_size(n: int) -> str:
172
189
  """Format a byte count for humans: ``1536`` -> ``'1.5KB'``.
173
190
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.49
3
+ Version: 1.2.51
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -682,6 +682,7 @@ tests/unit/test_dense.py
682
682
  tests/unit/test_dense_embed_dedupe.py
683
683
  tests/unit/test_dense_fallback.py
684
684
  tests/unit/test_dense_fix_hint.py
685
+ tests/unit/test_dense_progress.py
685
686
  tests/unit/test_dense_quantized.py
686
687
  tests/unit/test_dense_ready_order.py
687
688
  tests/unit/test_dense_shard_real_schema.py
@@ -53,7 +53,8 @@ Feature: boost mcp
53
53
  Given the "claude" CLI is on PATH but fails with "no auth"
54
54
  When I run "boost mcp register"
55
55
  Then the exit code should be 1
56
- And the output should contain "claude mcp register failed: no auth"
56
+ And the output should contain "claude mcp register failed — no auth"
57
+ And the output should contain "run it yourself"
57
58
 
58
59
  Scenario: unregistering with no agent CLI prints both manual commands
59
60
  Given no agent CLI is on PATH
@@ -1470,6 +1470,73 @@ class TestMcp:
1470
1470
  assert "could not reach any default registry" in r.out + r.err
1471
1471
  assert "registered boost as an MCP server" in r.out
1472
1472
 
1473
+ def _clis_with_results(self, monkeypatch, results):
1474
+ """CLIs on PATH, each answering with (returncode, stderr).
1475
+
1476
+ Returns the list of CLI names actually invoked, which is the whole
1477
+ question these tests ask: did the sweep reach the second host?
1478
+ """
1479
+ monkeypatch.setattr(
1480
+ "boost_cli.commands.configuration.shutil.which",
1481
+ lambda c: "/usr/local/bin/" + c if c in results else None)
1482
+ seen = []
1483
+
1484
+ class _P:
1485
+ def __init__(self, rc, err):
1486
+ self.returncode, self.stderr, self.stdout = rc, err, ""
1487
+
1488
+ def fake_run(cmd, **kw):
1489
+ seen.append(cmd[0])
1490
+ return _P(*results[cmd[0]])
1491
+
1492
+ monkeypatch.setattr("boost_cli.commands.configuration.subprocess.run",
1493
+ fake_run)
1494
+ return seen
1495
+
1496
+ def test_one_host_already_registered_does_not_end_the_sweep(
1497
+ self, boost, sandbox, monkeypatch):
1498
+ # The reported bug: with boost already in Claude, `--host auto` raised
1499
+ # on "already exists" and never reached the second agent. Registering
1500
+ # twice is the state the user asked for, not a failure.
1501
+ seen = self._clis_with_results(monkeypatch, {
1502
+ "claude": (1, "MCP server boost already exists in local config"),
1503
+ "gemini": (0, ""),
1504
+ })
1505
+ r = boost("mcp", "register", "--no-seed")
1506
+ assert seen == ["claude", "gemini"], seen
1507
+ assert "already registered with Claude Code" in r.out
1508
+ assert "registered boost as an MCP server for Gemini CLI" in r.out
1509
+
1510
+ def test_a_real_failure_on_one_host_still_reaches_the_next(
1511
+ self, boost, sandbox, monkeypatch):
1512
+ seen = self._clis_with_results(monkeypatch, {
1513
+ "claude": (1, "connection refused"),
1514
+ "gemini": (0, ""),
1515
+ })
1516
+ r = boost("mcp", "register", "--no-seed")
1517
+ assert seen == ["claude", "gemini"], seen
1518
+ both = r.out + r.err
1519
+ # Named, with the argv to run by hand — and the host that worked still
1520
+ # reported as working.
1521
+ assert "connection refused" in both
1522
+ assert "run it yourself" in both
1523
+ assert "Gemini CLI" in both
1524
+
1525
+ def test_every_installed_host_failing_is_an_error(
1526
+ self, boost, sandbox, monkeypatch):
1527
+ # A partial sweep is a success with a warning; nothing working at all
1528
+ # is not.
1529
+ self._clis_with_results(monkeypatch, {"claude": (1, "boom")})
1530
+ boost("mcp", "register", "--no-seed", expect=1)
1531
+
1532
+ def test_already_is_not_swallowed_for_unregister(
1533
+ self, boost, sandbox, monkeypatch):
1534
+ # "already exists" only means success when registering. On the way out
1535
+ # it would be nonsense, so it stays a failure.
1536
+ self._clis_with_results(monkeypatch,
1537
+ {"claude": (1, "already exists")})
1538
+ boost("mcp", "unregister", expect=1)
1539
+
1473
1540
  def test_an_unknown_host_fails_before_touching_the_network(
1474
1541
  self, boost, sandbox, monkeypatch):
1475
1542
  # Seeding used to run first, so a typo'd --host spent 14-45s and half
@@ -1647,11 +1714,15 @@ class TestMcp:
1647
1714
  lambda c: "/usr/local/bin/" + c)
1648
1715
  monkeypatch.setattr("boost_cli.commands.configuration.subprocess.run",
1649
1716
  lambda cmd, **kw: _proc(cmd, 1, err="no auth"))
1717
+ # Every installed host failing is the one case that is still an error;
1718
+ # the failure is now reported per host on stdout, with the argv, rather
1719
+ # than raised out of the loop and killing the sweep.
1650
1720
  r = boost("mcp", "register", expect=1)
1651
- assert "claude mcp register failed: no auth" in r.err
1721
+ assert "claude mcp register failed — no auth" in r.out
1722
+ assert "run it yourself" in r.out
1652
1723
  # the failing host names itself — not a generic "an agent CLI failed"
1653
1724
  r = boost("mcp", "register", "--host", "gemini", expect=1)
1654
- assert "gemini mcp register failed: no auth" in r.err
1725
+ assert "gemini mcp register failed — no auth" in r.out
1655
1726
 
1656
1727
 
1657
1728
  # ---------------------------------------------------------------- self-update