boost-skill-cli 1.2.45__tar.gz → 1.2.47__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 (809) hide show
  1. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/CLAUDE.md +16 -0
  2. {boost_skill_cli-1.2.45/boost_skill_cli.egg-info → boost_skill_cli-1.2.47}/PKG-INFO +6 -1
  3. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/README.md +5 -0
  4. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/_version.py +2 -2
  5. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/quickstart.py +27 -15
  6. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/taps.py +41 -26
  7. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/registry.py +146 -0
  8. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47/boost_skill_cli.egg-info}/PKG-INFO +6 -1
  9. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  10. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/adapters.html +1 -1
  11. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel.html +1 -1
  12. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/chat.html +1 -1
  13. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/commands.html +5 -4
  14. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/demo.html +1 -1
  15. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/design-roadmap.html +1 -1
  16. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/eval.html +1 -1
  17. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/index.html +6 -6
  18. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/langchain.html +1 -1
  19. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/mcp-hub.html +1 -1
  20. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap.html +1 -1
  21. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_command_reference.py +1 -1
  22. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_quickstart.py +70 -0
  23. boost_skill_cli-1.2.47/tests/unit/test_registry_parallel.py +230 -0
  24. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.gitattributes +0 -0
  25. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.gitignore +0 -0
  26. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.gitleaks.toml +0 -0
  27. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.htmlvalidate.json +0 -0
  28. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.lighthouserc.json +0 -0
  29. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.lycheeignore +0 -0
  30. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.markdownlint-cli2.jsonc +0 -0
  31. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.pre-commit-config.yaml +0 -0
  32. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.stylelintrc.json +0 -0
  33. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.vale/styles/boost/AIWriting.yml +0 -0
  34. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.vale/styles/boost/Terminology.yml +0 -0
  35. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  36. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/.vale.ini +0 -0
  37. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/CODE_OF_CONDUCT.md +0 -0
  38. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/CONTRIBUTING.md +0 -0
  39. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/DCO +0 -0
  40. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/GOVERNANCE.md +0 -0
  41. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/LICENSE +0 -0
  42. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/MAINTAINERS.md +0 -0
  43. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/MANIFEST.in +0 -0
  44. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/Makefile +0 -0
  45. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/SECURITY.md +0 -0
  46. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/SUPPORT.md +0 -0
  47. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost +0 -0
  48. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/__init__.py +0 -0
  49. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/__main__.py +0 -0
  50. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/cli.py +0 -0
  51. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/cliparse.py +0 -0
  52. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/__init__.py +0 -0
  53. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/_common.py +0 -0
  54. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/bmad.py +0 -0
  55. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/configuration.py +0 -0
  56. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/discovery.py +0 -0
  57. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/hooks.py +0 -0
  58. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/info.py +0 -0
  59. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/intelligence.py +0 -0
  60. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/pkg.py +0 -0
  61. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/quality.py +0 -0
  62. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/run.py +0 -0
  63. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/safety.py +0 -0
  64. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/commands/team.py +0 -0
  65. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/__init__.py +0 -0
  66. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/adapters.py +0 -0
  67. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/agents.py +0 -0
  68. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/ai.py +0 -0
  69. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/aihost.py +0 -0
  70. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/bmad.py +0 -0
  71. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/bootstrap.py +0 -0
  72. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/browse.py +0 -0
  73. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/builtin.py +0 -0
  74. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/capabilities.py +0 -0
  75. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/catalog.py +0 -0
  76. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/catalogbundle.py +0 -0
  77. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/chat.py +0 -0
  78. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/claude_settings.py +0 -0
  79. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/complete.py +0 -0
  80. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/config.py +0 -0
  81. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/dense.py +0 -0
  82. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/ed25519.py +0 -0
  83. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/embed.py +0 -0
  84. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/faithfulness.py +0 -0
  85. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/frontmatter.py +0 -0
  86. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/gitutil.py +0 -0
  87. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/hookhost.py +0 -0
  88. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/imperative.py +0 -0
  89. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/injectscan.py +0 -0
  90. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/installscan.py +0 -0
  91. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/integrity.py +0 -0
  92. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/journal.py +0 -0
  93. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/localembed.py +0 -0
  94. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/lockfile.py +0 -0
  95. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/logs.py +0 -0
  96. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/mcp.py +0 -0
  97. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/mcpdecl.py +0 -0
  98. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/mcphost.py +0 -0
  99. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/minisign.py +0 -0
  100. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/nethttp.py +0 -0
  101. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/output.py +0 -0
  102. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/paths.py +0 -0
  103. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/policy.py +0 -0
  104. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/projectlock.py +0 -0
  105. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/provenance.py +0 -0
  106. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/rag.py +0 -0
  107. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/resolve.py +0 -0
  108. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/rules.py +0 -0
  109. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/scopes.py +0 -0
  110. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/secretscan.py +0 -0
  111. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/selfupdate.py +0 -0
  112. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/serve.py +0 -0
  113. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/shards.py +0 -0
  114. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/stackprobe.py +0 -0
  115. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/staleness.py +0 -0
  116. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/store.py +0 -0
  117. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/trustaudit.py +0 -0
  118. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/typosquat.py +0 -0
  119. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/updatediff.py +0 -0
  120. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/util.py +0 -0
  121. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/core/workflows.py +0 -0
  122. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/data/registries.json +0 -0
  123. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/data/rules/boost-first.mdc +0 -0
  124. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/errors.py +0 -0
  125. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_cli/spin.py +0 -0
  126. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/__init__.py +0 -0
  127. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/_compat.py +0 -0
  128. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/graph.py +0 -0
  129. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/loader.py +0 -0
  130. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/py.typed +0 -0
  131. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_langchain/retriever.py +0 -0
  132. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  133. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  134. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/requires.txt +0 -0
  135. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/boost_skill_cli.egg-info/top_level.txt +0 -0
  136. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/codecov.yml +0 -0
  137. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/.claude/settings.local.json +0 -0
  138. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/DEBUGGING.md +0 -0
  139. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/README.md +0 -0
  140. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/c4-components-core.md +0 -0
  141. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/c4-containers.md +0 -0
  142. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/c4-context.md +0 -0
  143. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/architecture/c4-dynamic-install.md +0 -0
  144. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/bmad.md +0 -0
  145. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/distill.gif +0 -0
  146. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/doctor.gif +0 -0
  147. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/explain.gif +0 -0
  148. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/hooks.gif +0 -0
  149. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/install.gif +0 -0
  150. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/pulse.gif +0 -0
  151. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/search.gif +0 -0
  152. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/gifs/tap.gif +0 -0
  153. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/distill.tape +0 -0
  154. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/doctor.tape +0 -0
  155. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/explain.tape +0 -0
  156. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/hooks.tape +0 -0
  157. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/install.tape +0 -0
  158. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/pulse.tape +0 -0
  159. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/search.tape +0 -0
  160. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/carousel/tapes/tap.tape +0 -0
  161. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/code-review.md +0 -0
  162. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/commit-audit.md +0 -0
  163. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/demo-index.json +0 -0
  164. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/demo.gif +0 -0
  165. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/demo.tape +0 -0
  166. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/dependencies.md +0 -0
  167. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/eval-latest.json +0 -0
  168. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/openssf-badge.md +0 -0
  169. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/openssf-playbook.md +0 -0
  170. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/rag-architecture.md +0 -0
  171. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D01.md +0 -0
  172. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D02.md +0 -0
  173. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D03.md +0 -0
  174. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D04.md +0 -0
  175. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D05.md +0 -0
  176. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D06.md +0 -0
  177. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D07.md +0 -0
  178. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D08.md +0 -0
  179. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D09.md +0 -0
  180. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D10.md +0 -0
  181. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D11.md +0 -0
  182. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D12.md +0 -0
  183. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D13.md +0 -0
  184. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D14.md +0 -0
  185. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D15.md +0 -0
  186. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D16.md +0 -0
  187. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D17.md +0 -0
  188. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D18.md +0 -0
  189. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D19.md +0 -0
  190. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D20.md +0 -0
  191. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D21.md +0 -0
  192. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D22.md +0 -0
  193. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D23.md +0 -0
  194. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D24.md +0 -0
  195. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D25.md +0 -0
  196. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D26.md +0 -0
  197. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/BOOST-D27.md +0 -0
  198. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  199. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  200. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  201. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  202. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  203. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  204. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  205. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  206. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  207. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  208. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  209. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  210. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  211. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  212. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  213. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  214. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/boost-first-rule.md +0 -0
  215. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  216. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  217. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/branch-current-gate.md +0 -0
  218. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  219. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  220. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  221. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  222. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  223. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  224. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  225. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  226. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  227. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  228. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  229. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  230. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  231. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  232. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/cli-command-audit.md +0 -0
  233. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  234. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  235. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  236. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  237. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/command-carousel-page.md +0 -0
  238. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  239. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  240. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  241. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  242. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  243. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  244. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  245. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  246. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  247. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  248. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  249. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  250. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  251. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  252. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  253. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  254. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  255. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  256. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  257. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  258. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  259. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  260. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  261. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  262. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  263. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  264. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  265. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  266. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  267. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  268. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  269. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  270. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  271. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  272. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  273. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  274. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  275. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  276. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  277. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  278. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  279. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  280. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  281. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  282. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  283. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  284. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  285. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  286. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  287. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  288. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/github-community-health-files.md +0 -0
  289. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  290. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  291. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  292. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  293. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  294. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  295. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  296. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  297. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  298. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  299. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  300. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  301. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  302. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  303. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  304. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  305. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  306. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  307. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  308. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  309. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  310. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  311. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  312. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  313. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  314. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  315. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  316. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  317. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  318. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  319. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  320. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  321. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  322. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  323. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  324. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  325. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  326. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  327. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  328. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  329. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  330. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  331. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  332. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  333. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  334. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  335. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  336. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  337. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  338. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  339. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  340. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  341. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  342. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  343. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  344. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  345. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  346. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  347. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  348. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  349. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  350. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  351. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  352. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  353. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  354. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  355. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  356. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  357. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  358. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  359. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  360. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  361. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  362. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  363. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  364. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  365. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/openssf-playbook.md +0 -0
  366. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/openssf-silver.md +0 -0
  367. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  368. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  369. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  370. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  371. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  372. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  373. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  374. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  375. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  376. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  377. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  378. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  379. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  380. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  381. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  382. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  383. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  384. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  385. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  386. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  387. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  388. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  389. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  390. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  391. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  392. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  393. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  394. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  395. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  396. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  397. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  398. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  399. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/relicence-apache-2.md +0 -0
  400. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  401. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  402. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  403. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  404. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  405. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  406. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  407. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  408. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  409. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  410. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  411. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  412. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  413. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  414. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  415. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  416. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  417. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  418. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  419. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  420. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  421. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  422. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  423. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  424. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  425. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  426. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  427. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  428. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  429. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  430. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  431. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  432. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  433. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  434. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  435. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  436. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  437. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  438. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  439. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  440. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  441. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  442. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  443. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  444. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  445. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  446. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  447. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  448. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  449. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  450. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  451. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  452. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  453. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  454. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  455. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  456. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  457. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  458. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  459. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  460. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  461. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  462. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  463. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  464. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  465. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  466. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  467. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  468. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  469. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  470. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  471. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  472. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  473. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  474. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  475. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  476. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  477. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  478. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  479. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/workspace-scope-install.md +0 -0
  480. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/zip-strict-audit.md +0 -0
  481. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  482. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  483. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/security-design.md +0 -0
  484. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/semantic-search.md +0 -0
  485. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  486. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/verifying-releases.md +0 -0
  487. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/meta.md +0 -0
  488. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/openvex.json +0 -0
  489. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  490. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  491. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  492. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  493. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/eslint.config.mjs +0 -0
  494. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/README.md +0 -0
  495. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/__init__.py +0 -0
  496. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/baseline.json +0 -0
  497. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/faithfulness.py +0 -0
  498. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/golden_set.json +0 -0
  499. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/make_corpus.py +0 -0
  500. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/make_golden.py +0 -0
  501. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/metrics.py +0 -0
  502. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/publish_golden_dataset.py +0 -0
  503. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/evals/run_evals.py +0 -0
  504. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/examples/README.md +0 -0
  505. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/examples/adapt-demo.sh +0 -0
  506. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/examples/boost-run-prototype.sh +0 -0
  507. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/index.html +0 -0
  508. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/noxfile.py +0 -0
  509. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/pyproject.toml +0 -0
  510. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/coverage-tools.in +0 -0
  511. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/coverage-tools.txt +0 -0
  512. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/lint-tools.in +0 -0
  513. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/lint-tools.txt +0 -0
  514. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/mutation-tools.in +0 -0
  515. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/mutation-tools.txt +0 -0
  516. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/platform-pins.lock +0 -0
  517. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/release-tools.in +0 -0
  518. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/release-tools.txt +0 -0
  519. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/test-tools.in +0 -0
  520. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/requirements/test-tools.txt +0 -0
  521. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/a11y_check.py +0 -0
  522. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/add_spdx_headers.py +0 -0
  523. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/bench_cli.sh +0 -0
  524. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_demo_index.py +0 -0
  525. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_registries.py +0 -0
  526. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_roadmap.py +0 -0
  527. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_scale_corpus.py +0 -0
  528. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/build_vex.py +0 -0
  529. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_anchors.py +0 -0
  530. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_branch_current.py +0 -0
  531. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_dco.py +0 -0
  532. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_licenses.py +0 -0
  533. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_reproducible.py +0 -0
  534. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/check_required_checks.py +0 -0
  535. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/ensure_eval_corpus.sh +0 -0
  536. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_corpus.py +0 -0
  537. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_explain.py +0 -0
  538. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_gate.py +0 -0
  539. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_recommend.py +0 -0
  540. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_retrieval.py +0 -0
  541. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/eval_stats_summary.py +0 -0
  542. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/import_budget.py +0 -0
  543. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/lock_toolchain.py +0 -0
  544. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/measure_registry.py +0 -0
  545. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/mutation_gate.py +0 -0
  546. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/mutation_shards.py +0 -0
  547. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/mutation_weights.json +0 -0
  548. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/normalize_sdist.py +0 -0
  549. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/page_budget.py +0 -0
  550. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/perf_gate.py +0 -0
  551. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/post_deploy_smoke.py +0 -0
  552. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/publish_eval_json.py +0 -0
  553. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/publish_shards.py +0 -0
  554. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/release_guard.py +0 -0
  555. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/release_preflight.py +0 -0
  556. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/scripts/serve_docs.py +0 -0
  557. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/setup.cfg +0 -0
  558. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/sonar-project.properties +0 -0
  559. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/style/README.md +0 -0
  560. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/style/boost.css +0 -0
  561. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/style/boost.js +0 -0
  562. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/style/demo.html +0 -0
  563. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/adapt.feature +0 -0
  564. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/browse.feature +0 -0
  565. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/count.feature +0 -0
  566. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/discover.feature +0 -0
  567. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/doctor.feature +0 -0
  568. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/environment.py +0 -0
  569. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/explain.feature +0 -0
  570. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/index.feature +0 -0
  571. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/install.feature +0 -0
  572. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/list.feature +0 -0
  573. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/mcp.feature +0 -0
  574. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/search.feature +0 -0
  575. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/steps/cli_steps.py +0 -0
  576. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/steps/discovery_steps.py +0 -0
  577. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/steps/mcp_steps.py +0 -0
  578. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/bdd/features/steps/quality_steps.py +0 -0
  579. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/conftest.py +0 -0
  580. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/baseline.json +0 -0
  581. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/explain.jsonl +0 -0
  582. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/golden-natural.jsonl +0 -0
  583. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/golden.jsonl +0 -0
  584. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/recommend.jsonl +0 -0
  585. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/taps-scale.txt +0 -0
  586. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/eval/taps.txt +0 -0
  587. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_bmad_all_hosts.py +0 -0
  588. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_capabilities_policy.py +0 -0
  589. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_adapt.py +0 -0
  590. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_bmad.py +0 -0
  591. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_catalog.py +0 -0
  592. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_chat.py +0 -0
  593. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_configuration.py +0 -0
  594. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_discovery.py +0 -0
  595. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_hooks.py +0 -0
  596. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_hooks_gemini.py +0 -0
  597. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_info.py +0 -0
  598. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_intelligence.py +0 -0
  599. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_pane_width.py +0 -0
  600. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_pkg.py +0 -0
  601. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_quality.py +0 -0
  602. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_taps.py +0 -0
  603. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_cli_team.py +0 -0
  604. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_everyday_loop.py +0 -0
  605. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_integrity_enforce.py +0 -0
  606. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_kind_conformance.py +0 -0
  607. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_property_parsers.py +0 -0
  608. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_run.py +0 -0
  609. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_tap_signing.py +0 -0
  610. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/functional/test_workspace_scope.py +0 -0
  611. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/README.md +0 -0
  612. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  613. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  614. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  615. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  616. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  617. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  618. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  619. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  620. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  621. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  622. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  623. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  624. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  625. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  626. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  627. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  628. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  629. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  630. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  631. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  632. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  633. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  634. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  635. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/fuzz_frontmatter.py +0 -0
  636. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/fuzz/fuzz_registry.py +0 -0
  637. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/langchain/conftest.py +0 -0
  638. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/langchain/test_graph.py +0 -0
  639. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/langchain/test_loader.py +0 -0
  640. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/langchain/test_retriever.py +0 -0
  641. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/make_fixture.py +0 -0
  642. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/perf/test_benchmarks.py +0 -0
  643. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/smoke.sh +0 -0
  644. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_a11y_check.py +0 -0
  645. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_action_pin_lockstep.py +0 -0
  646. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_adapters.py +0 -0
  647. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_adapters_multi.py +0 -0
  648. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_adapters_runner.py +0 -0
  649. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_agents.py +0 -0
  650. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_ai.py +0 -0
  651. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_aihost.py +0 -0
  652. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_bmad_core.py +0 -0
  653. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_boost_first_offer.py +0 -0
  654. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_bootstrap.py +0 -0
  655. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_branch_current.py +0 -0
  656. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_browse.py +0 -0
  657. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_builtin.py +0 -0
  658. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_capabilities.py +0 -0
  659. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_catalog.py +0 -0
  660. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_catalogbundle.py +0 -0
  661. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_chat.py +0 -0
  662. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_check_anchors.py +0 -0
  663. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_check_dco.py +0 -0
  664. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_check_licenses.py +0 -0
  665. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_check_reproducible.py +0 -0
  666. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_claude_settings.py +0 -0
  667. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_clean_internal_cache.py +0 -0
  668. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_cliparse.py +0 -0
  669. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_codeql_analysis_key.py +0 -0
  670. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_command_reference_fresh.py +0 -0
  671. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_community_health_files.py +0 -0
  672. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_compact.py +0 -0
  673. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_complete.py +0 -0
  674. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_complete_rc_block.py +0 -0
  675. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_config.py +0 -0
  676. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_content_dedupe.py +0 -0
  677. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_content_identity.py +0 -0
  678. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_crash_redaction.py +0 -0
  679. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dedup_trust.py +0 -0
  680. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_demo_index.py +0 -0
  681. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense.py +0 -0
  682. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_embed_dedupe.py +0 -0
  683. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_fallback.py +0 -0
  684. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_fix_hint.py +0 -0
  685. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_quantized.py +0 -0
  686. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_ready_order.py +0 -0
  687. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_shard_real_schema.py +0 -0
  688. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  689. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_shards.py +0 -0
  690. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_status.py +0 -0
  691. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dense_status_cheap.py +0 -0
  692. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_dependabot_config.py +0 -0
  693. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_docs_pages_linked.py +0 -0
  694. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_docsite_chrome.py +0 -0
  695. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_ed25519.py +0 -0
  696. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_embed.py +0 -0
  697. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_embed_local.py +0 -0
  698. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_embed_truncated_response.py +0 -0
  699. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_entry_key.py +0 -0
  700. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_errors_and_cli_table.py +0 -0
  701. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_baseline.py +0 -0
  702. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_corpus.py +0 -0
  703. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_faithfulness.py +0 -0
  704. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_gate.py +0 -0
  705. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_grading.py +0 -0
  706. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_metrics.py +0 -0
  707. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_eval_stats_summary.py +0 -0
  708. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  709. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_faithfulness.py +0 -0
  710. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_frontmatter.py +0 -0
  711. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_fuzz_targets.py +0 -0
  712. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  713. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gitleaks_config.py +0 -0
  714. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gitutil.py +0 -0
  715. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gitutil_lfs.py +0 -0
  716. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_gitutil_sparse.py +0 -0
  717. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_hook_settings_hosts.py +0 -0
  718. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_hookhost.py +0 -0
  719. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_imperative.py +0 -0
  720. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_import_budget.py +0 -0
  721. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_injectscan.py +0 -0
  722. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_install_permission_error.py +0 -0
  723. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_installscan.py +0 -0
  724. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_integrity.py +0 -0
  725. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_journal.py +0 -0
  726. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_langchain_packaging.py +0 -0
  727. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_link_ownership.py +0 -0
  728. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_localembed.py +0 -0
  729. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_localembed_e2e.py +0 -0
  730. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_lockfile.py +0 -0
  731. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_logs.py +0 -0
  732. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_marketing_counts.py +0 -0
  733. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mcp.py +0 -0
  734. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mcp_install_scan.py +0 -0
  735. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mcpdecl.py +0 -0
  736. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mcphost.py +0 -0
  737. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_measure_registry.py +0 -0
  738. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_minisign.py +0 -0
  739. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mutation_hardening.py +0 -0
  740. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mutation_shards.py +0 -0
  741. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mutation_subfile_shards.py +0 -0
  742. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_mutmut_source_paths.py +0 -0
  743. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_nethttp.py +0 -0
  744. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_normalize_sdist.py +0 -0
  745. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_output.py +0 -0
  746. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_page_budget.py +0 -0
  747. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_paths.py +0 -0
  748. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_perf_gate.py +0 -0
  749. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_pkg_confusions.py +0 -0
  750. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_pkg_injection.py +0 -0
  751. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_pkg_secrets.py +0 -0
  752. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_platform_pins.py +0 -0
  753. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_policy.py +0 -0
  754. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_post_deploy_smoke.py +0 -0
  755. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_project_mcp_sidecar.py +0 -0
  756. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_projectlock.py +0 -0
  757. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_provenance.py +0 -0
  758. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_publish_golden_dataset.py +0 -0
  759. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rag.py +0 -0
  760. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rag_fastpath.py +0 -0
  761. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rag_fusion.py +0 -0
  762. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_registries_fresh.py +0 -0
  763. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_registry.py +0 -0
  764. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_registry_categories.py +0 -0
  765. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_registry_control_chars.py +0 -0
  766. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_release_guard.py +0 -0
  767. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_release_preflight.py +0 -0
  768. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_required_checks.py +0 -0
  769. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rerank_cache.py +0 -0
  770. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_resolve.py +0 -0
  771. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_roadmap_fresh.py +0 -0
  772. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_rules.py +0 -0
  773. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_scale_corpus.py +0 -0
  774. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_scopes.py +0 -0
  775. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_secretscan.py +0 -0
  776. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_selfupdate.py +0 -0
  777. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_serve.py +0 -0
  778. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_serve_docs.py +0 -0
  779. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_shards.py +0 -0
  780. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_shards_matrix.py +0 -0
  781. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_smoke_covers_every_command.py +0 -0
  782. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_spdx_headers.py +0 -0
  783. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_spin.py +0 -0
  784. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_stackprobe.py +0 -0
  785. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_staleness.py +0 -0
  786. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_store.py +0 -0
  787. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_store_materialize.py +0 -0
  788. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_sync_blocked_links.py +0 -0
  789. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  790. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_token_parity.py +0 -0
  791. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_toolchain_lock.py +0 -0
  792. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_trustaudit.py +0 -0
  793. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_typosquat.py +0 -0
  794. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_updatediff.py +0 -0
  795. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_util.py +0 -0
  796. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_version.py +0 -0
  797. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_vex.py +0 -0
  798. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_visual_harness_flags.py +0 -0
  799. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflow_concurrency.py +0 -0
  800. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  801. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  802. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflow_timeouts.py +0 -0
  803. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_workflows.py +0 -0
  804. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  805. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/a11y_check.mjs +0 -0
  806. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/console_check.mjs +0 -0
  807. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/package-lock.json +0 -0
  808. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/package.json +0 -0
  809. {boost_skill_cli-1.2.45 → boost_skill_cli-1.2.47}/tests/visual/visual_check.mjs +0 -0
@@ -158,6 +158,22 @@ line coverage. Target `boost_cli/core` behavior with assertions, not just import
158
158
  93 MB), and must `update-index --refresh` first, because git silently declines
159
159
  to remove a path whose stat data looks dirty and otherwise reports success
160
160
  having changed nothing.
161
+ - **Tapping many registries goes through `registry.add_many`, and the reason is
162
+ the config file.** `add` ends in `config.load()` -> append -> `config.save()`,
163
+ which is read-modify-write on one JSON file: run it from N threads and taps
164
+ vanish at random. `add_many` clones in a `ThreadPoolExecutor` and writes the
165
+ config **once**, on one thread, after every clone has finished
166
+ (`tests/unit/test_registry_parallel.py` asserts the single write and the
167
+ concurrency separately). It is worth it because a clone is *latency*, not
168
+ bandwidth or CPU: ~1.6 s whether one runs or twelve, so `boost tap --catalog`
169
+ was 463 x 1.6 s = 13 minutes of waiting and is now **2 min 10 s** for the same
170
+ 463 registries. Scanning stays serial on the caller's thread — it is 3 ms per
171
+ registry and writes a per-tap cache file, so parallelising it buys nothing and
172
+ scrambles output order. Cleanup after a failed clone must tolerate a
173
+ directory that was never created: `util.rmtree`'s read-only retry hook calls
174
+ `chmod` on the missing path and raises `FileNotFoundError`, which out of a worker thread
175
+ turns one 404 into a crashed catalog tap.
176
+
161
177
  - **`~/.boost/cache/` holds boost's own indexes, not just tap catalogs.**
162
178
  `paths.INTERNAL_CACHE_FILES` names them. `boost clean` sweeps `cache/*.json`
163
179
  whose stem is not a configured tap, which described `rag_index.json` and
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.45
3
+ Version: 1.2.47
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -210,6 +210,11 @@ boost tap --catalog --category java # Spring Boot / Kotlin / JVM packs
210
210
  boost tap --catalog --category security # filter by category
211
211
  ```
212
212
 
213
+ Taps clone in parallel — eight at once by default, `--jobs N` (or
214
+ `BOOST_TAP_JOBS`) to change it, capped at 16 because it is someone else's
215
+ server. A clone is network latency rather than bandwidth, so the whole catalog
216
+ measures **2 min 10 s for 463 registries** where one-at-a-time took 13 minutes.
217
+
213
218
  Every `est_items` is measured from the repository's file tree rather than
214
219
  estimated, so `--limit` ranks by real size. Items are counted once however many
215
220
  agents a repository renders them for, so a pack shipping a copy in `.claude/`,
@@ -168,6 +168,11 @@ boost tap --catalog --category java # Spring Boot / Kotlin / JVM packs
168
168
  boost tap --catalog --category security # filter by category
169
169
  ```
170
170
 
171
+ Taps clone in parallel — eight at once by default, `--jobs N` (or
172
+ `BOOST_TAP_JOBS`) to change it, capped at 16 because it is someone else's
173
+ server. A clone is network latency rather than bandwidth, so the whole catalog
174
+ measures **2 min 10 s for 463 registries** where one-at-a-time took 13 minutes.
175
+
171
176
  Every `est_items` is measured from the repository's file tree rather than
172
177
  estimated, so `--limit` ranks by real size. Items are counted once however many
173
178
  agents a repository renders them for, so a pack shipping a copy in `.claude/`,
@@ -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.45'
22
- __version_tuple__ = version_tuple = (1, 2, 45)
21
+ __version__ = version = '1.2.47'
22
+ __version_tuple__ = version_tuple = (1, 2, 47)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -40,27 +40,39 @@ def _tap_defaults(pins: dict[str, dict], dry_run: bool) -> list[str]:
40
40
  ordering that produces a commit mismatch on every registry that moved since
41
41
  the last shard run.
42
42
  """
43
- existing = {t.name for t in registry.list_taps()}
44
- names = []
45
- for default in config.DEFAULT_TAPS:
46
- name = str(default["name"])
47
- names.append(name)
48
- if name in existing:
43
+ names = [str(d["name"]) for d in config.DEFAULT_TAPS]
44
+ commits = {name: str(pins[name].get("commit")) for name in names
45
+ if name in pins}
46
+ if dry_run:
47
+ existing = {t.name for t in registry.list_taps()}
48
+ for name in names:
49
+ if name in existing:
50
+ out.info(out.role("%s already tapped" % name, "muted"))
51
+ continue
52
+ at = commits.get(name)
53
+ out.info("would tap %s%s" % (name, " @ %s" % at[:7] if at else ""))
54
+ return names
55
+ # One pool, one config write: seven sequential clones is ~11 s of waiting
56
+ # for work that takes ~2 s done together, and the first thing a new user
57
+ # sees should not be a progress bar.
58
+ with spin.Spinner("tapping %d registries" % len(names)):
59
+ results = registry.add_many([str(d["url"]) for d in config.DEFAULT_TAPS],
60
+ curated=True, pins=commits)
61
+ for res in results:
62
+ name = res["name"]
63
+ if res.get("skipped"):
49
64
  out.info(out.role("%s already tapped" % name, "muted"))
50
65
  continue
51
- row = pins.get(name)
52
- at = str(row.get("commit")) if row else None
53
- if dry_run:
54
- out.info("would tap %s%s" % (name, " @ %s" % at[:7] if at else ""))
66
+ if not res.get("ok"):
67
+ out.warn("could not tap %s: %s" % (name, res.get("error", "")))
55
68
  continue
56
69
  try:
57
- with spin.Spinner("tapping %s" % name):
58
- tap = registry.add(str(default["url"]), curated=True, at=at)
59
- entries = catalog.rebuild_tap(tap)
70
+ entries = catalog.rebuild_tap(res["tap"])
60
71
  except BoostError as exc:
61
- out.warn("could not tap %s: %s" % (name, exc.message))
72
+ out.warn("could not index %s: %s" % (name, exc.message))
62
73
  continue
63
- journal.log("tap", tap.name)
74
+ journal.log("tap", name)
75
+ at = commits.get(name)
64
76
  out.ok("tapped %s (%d items)%s"
65
77
  % (name, len(entries), " @ %s" % at[:7] if at else ""))
66
78
  return names
@@ -44,22 +44,44 @@ def _tap_catalog(args) -> int:
44
44
  out.dim("%d registries · ~%d items (dry run — nothing tapped)"
45
45
  % (len(selection), sum(e.get("est_items") or 0 for e in selection)))
46
46
  return 0
47
- existing = {t.name for t in registry.list_taps()}
47
+ focus = {str(e["name"]): e.get("focus", "") for e in selection}
48
+ return _tap_all([str(e["url"]) for e in selection], jobs=args.jobs,
49
+ focus=focus)
50
+
51
+
52
+ def _tap_all(urls: list[str], jobs: int | None,
53
+ focus: dict[str, str] | None = None,
54
+ pins: dict[str, str] | None = None) -> int:
55
+ """Clone many registries at once, then scan each one that arrived.
56
+
57
+ The split is the whole optimisation. Cloning is network latency — 1.6 s per
58
+ registry whether one runs or twelve — so it goes wide; scanning is 3 ms per
59
+ registry and writes a per-tap cache file, so it stays on this thread where
60
+ its output can be printed in order and its errors belong to one tap.
61
+ """
62
+ focus = focus or {}
63
+ results = registry.add_many(urls, curated=True, pins=pins, jobs=jobs)
48
64
  rc = 0
49
- for e in selection:
50
- if e["name"] in existing:
51
- out.info(out.role("%s already tapped" % e["name"], "muted"))
65
+ for res in results:
66
+ name = res["name"]
67
+ if res.get("skipped"):
68
+ out.info(out.role("%s already tapped" % name, "muted"))
69
+ continue
70
+ if not res.get("ok"):
71
+ out.warn("could not tap %s: %s" % (name, res.get("error", "")))
72
+ rc = 1
52
73
  continue
74
+ tap = res["tap"]
53
75
  try:
54
- tap = registry.add(str(e["url"]), curated=True)
55
76
  entries = catalog.rebuild_tap(tap)
56
77
  except BoostError as err:
57
- out.warn("could not tap %s: %s" % (e["name"], err.message))
78
+ out.warn("could not index %s: %s" % (name, err.message))
58
79
  rc = 1
59
80
  continue
60
81
  journal.log("tap", tap.name)
61
- out.ok("tapped %s (%d items) — %s"
62
- % (tap.name, len(entries), e.get("focus", "")))
82
+ note = focus.get(name) or ""
83
+ out.ok("tapped %s (%d items)%s"
84
+ % (tap.name, len(entries), " — %s" % note if note else ""))
63
85
  return rc
64
86
 
65
87
 
@@ -104,6 +126,10 @@ def cmd_tap(argv) -> int:
104
126
  p.add_argument("--at", metavar="SHA",
105
127
  help="pin the clone to one 40-character commit, as a "
106
128
  "published vector shard requires")
129
+ p.add_argument("--jobs", type=int, metavar="N",
130
+ help="clone this many registries at once (default %d, max "
131
+ "%d)" % (registry.DEFAULT_TAP_JOBS,
132
+ registry.MAX_TAP_JOBS))
107
133
  args = p.parse_args(argv)
108
134
  if args.at and not args.spec:
109
135
  p.error("--at pins one registry, so it needs a SPEC")
@@ -114,24 +140,13 @@ def cmd_tap(argv) -> int:
114
140
  if args.catalog:
115
141
  rc |= _tap_catalog(args)
116
142
  if args.defaults:
117
- existing = {t.name for t in registry.list_taps()}
118
- for default in config.DEFAULT_TAPS:
119
- if default["name"] in existing:
120
- out.info(out.role("%s already tapped" % default["name"], "muted"))
121
- continue
122
- try:
123
- tap = registry.add(str(default["url"]), curated=True)
124
- entries = catalog.rebuild_tap(tap)
125
- except BoostError as e:
126
- out.warn("could not tap %s: %s" % (default["name"], e.message))
127
- rc = 1
128
- continue
129
- journal.log("tap", tap.name)
130
- # "items", not "skills": the defaults now carry rules and
131
- # workflows, so a pure rules registry reported "257 skills"
132
- # immediately after the README promised three kinds.
133
- out.ok("tapped %s (%d items) — %s"
134
- % (tap.name, len(entries), default.get("focus", "")))
143
+ # "items", not "skills": the defaults now carry rules and workflows, so
144
+ # a pure rules registry reported "257 skills" immediately after the
145
+ # README promised three kinds. `_tap_all` says items.
146
+ rc |= _tap_all([str(d["url"]) for d in config.DEFAULT_TAPS],
147
+ jobs=args.jobs,
148
+ focus={str(d["name"]): str(d.get("focus", ""))
149
+ for d in config.DEFAULT_TAPS})
135
150
  if args.spec:
136
151
  with spin.Spinner("cloning %s" % args.spec):
137
152
  tap = registry.add(args.spec, curated=args.curated, at=args.at)
@@ -4,6 +4,9 @@
4
4
  from __future__ import annotations
5
5
 
6
6
  import difflib
7
+ import os
8
+ from concurrent.futures import ThreadPoolExecutor
9
+ from contextlib import suppress
7
10
  from dataclasses import dataclass
8
11
  from pathlib import Path
9
12
 
@@ -206,6 +209,149 @@ def add(spec: str, curated: bool = False, at: str | None = None) -> Tap:
206
209
  return tap
207
210
 
208
211
 
212
+ #: Default concurrency for :func:`add_many`. Tapping is network-latency bound,
213
+ #: not bandwidth or CPU bound: a clone of a catalog registry measures ~1.6 s
214
+ #: whether one runs or twelve do, so the wall time of `boost tap --catalog` was
215
+ #: 463 x 1.6 s ~= 13 minutes of mostly waiting. Measured on the real catalog,
216
+ #: 40 registries went from 58 s serial to 6.4 s at 12 workers with the per-repo
217
+ #: median unchanged (1.55 s -> 1.46 s), which is what says the concurrency is
218
+ #: not being paid for somewhere else.
219
+ DEFAULT_TAP_JOBS = 8
220
+
221
+ #: Politeness ceiling. Nothing in the measurements argues for more, and this is
222
+ #: someone else's server: past this the risk of being throttled outweighs a
223
+ #: wall-time gain that is already asymptotic.
224
+ MAX_TAP_JOBS = 16
225
+
226
+
227
+ def tap_jobs(requested: int | None = None) -> int:
228
+ """How many clones to run at once, clamped to something defensible."""
229
+ if requested is None:
230
+ env = os.environ.get("BOOST_TAP_JOBS")
231
+ requested = int(env) if env and env.isdigit() else DEFAULT_TAP_JOBS
232
+ return max(1, min(int(requested), MAX_TAP_JOBS))
233
+
234
+
235
+ def _discard(tap: Tap) -> None:
236
+ """Remove a rejected clone, tolerating one that was never created.
237
+
238
+ `add` only ever deleted a directory it had just cloned successfully, so it
239
+ could call `rmtree` unguarded. Here the failure may be the clone itself —
240
+ at which point the path does not exist, and `util.rmtree`'s read-only retry
241
+ hook chmods a missing file and raises `FileNotFoundError` out of the worker
242
+ thread, turning "this one registry 404'd" into a crashed catalog tap.
243
+ """
244
+ # Cleanup is best-effort: the caller's real error is the one worth
245
+ # reporting, and a leftover directory is a smaller problem than losing it
246
+ # behind a cleanup failure.
247
+ with suppress(OSError):
248
+ if tap.path.exists():
249
+ util.rmtree(tap.path)
250
+
251
+
252
+ def _clone_one(spec: str, curated: bool, at: str | None) -> dict:
253
+ """Clone one tap without touching config. Never raises.
254
+
255
+ Config is deliberately left alone: `config.load()` -> mutate -> `save()` is
256
+ read-modify-write on a single JSON file, so running it from N threads loses
257
+ taps at random. :func:`add_many` writes once, on one thread, after every
258
+ clone has finished.
259
+ """
260
+ try:
261
+ name, url = parse_spec(spec)
262
+ except BoostError as exc:
263
+ return {"spec": spec, "name": spec, "ok": False, "error": exc.message}
264
+ tap = Tap(name=name, url=url, curated=curated)
265
+ try:
266
+ if tap.path.exists():
267
+ util.rmtree(tap.path)
268
+ gitutil.clone_shallow(url, tap.path)
269
+ if at:
270
+ gitutil.checkout_commit(tap.path, at)
271
+ problems = policy.check_tap_signing(tap.path)
272
+ if problems:
273
+ _discard(tap)
274
+ return {"spec": spec, "name": name, "ok": False,
275
+ "error": "failed provenance policy: %s" % "; ".join(problems)}
276
+ except BoostError as exc:
277
+ # Leave no half-added tap behind, exactly as `add` does: a clone that
278
+ # failed its pin or its policy check is not a tap, and a directory that
279
+ # looks like one would be indexed on the next scan.
280
+ _discard(tap)
281
+ return {"spec": spec, "name": name, "ok": False, "error": exc.message}
282
+ return {"spec": spec, "name": name, "url": url, "ok": True, "tap": tap}
283
+
284
+
285
+ def add_many(specs: list[str], curated: bool = False,
286
+ pins: dict[str, str] | None = None, jobs: int | None = None,
287
+ on_done=None) -> list[dict]:
288
+ """Clone many taps at once and register them in a single config write.
289
+
290
+ Returns one result dict per spec, in the order given, each with ``ok`` and
291
+ either ``tap`` or ``error``. One registry's failure never costs another its
292
+ clone — a catalog tap of 463 repos that aborted on the first 404 would be
293
+ worse than useless.
294
+
295
+ `pins` maps a tap name to the commit to check out, for published vector
296
+ shards (see ``core.shards``).
297
+ """
298
+ if not specs:
299
+ return []
300
+ paths.ensure_dirs()
301
+ pins = pins or {}
302
+ existing = {t.name for t in list_taps()}
303
+ results: list[dict] = []
304
+ todo: list[str] = []
305
+ for spec in specs:
306
+ try:
307
+ name, _url = parse_spec(spec)
308
+ except BoostError as exc:
309
+ results.append({"spec": spec, "name": spec, "ok": False,
310
+ "error": exc.message})
311
+ continue
312
+ if name in existing:
313
+ results.append({"spec": spec, "name": name, "ok": False,
314
+ "skipped": True, "error": "already tapped"})
315
+ continue
316
+ # Guard against the same registry appearing twice in one selection:
317
+ # two threads cloning into one directory is a corrupt clone, not a race
318
+ # anyone would enjoy debugging.
319
+ existing.add(name)
320
+ todo.append(spec)
321
+
322
+ def work(spec: str) -> dict:
323
+ name, _url = parse_spec(spec)
324
+ return _clone_one(spec, curated, pins.get(name))
325
+
326
+ with ThreadPoolExecutor(max_workers=tap_jobs(jobs)) as pool:
327
+ for res in pool.map(work, todo):
328
+ results.append(res)
329
+ if on_done is not None:
330
+ on_done(res)
331
+
332
+ # One read-modify-write, after every clone: N threads doing this each would
333
+ # lose taps, and 463 sequential rewrites of the same file is its own cost.
334
+ fresh = [r for r in results if r.get("ok")]
335
+ if fresh:
336
+ cfg = config.load()
337
+ rows = cfg.setdefault("taps", [])
338
+ for r in fresh:
339
+ rows.append({"name": r["name"], "url": r["url"],
340
+ "curated": curated})
341
+ config.save(cfg)
342
+ # First occurrence, not last: a dict comprehension over `specs` keeps the
343
+ # LAST index for a repeated spec, which pushed the duplicate — and so its
344
+ # whole position — to the end and reordered everything in between.
345
+ order: dict[str, int] = {}
346
+ for i, spec in enumerate(specs):
347
+ order.setdefault(spec, i)
348
+ # Ties are the repeats themselves; report the clone before the "already
349
+ # tapped" note about it.
350
+ results.sort(key=lambda r: (order.get(r["spec"], len(order)),
351
+ bool(r.get("skipped"))))
352
+ return results
353
+
354
+
209
355
  def remove(name: str) -> Tap:
210
356
  """Deregister a tap and delete its clone and cache file.
211
357
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.45
3
+ Version: 1.2.47
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -210,6 +210,11 @@ boost tap --catalog --category java # Spring Boot / Kotlin / JVM packs
210
210
  boost tap --catalog --category security # filter by category
211
211
  ```
212
212
 
213
+ Taps clone in parallel — eight at once by default, `--jobs N` (or
214
+ `BOOST_TAP_JOBS`) to change it, capped at 16 because it is someone else's
215
+ server. A clone is network latency rather than bandwidth, so the whole catalog
216
+ measures **2 min 10 s for 463 registries** where one-at-a-time took 13 minutes.
217
+
213
218
  Every `est_items` is measured from the repository's file tree rather than
214
219
  estimated, so `--limit` ranks by real size. Items are counted once however many
215
220
  agents a repository renders them for, so a pack shipping a copy in `.claude/`,
@@ -761,6 +761,7 @@ tests/unit/test_registries_fresh.py
761
761
  tests/unit/test_registry.py
762
762
  tests/unit/test_registry_categories.py
763
763
  tests/unit/test_registry_control_chars.py
764
+ tests/unit/test_registry_parallel.py
764
765
  tests/unit/test_release_guard.py
765
766
  tests/unit/test_release_preflight.py
766
767
  tests/unit/test_required_checks.py
@@ -353,7 +353,7 @@ python3 -m venv /tmp/crew &amp;&amp; /tmp/crew/bin/pip install <span class="s">"
353
353
 
354
354
  <footer>
355
355
  <div class="wrap">
356
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
356
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
357
357
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
358
358
  <nav class="foot-links" aria-label="Documentation">
359
359
  <a href="index.html">Guide</a>
@@ -387,7 +387,7 @@
387
387
 
388
388
  <footer>
389
389
  <div class="wrap">
390
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
390
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
391
391
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
392
392
  <nav class="foot-links" aria-label="Documentation">
393
393
  <a href="index.html">Guide</a>
@@ -198,7 +198,7 @@ boost chat -k 3 --no-sources "review my diff"</pre>
198
198
 
199
199
  <footer>
200
200
  <div class="wrap">
201
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
201
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
202
202
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
203
203
  <nav class="foot-links" aria-label="Documentation">
204
204
  <a href="index.html">Guide</a>
@@ -142,7 +142,7 @@
142
142
  </div>
143
143
  <div class="group" data-group="tap">
144
144
  <div class="group-h">Taps &amp; registries</div>
145
- <a class="cmd-link" href="#cmd-tap" data-search="tap add a github repo as a skill registry --defaults --catalog --type {skill,rule,workflow} --category category --limit n --include-lists --dry-run --curated --at sha spec">tap</a>
145
+ <a class="cmd-link" href="#cmd-tap" data-search="tap add a github repo as a skill registry --defaults --catalog --type {skill,rule,workflow} --category category --limit n --include-lists --dry-run --curated --at sha --jobs n spec">tap</a>
146
146
  <a class="cmd-link" href="#cmd-untap" data-search="untap remove a registry tap -f, --force name">untap</a>
147
147
  <a class="cmd-link" href="#cmd-taps" data-search="taps list all configured registry taps --json">taps</a>
148
148
  <a class="cmd-link" href="#cmd-outdated" data-search="outdated show skills with available updates --json">outdated</a>
@@ -624,10 +624,10 @@
624
624
  </div>
625
625
  </section>
626
626
  <h2 class="group-h" id="grp-tap">Taps &amp; registries</h2>
627
- <section class="cmd" id="cmd-tap" data-search="tap add a github repo as a skill registry --defaults --catalog --type {skill,rule,workflow} --category category --limit n --include-lists --dry-run --curated --at sha spec">
627
+ <section class="cmd" id="cmd-tap" data-search="tap add a github repo as a skill registry --defaults --catalog --type {skill,rule,workflow} --category category --limit n --include-lists --dry-run --curated --at sha --jobs n spec">
628
628
  <h3><span class="cname">tap</span><span class="gtag">tap</span></h3>
629
629
  <p class="summary">Add a GitHub repo as a skill registry</p>
630
- <pre class="syn">boost tap [--defaults] [--catalog] [--type {skill,rule,workflow}] [--category CATEGORY] [--limit N] [--include-lists] [--dry-run] [--curated] [--at SHA] [spec]</pre>
630
+ <pre class="syn">boost tap [--defaults] [--catalog] [--type {skill,rule,workflow}] [--category CATEGORY] [--limit N] [--include-lists] [--dry-run] [--curated] [--at SHA] [--jobs N] [spec]</pre>
631
631
  <div class="args-h">Arguments</div>
632
632
  <div class="args">
633
633
  <div class="arg"><code>spec</code><span>owner/repo, a git URL, or a local directory</span></div>
@@ -643,6 +643,7 @@
643
643
  <div class="arg"><code>--dry-run</code><span>with --catalog: print what would be tapped, tap nothing</span></div>
644
644
  <div class="arg"><code>--curated</code><span>mark the tap as curated (★ in listings)</span></div>
645
645
  <div class="arg"><code>--at SHA</code><span>pin the clone to one 40-character commit, as a published vector shard requires</span></div>
646
+ <div class="arg"><code>--jobs N</code><span>clone this many registries at once (default 8, max 16)</span></div>
646
647
  </div>
647
648
  </section>
648
649
  <section class="cmd" id="cmd-untap" data-search="untap remove a registry tap -f, --force name">
@@ -1253,7 +1254,7 @@
1253
1254
  </div>
1254
1255
 
1255
1256
  <footer>
1256
- <p class="foot-brand"><b>boost</b> &mdash; a package manager for AI coding skills</p>
1257
+ <p class="foot-brand"><b>boost</b> &mdash; a package manager for AI skills</p>
1257
1258
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> &middot; requires Python 3.12+ and <code>git</code></p>
1258
1259
  <nav class="foot-links" aria-label="Documentation">
1259
1260
  <a href="index.html">Guide</a>
@@ -266,7 +266,7 @@
266
266
 
267
267
  <footer>
268
268
  <div class="wrap">
269
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
269
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
270
270
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
271
271
  <nav class="foot-links" aria-label="Documentation">
272
272
  <a href="index.html">Guide</a>
@@ -578,7 +578,7 @@ hidden hot-path cost hiding behind the one this card measured.</p>
578
578
 
579
579
  <footer>
580
580
  <div class="wrap">
581
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
581
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
582
582
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.9+ and <code>git</code></p>
583
583
  <nav class="foot-links" aria-label="Documentation">
584
584
  <a href="index.html">Guide</a>
@@ -578,7 +578,7 @@
578
578
 
579
579
  <footer>
580
580
  <div class="wrap">
581
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
581
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
582
582
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
583
583
  <nav class="foot-links" aria-label="Documentation">
584
584
  <a href="index.html">Guide</a>
@@ -4,8 +4,8 @@
4
4
  <meta charset="utf-8">
5
5
  <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Crect width='100' height='100' rx='20' fill='%2307080f'/%3E%3Ctext x='50' y='70' font-size='58' font-family='monospace' font-weight='bold' fill='%2340cbe3' text-anchor='middle'%3E%E2%9C%A6%3C/text%3E%3C/svg%3E">
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1">
7
- <meta name="description" content="boost is a package manager for AI coding skills — find, install, and govern the SKILL.md, rule, and workflow files that Claude Code, Cursor, and Windsurf run on, wired into every agent in one pass.">
8
- <title>boost — Homebrew for AI coding skills</title>
7
+ <meta name="description" content="boost is a package manager for AI skills — find, install, and govern the SKILL.md, rule, and workflow files that Claude Code, Cursor, and Windsurf run on, wired into every agent in one pass.">
8
+ <title>boost — Homebrew for AI skills</title>
9
9
  <!-- Canonical Aurora tokens + primitives (single source of truth). The
10
10
  inline block below carries ONLY page-specific layout, and wins ties
11
11
  by coming later in the cascade. -->
@@ -561,10 +561,10 @@
561
561
  <!-- ================= HERO ================= -->
562
562
  <div class="wrap hero">
563
563
  <span class="badge">AI Skill Package Manager · on PyPI</span>
564
- <h1><span class="grad">Homebrew</span> for AI coding skills.</h1>
564
+ <h1><span class="grad">Homebrew</span> for AI skills.</h1>
565
565
  <p class="lede">
566
566
  Boost is a command-line package manager that <b>searches, installs, and
567
- manages AI coding skills</b> from GitHub-hosted registries — then wires
567
+ manages AI skills</b> from GitHub-hosted registries — then wires
568
568
  them into <b>Claude Code, Windsurf, Cursor and Gemini CLI</b> at once. One command
569
569
  replaces the copy-paste-and-pray dance of setting up AI agent skills by hand.
570
570
  </p>
@@ -600,7 +600,7 @@
600
600
  <div class="wrap">
601
601
  <span class="eyebrow">The Concept</span>
602
602
  <h2 class="sec-title">What is a “skill” — and why manage them?</h2>
603
- <p class="sec-sub">AI coding agents get better when you give them reusable knowledge.
603
+ <p class="sec-sub">AI agents get better when you give them reusable knowledge.
604
604
  Boost makes that knowledge installable.</p>
605
605
 
606
606
  <div class="concept-grid">
@@ -1019,7 +1019,7 @@ pipx inject boost-skill-cli <span class="yv">"boost-skill-cli[rag]"</span>
1019
1019
  offer it as "footer" in the landmark list. -->
1020
1020
  <footer>
1021
1021
  <div class="wrap">
1022
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
1022
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
1023
1023
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
1024
1024
  <nav class="foot-links" aria-label="Documentation">
1025
1025
  <a aria-current="page" href="#top">Guide</a>
@@ -566,7 +566,7 @@ builder.<span class="fn">add_edge</span>(<span class="s">"skills"</span>, <span
566
566
 
567
567
  <footer>
568
568
  <div class="wrap">
569
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
569
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
570
570
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
571
571
  <nav class="foot-links" aria-label="Documentation">
572
572
  <a href="index.html">Guide</a>
@@ -757,7 +757,7 @@ REGISTRY.register(
757
757
 
758
758
  <footer>
759
759
  <div class="wrap">
760
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
760
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
761
761
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.12+ and <code>git</code></p>
762
762
  <nav class="foot-links" aria-label="Documentation">
763
763
  <a href="index.html">Guide</a>
@@ -12339,7 +12339,7 @@ bytes a structurally-correct JSON response never emits.</p>
12339
12339
 
12340
12340
  <footer>
12341
12341
  <div class="wrap">
12342
- <p class="foot-brand"><b>boost</b> — a package manager for AI coding skills</p>
12342
+ <p class="foot-brand"><b>boost</b> — a package manager for AI skills</p>
12343
12343
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> · requires Python 3.9+ and <code>git</code></p>
12344
12344
  <nav class="foot-links" aria-label="Documentation">
12345
12345
  <a href="index.html">Guide</a>
@@ -328,7 +328,7 @@ _PAGE = """<!DOCTYPE html>
328
328
  </div>
329
329
 
330
330
  <footer>
331
- <p class="foot-brand"><b>boost</b> &mdash; a package manager for AI coding skills</p>
331
+ <p class="foot-brand"><b>boost</b> &mdash; a package manager for AI skills</p>
332
332
  <p class="foot-note">Install with <code>pip install boost-skill-cli</code> &middot; requires Python 3.12+ and <code>git</code></p>
333
333
  <nav class="foot-links" aria-label="Documentation">
334
334
  <a href="index.html">Guide</a>