boost-skill-cli 1.2.37__tar.gz → 1.2.38__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 (797) hide show
  1. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.vale/styles/config/vocabularies/boost/accept.txt +2 -0
  2. {boost_skill_cli-1.2.37/boost_skill_cli.egg-info → boost_skill_cli-1.2.38}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/bmad.py +105 -21
  5. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  6. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  7. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/bmad.md +30 -3
  8. boost_skill_cli-1.2.38/docs/roadmap/items/bmad-hooks-all-hosts.md +42 -0
  9. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap.html +41 -2
  10. boost_skill_cli-1.2.38/tests/functional/test_bmad_all_hosts.py +124 -0
  11. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.gitattributes +0 -0
  12. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.gitignore +0 -0
  13. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.gitleaks.toml +0 -0
  14. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.htmlvalidate.json +0 -0
  15. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.lighthouserc.json +0 -0
  16. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.lycheeignore +0 -0
  17. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.markdownlint-cli2.jsonc +0 -0
  18. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.pre-commit-config.yaml +0 -0
  19. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.stylelintrc.json +0 -0
  20. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.vale/styles/boost/AIWriting.yml +0 -0
  21. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.vale/styles/boost/Terminology.yml +0 -0
  22. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/.vale.ini +0 -0
  23. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/CLAUDE.md +0 -0
  24. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/CODE_OF_CONDUCT.md +0 -0
  25. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/CONTRIBUTING.md +0 -0
  26. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/DCO +0 -0
  27. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/GOVERNANCE.md +0 -0
  28. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/LICENSE +0 -0
  29. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/MAINTAINERS.md +0 -0
  30. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/MANIFEST.in +0 -0
  31. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/Makefile +0 -0
  32. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/README.md +0 -0
  33. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/SECURITY.md +0 -0
  34. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/SUPPORT.md +0 -0
  35. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost +0 -0
  36. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/__init__.py +0 -0
  37. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/__main__.py +0 -0
  38. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/cli.py +0 -0
  39. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/cliparse.py +0 -0
  40. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/__init__.py +0 -0
  41. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/_common.py +0 -0
  42. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/configuration.py +0 -0
  43. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/discovery.py +0 -0
  44. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/hooks.py +0 -0
  45. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/info.py +0 -0
  46. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/intelligence.py +0 -0
  47. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/pkg.py +0 -0
  48. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/quality.py +0 -0
  49. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/run.py +0 -0
  50. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/safety.py +0 -0
  51. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/taps.py +0 -0
  52. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/commands/team.py +0 -0
  53. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/__init__.py +0 -0
  54. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/adapters.py +0 -0
  55. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/agents.py +0 -0
  56. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/ai.py +0 -0
  57. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/bmad.py +0 -0
  58. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/bootstrap.py +0 -0
  59. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/browse.py +0 -0
  60. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/builtin.py +0 -0
  61. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/capabilities.py +0 -0
  62. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/catalog.py +0 -0
  63. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/catalogbundle.py +0 -0
  64. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/chat.py +0 -0
  65. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/claude_settings.py +0 -0
  66. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/complete.py +0 -0
  67. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/config.py +0 -0
  68. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/dense.py +0 -0
  69. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/ed25519.py +0 -0
  70. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/embed.py +0 -0
  71. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/faithfulness.py +0 -0
  72. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/frontmatter.py +0 -0
  73. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/gitutil.py +0 -0
  74. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/hookhost.py +0 -0
  75. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/imperative.py +0 -0
  76. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/injectscan.py +0 -0
  77. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/installscan.py +0 -0
  78. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/integrity.py +0 -0
  79. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/journal.py +0 -0
  80. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/localembed.py +0 -0
  81. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/lockfile.py +0 -0
  82. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/logs.py +0 -0
  83. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/mcp.py +0 -0
  84. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/mcpdecl.py +0 -0
  85. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/mcphost.py +0 -0
  86. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/minisign.py +0 -0
  87. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/nethttp.py +0 -0
  88. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/output.py +0 -0
  89. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/paths.py +0 -0
  90. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/policy.py +0 -0
  91. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/projectlock.py +0 -0
  92. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/provenance.py +0 -0
  93. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/rag.py +0 -0
  94. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/registry.py +0 -0
  95. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/resolve.py +0 -0
  96. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/rules.py +0 -0
  97. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/scopes.py +0 -0
  98. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/secretscan.py +0 -0
  99. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/selfupdate.py +0 -0
  100. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/serve.py +0 -0
  101. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/stackprobe.py +0 -0
  102. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/staleness.py +0 -0
  103. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/store.py +0 -0
  104. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/trustaudit.py +0 -0
  105. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/typosquat.py +0 -0
  106. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/updatediff.py +0 -0
  107. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/util.py +0 -0
  108. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/core/workflows.py +0 -0
  109. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/data/registries.json +0 -0
  110. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/data/rules/boost-first.mdc +0 -0
  111. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/errors.py +0 -0
  112. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_cli/spin.py +0 -0
  113. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/__init__.py +0 -0
  114. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/_compat.py +0 -0
  115. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/graph.py +0 -0
  116. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/loader.py +0 -0
  117. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/py.typed +0 -0
  118. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_langchain/retriever.py +0 -0
  119. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  120. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  121. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/requires.txt +0 -0
  122. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/boost_skill_cli.egg-info/top_level.txt +0 -0
  123. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/codecov.yml +0 -0
  124. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/.claude/settings.local.json +0 -0
  125. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/DEBUGGING.md +0 -0
  126. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/adapters.html +0 -0
  127. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/README.md +0 -0
  128. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/c4-components-core.md +0 -0
  129. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/c4-containers.md +0 -0
  130. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/c4-context.md +0 -0
  131. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/architecture/c4-dynamic-install.md +0 -0
  132. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/distill.gif +0 -0
  133. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/doctor.gif +0 -0
  134. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/explain.gif +0 -0
  135. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/hooks.gif +0 -0
  136. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/install.gif +0 -0
  137. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/pulse.gif +0 -0
  138. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/search.gif +0 -0
  139. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/gifs/tap.gif +0 -0
  140. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/distill.tape +0 -0
  141. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/doctor.tape +0 -0
  142. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/explain.tape +0 -0
  143. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/hooks.tape +0 -0
  144. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/install.tape +0 -0
  145. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/pulse.tape +0 -0
  146. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/search.tape +0 -0
  147. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel/tapes/tap.tape +0 -0
  148. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/carousel.html +0 -0
  149. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/chat.html +0 -0
  150. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/code-review.md +0 -0
  151. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/commands.html +0 -0
  152. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/commit-audit.md +0 -0
  153. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/demo-index.json +0 -0
  154. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/demo.gif +0 -0
  155. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/demo.html +0 -0
  156. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/demo.tape +0 -0
  157. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/dependencies.md +0 -0
  158. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/design-roadmap.html +0 -0
  159. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/eval-latest.json +0 -0
  160. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/eval.html +0 -0
  161. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/index.html +0 -0
  162. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/langchain.html +0 -0
  163. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/mcp-hub.html +0 -0
  164. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/openssf-badge.md +0 -0
  165. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/openssf-playbook.md +0 -0
  166. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/rag-architecture.md +0 -0
  167. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D01.md +0 -0
  168. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D02.md +0 -0
  169. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D03.md +0 -0
  170. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D04.md +0 -0
  171. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D05.md +0 -0
  172. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D06.md +0 -0
  173. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D07.md +0 -0
  174. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D08.md +0 -0
  175. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D09.md +0 -0
  176. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D10.md +0 -0
  177. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D11.md +0 -0
  178. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D12.md +0 -0
  179. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D13.md +0 -0
  180. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D14.md +0 -0
  181. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D15.md +0 -0
  182. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D16.md +0 -0
  183. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D17.md +0 -0
  184. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D18.md +0 -0
  185. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D19.md +0 -0
  186. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D20.md +0 -0
  187. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D21.md +0 -0
  188. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D22.md +0 -0
  189. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D23.md +0 -0
  190. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D24.md +0 -0
  191. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D25.md +0 -0
  192. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D26.md +0 -0
  193. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/BOOST-D27.md +0 -0
  194. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  195. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  196. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  197. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  198. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  199. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  200. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  201. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  202. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  203. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  204. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  205. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  206. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  207. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  208. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-first-rule.md +0 -0
  209. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  210. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  211. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/branch-current-gate.md +0 -0
  212. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  213. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  214. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  215. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  216. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  217. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  218. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  219. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  220. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  221. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  222. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  223. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  224. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  225. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  226. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/cli-command-audit.md +0 -0
  227. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  228. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  229. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  230. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  231. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/command-carousel-page.md +0 -0
  232. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  233. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  234. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  235. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  236. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  237. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  238. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  239. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  240. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  241. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  242. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  243. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  244. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  245. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  246. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  247. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  248. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  249. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  250. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  251. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  252. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  253. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  254. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  255. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  256. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  257. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  258. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  259. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  260. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  261. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  262. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  263. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  264. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  265. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  266. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  267. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  268. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  269. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  270. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  271. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  272. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  273. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  274. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  275. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  276. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  277. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  278. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  279. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  280. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  281. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  282. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/github-community-health-files.md +0 -0
  283. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  284. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  285. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  286. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  287. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  288. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  289. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  290. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  291. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  292. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  293. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  294. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  295. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  296. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  297. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  298. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  299. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  300. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  301. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  302. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  303. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  304. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  305. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  306. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  307. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  308. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  309. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  310. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  311. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  312. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  313. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  314. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  315. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  316. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  317. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  318. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  319. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  320. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  321. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  322. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  323. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  324. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  325. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  326. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  327. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  328. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  329. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  330. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  331. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  332. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  333. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  334. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  335. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  336. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  337. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  338. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  339. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  340. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  341. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  342. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  343. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  344. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  345. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  346. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  347. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  348. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  349. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  350. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  351. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  352. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  353. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  354. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  355. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  356. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  357. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  358. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-playbook.md +0 -0
  359. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/openssf-silver.md +0 -0
  360. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  361. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  362. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  363. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  364. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  365. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  366. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  367. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  368. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  369. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  370. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  371. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  372. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  373. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  374. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  375. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  376. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  377. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  378. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  379. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  380. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  381. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  382. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  383. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  384. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  385. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  386. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  387. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  388. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  389. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  390. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  391. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  392. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  393. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  394. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  395. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  396. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  397. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  398. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  399. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  400. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  401. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  402. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  403. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  404. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  405. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  406. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  407. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  408. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  409. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  410. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  411. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  412. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  413. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  414. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  415. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  416. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  417. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  418. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  419. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  420. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  421. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  422. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  423. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  424. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  425. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  426. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  427. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  428. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  429. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  430. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  431. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  432. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  433. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  434. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  435. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  436. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  437. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  438. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  439. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  440. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  441. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  442. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  443. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  444. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  445. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  446. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  447. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  448. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  449. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  450. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  451. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  452. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  453. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  454. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  455. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  456. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  457. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  458. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  459. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  460. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  461. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  462. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  463. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  464. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  465. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  466. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  467. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  468. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  469. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  470. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/workspace-scope-install.md +0 -0
  471. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/zip-strict-audit.md +0 -0
  472. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  473. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  474. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/security-design.md +0 -0
  475. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/semantic-search.md +0 -0
  476. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  477. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/verifying-releases.md +0 -0
  478. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/meta.md +0 -0
  479. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/openvex.json +0 -0
  480. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  481. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  482. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  483. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  484. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/eslint.config.mjs +0 -0
  485. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/README.md +0 -0
  486. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/__init__.py +0 -0
  487. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/baseline.json +0 -0
  488. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/faithfulness.py +0 -0
  489. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/golden_set.json +0 -0
  490. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/make_corpus.py +0 -0
  491. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/make_golden.py +0 -0
  492. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/metrics.py +0 -0
  493. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/publish_golden_dataset.py +0 -0
  494. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/evals/run_evals.py +0 -0
  495. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/examples/README.md +0 -0
  496. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/examples/adapt-demo.sh +0 -0
  497. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/examples/boost-run-prototype.sh +0 -0
  498. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/index.html +0 -0
  499. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/noxfile.py +0 -0
  500. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/pyproject.toml +0 -0
  501. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/coverage-tools.in +0 -0
  502. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/coverage-tools.txt +0 -0
  503. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/lint-tools.in +0 -0
  504. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/lint-tools.txt +0 -0
  505. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/mutation-tools.in +0 -0
  506. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/mutation-tools.txt +0 -0
  507. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/platform-pins.lock +0 -0
  508. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/release-tools.in +0 -0
  509. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/release-tools.txt +0 -0
  510. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/test-tools.in +0 -0
  511. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/requirements/test-tools.txt +0 -0
  512. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/a11y_check.py +0 -0
  513. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/add_spdx_headers.py +0 -0
  514. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/bench_cli.sh +0 -0
  515. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_command_reference.py +0 -0
  516. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_demo_index.py +0 -0
  517. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_registries.py +0 -0
  518. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_roadmap.py +0 -0
  519. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_scale_corpus.py +0 -0
  520. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/build_vex.py +0 -0
  521. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_anchors.py +0 -0
  522. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_branch_current.py +0 -0
  523. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_dco.py +0 -0
  524. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_licenses.py +0 -0
  525. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_reproducible.py +0 -0
  526. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/check_required_checks.py +0 -0
  527. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/ensure_eval_corpus.sh +0 -0
  528. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_corpus.py +0 -0
  529. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_explain.py +0 -0
  530. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_gate.py +0 -0
  531. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_recommend.py +0 -0
  532. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_retrieval.py +0 -0
  533. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/eval_stats_summary.py +0 -0
  534. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/import_budget.py +0 -0
  535. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/lock_toolchain.py +0 -0
  536. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/measure_registry.py +0 -0
  537. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/mutation_gate.py +0 -0
  538. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/mutation_shards.py +0 -0
  539. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/mutation_weights.json +0 -0
  540. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/normalize_sdist.py +0 -0
  541. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/page_budget.py +0 -0
  542. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/perf_gate.py +0 -0
  543. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/post_deploy_smoke.py +0 -0
  544. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/publish_eval_json.py +0 -0
  545. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/release_guard.py +0 -0
  546. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/release_preflight.py +0 -0
  547. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/scripts/serve_docs.py +0 -0
  548. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/setup.cfg +0 -0
  549. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/sonar-project.properties +0 -0
  550. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/style/README.md +0 -0
  551. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/style/boost.css +0 -0
  552. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/style/boost.js +0 -0
  553. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/style/demo.html +0 -0
  554. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/adapt.feature +0 -0
  555. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/browse.feature +0 -0
  556. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/count.feature +0 -0
  557. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/discover.feature +0 -0
  558. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/doctor.feature +0 -0
  559. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/environment.py +0 -0
  560. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/explain.feature +0 -0
  561. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/index.feature +0 -0
  562. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/install.feature +0 -0
  563. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/list.feature +0 -0
  564. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/mcp.feature +0 -0
  565. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/search.feature +0 -0
  566. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/cli_steps.py +0 -0
  567. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/discovery_steps.py +0 -0
  568. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/mcp_steps.py +0 -0
  569. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/bdd/features/steps/quality_steps.py +0 -0
  570. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/conftest.py +0 -0
  571. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/baseline.json +0 -0
  572. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/explain.jsonl +0 -0
  573. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/golden-natural.jsonl +0 -0
  574. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/golden.jsonl +0 -0
  575. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/recommend.jsonl +0 -0
  576. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/taps-scale.txt +0 -0
  577. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/eval/taps.txt +0 -0
  578. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_capabilities_policy.py +0 -0
  579. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_adapt.py +0 -0
  580. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_bmad.py +0 -0
  581. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_catalog.py +0 -0
  582. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_chat.py +0 -0
  583. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_configuration.py +0 -0
  584. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_discovery.py +0 -0
  585. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_hooks.py +0 -0
  586. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_hooks_gemini.py +0 -0
  587. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_info.py +0 -0
  588. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_intelligence.py +0 -0
  589. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_pane_width.py +0 -0
  590. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_pkg.py +0 -0
  591. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_quality.py +0 -0
  592. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_taps.py +0 -0
  593. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_cli_team.py +0 -0
  594. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_everyday_loop.py +0 -0
  595. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_integrity_enforce.py +0 -0
  596. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_kind_conformance.py +0 -0
  597. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_property_parsers.py +0 -0
  598. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_run.py +0 -0
  599. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_tap_signing.py +0 -0
  600. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/functional/test_workspace_scope.py +0 -0
  601. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/README.md +0 -0
  602. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  603. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  604. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  605. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  606. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  607. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  608. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  609. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  610. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  611. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  612. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  613. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  614. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  615. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  616. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  617. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  618. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  619. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  620. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  621. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  622. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  623. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  624. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  625. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/fuzz_frontmatter.py +0 -0
  626. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/fuzz/fuzz_registry.py +0 -0
  627. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/langchain/conftest.py +0 -0
  628. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/langchain/test_graph.py +0 -0
  629. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/langchain/test_loader.py +0 -0
  630. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/langchain/test_retriever.py +0 -0
  631. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/make_fixture.py +0 -0
  632. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/perf/test_benchmarks.py +0 -0
  633. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/smoke.sh +0 -0
  634. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_a11y_check.py +0 -0
  635. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_action_pin_lockstep.py +0 -0
  636. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_adapters.py +0 -0
  637. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_adapters_multi.py +0 -0
  638. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_adapters_runner.py +0 -0
  639. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_agents.py +0 -0
  640. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_ai.py +0 -0
  641. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_bmad_core.py +0 -0
  642. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_boost_first_offer.py +0 -0
  643. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_bootstrap.py +0 -0
  644. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_branch_current.py +0 -0
  645. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_browse.py +0 -0
  646. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_builtin.py +0 -0
  647. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_capabilities.py +0 -0
  648. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_catalog.py +0 -0
  649. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_catalogbundle.py +0 -0
  650. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_chat.py +0 -0
  651. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_check_anchors.py +0 -0
  652. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_check_dco.py +0 -0
  653. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_check_licenses.py +0 -0
  654. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_check_reproducible.py +0 -0
  655. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_claude_settings.py +0 -0
  656. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_clean_internal_cache.py +0 -0
  657. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_cliparse.py +0 -0
  658. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_codeql_analysis_key.py +0 -0
  659. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_command_reference_fresh.py +0 -0
  660. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_community_health_files.py +0 -0
  661. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_compact.py +0 -0
  662. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_complete.py +0 -0
  663. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_complete_rc_block.py +0 -0
  664. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_config.py +0 -0
  665. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_content_dedupe.py +0 -0
  666. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_content_identity.py +0 -0
  667. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_crash_redaction.py +0 -0
  668. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dedup_trust.py +0 -0
  669. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_demo_index.py +0 -0
  670. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense.py +0 -0
  671. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_embed_dedupe.py +0 -0
  672. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_fallback.py +0 -0
  673. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_fix_hint.py +0 -0
  674. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_quantized.py +0 -0
  675. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_ready_order.py +0 -0
  676. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_shard_real_schema.py +0 -0
  677. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  678. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_shards.py +0 -0
  679. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_status.py +0 -0
  680. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dense_status_cheap.py +0 -0
  681. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_dependabot_config.py +0 -0
  682. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_docs_pages_linked.py +0 -0
  683. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_docsite_chrome.py +0 -0
  684. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_ed25519.py +0 -0
  685. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_embed.py +0 -0
  686. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_embed_local.py +0 -0
  687. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_embed_truncated_response.py +0 -0
  688. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_entry_key.py +0 -0
  689. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_errors_and_cli_table.py +0 -0
  690. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_baseline.py +0 -0
  691. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_corpus.py +0 -0
  692. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_faithfulness.py +0 -0
  693. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_gate.py +0 -0
  694. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_grading.py +0 -0
  695. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_metrics.py +0 -0
  696. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_eval_stats_summary.py +0 -0
  697. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  698. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_faithfulness.py +0 -0
  699. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_frontmatter.py +0 -0
  700. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_fuzz_targets.py +0 -0
  701. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  702. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gitleaks_config.py +0 -0
  703. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gitutil.py +0 -0
  704. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gitutil_lfs.py +0 -0
  705. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_gitutil_sparse.py +0 -0
  706. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_hook_settings_hosts.py +0 -0
  707. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_hookhost.py +0 -0
  708. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_imperative.py +0 -0
  709. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_import_budget.py +0 -0
  710. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_injectscan.py +0 -0
  711. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_install_permission_error.py +0 -0
  712. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_installscan.py +0 -0
  713. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_integrity.py +0 -0
  714. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_journal.py +0 -0
  715. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_langchain_packaging.py +0 -0
  716. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_link_ownership.py +0 -0
  717. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_localembed.py +0 -0
  718. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_localembed_e2e.py +0 -0
  719. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_lockfile.py +0 -0
  720. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_logs.py +0 -0
  721. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_marketing_counts.py +0 -0
  722. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mcp.py +0 -0
  723. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mcp_install_scan.py +0 -0
  724. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mcpdecl.py +0 -0
  725. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mcphost.py +0 -0
  726. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_measure_registry.py +0 -0
  727. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_minisign.py +0 -0
  728. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mutation_hardening.py +0 -0
  729. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mutation_shards.py +0 -0
  730. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mutation_subfile_shards.py +0 -0
  731. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_mutmut_source_paths.py +0 -0
  732. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_nethttp.py +0 -0
  733. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_normalize_sdist.py +0 -0
  734. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_output.py +0 -0
  735. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_page_budget.py +0 -0
  736. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_paths.py +0 -0
  737. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_perf_gate.py +0 -0
  738. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_pkg_confusions.py +0 -0
  739. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_pkg_injection.py +0 -0
  740. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_pkg_secrets.py +0 -0
  741. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_platform_pins.py +0 -0
  742. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_policy.py +0 -0
  743. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_post_deploy_smoke.py +0 -0
  744. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_project_mcp_sidecar.py +0 -0
  745. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_projectlock.py +0 -0
  746. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_provenance.py +0 -0
  747. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_publish_golden_dataset.py +0 -0
  748. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rag.py +0 -0
  749. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rag_fastpath.py +0 -0
  750. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rag_fusion.py +0 -0
  751. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_registries_fresh.py +0 -0
  752. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_registry.py +0 -0
  753. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_registry_categories.py +0 -0
  754. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_registry_control_chars.py +0 -0
  755. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_release_guard.py +0 -0
  756. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_release_preflight.py +0 -0
  757. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_required_checks.py +0 -0
  758. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rerank_cache.py +0 -0
  759. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_resolve.py +0 -0
  760. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_roadmap_fresh.py +0 -0
  761. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_rules.py +0 -0
  762. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_scale_corpus.py +0 -0
  763. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_scopes.py +0 -0
  764. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_secretscan.py +0 -0
  765. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_selfupdate.py +0 -0
  766. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_serve.py +0 -0
  767. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_serve_docs.py +0 -0
  768. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_shards_matrix.py +0 -0
  769. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_smoke_covers_every_command.py +0 -0
  770. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_spdx_headers.py +0 -0
  771. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_spin.py +0 -0
  772. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_stackprobe.py +0 -0
  773. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_staleness.py +0 -0
  774. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_store.py +0 -0
  775. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_store_materialize.py +0 -0
  776. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_sync_blocked_links.py +0 -0
  777. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  778. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_token_parity.py +0 -0
  779. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_toolchain_lock.py +0 -0
  780. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_trustaudit.py +0 -0
  781. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_typosquat.py +0 -0
  782. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_updatediff.py +0 -0
  783. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_util.py +0 -0
  784. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_version.py +0 -0
  785. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_vex.py +0 -0
  786. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_visual_harness_flags.py +0 -0
  787. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_concurrency.py +0 -0
  788. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  789. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  790. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflow_timeouts.py +0 -0
  791. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_workflows.py +0 -0
  792. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  793. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/a11y_check.mjs +0 -0
  794. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/console_check.mjs +0 -0
  795. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/package-lock.json +0 -0
  796. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/package.json +0 -0
  797. {boost_skill_cli-1.2.37 → boost_skill_cli-1.2.38}/tests/visual/visual_check.mjs +0 -0
@@ -79,6 +79,8 @@ lookups
79
79
  lowercasing
80
80
  Magento
81
81
  maintainer's
82
+ Matchers
83
+ matchers
82
84
  mcp
83
85
  mergeable
84
86
  minisign
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.37
3
+ Version: 1.2.38
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.37'
22
- __version_tuple__ = version_tuple = (1, 2, 37)
21
+ __version__ = version = '1.2.38'
22
+ __version_tuple__ = version_tuple = (1, 2, 38)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -38,11 +38,25 @@ stage the installer in a temp dir and copy only the `bmad-*` skills into
38
38
  ~/.claude/skills, so $HOME never gets a stray `_bmad/`; the runtime is
39
39
  per-project by design.
40
40
 
41
- Both surfaces are **Claude Code only**, and deliberately so: subagent
42
- definitions and `SessionStart`/`UserPromptSubmit` hooks are Claude Code
43
- contracts with no equivalent in the other three agents boost targets, and BMAD's
44
- own installer likewise takes `--tools claude-code`. This is the one part of
45
- boost that does not fan out over `agents.enabled_agents()`.
41
+ The **hooks fan out; the personas do not**, and the split is not arbitrary.
42
+
43
+ A subagent definition is a Claude Code contract, and BMAD's own installer takes
44
+ `--tools claude-code`, so personas stay in `~/.claude/agents/`. Copying them
45
+ into Gemini's `agents/` slot would also ship files its schema rejects — that
46
+ slot validates, and a Claude-dialect persona fails it.
47
+
48
+ The hooks are a different case, and an earlier version of this docstring got it
49
+ wrong by lumping them together: it claimed `SessionStart` and
50
+ `UserPromptSubmit` had "no equivalent in the other three agents", which stopped
51
+ being true when `core/hookhost.py` learned Gemini's vocabulary. They map to
52
+ `SessionStart` and `BeforeAgent`, so `bmad on` now installs them on every host
53
+ with evidence of use, translating the event names and the timeout units on the
54
+ way. Matchers are *not* translated — `hookhost` passes them through
55
+ host-native — so Claude's `startup|resume|clear` source matcher is applied only
56
+ on Claude.
57
+
58
+ What that buys on a second host is prompt shaping, not full parity: the routing
59
+ banner names personas Gemini cannot spawn.
46
60
  """
47
61
  from __future__ import annotations
48
62
 
@@ -61,7 +75,7 @@ from pathlib import Path
61
75
  from .. import cliparse
62
76
  from ..core import bmad as core
63
77
  from ..core import claude_settings as cs
64
- from ..core import journal, paths, util
78
+ from ..core import hookhost, journal, paths, util
65
79
  from ..core import output as out
66
80
  from ..errors import BoostError
67
81
 
@@ -148,6 +162,74 @@ def _never_fails(command: str) -> str:
148
162
  return command + " || true"
149
163
 
150
164
 
165
+ def _hook_hosts(scope: str) -> list[str]:
166
+ """Hosts to write hooks into: Claude always, others on evidence of use.
167
+
168
+ Claude is unconditional. It is boost's primary host and the behaviour every
169
+ release before this one had, and the check cannot be `shutil.which` the way
170
+ `boost mcp register`'s is: that command *shells out* to `claude mcp add` and
171
+ genuinely cannot work without the binary, while this one only writes a
172
+ settings.json. A user running inside Claude Code whose launcher is not on
173
+ boost's PATH would otherwise silently get no hooks at all.
174
+
175
+ A second host earns its hooks by evidence that it is actually in use —
176
+ its CLI on PATH, or its dotdir already present. Writing into
177
+ `~/.gemini/settings.json` for someone who has never run Gemini is litter in
178
+ a file boost does not own. A host that appears later is picked up by the
179
+ next `boost bmad on`, which is idempotent.
180
+ """
181
+ chosen = [hookhost.CLAUDE]
182
+ for host in hookhost.hosts():
183
+ if host == hookhost.CLAUDE:
184
+ continue
185
+ dotdir = cs.settings_path(scope, host=host).parent
186
+ if shutil.which(hookhost.cli(host)) or dotdir.is_dir():
187
+ chosen.append(host)
188
+ return chosen
189
+
190
+
191
+ #: (Claude event, hook name, matcher). The matcher is Claude's own
192
+ #: `SessionStart` source vocabulary, and `hookhost` deliberately does not
193
+ #: translate matchers — they pass through host-native — so it is applied only
194
+ #: on the host it was written for. Omitting it elsewhere means "every start",
195
+ #: which is what a session briefing wants anyway.
196
+ _ORIENT_HOOK = ("SessionStart", HOOK_NAME, HOOK_MATCHER)
197
+ _ROUTE_HOOK = ("UserPromptSubmit", ROUTE_HOOK_NAME, None)
198
+
199
+
200
+ def _add_hook_everywhere(scope: str, spec: tuple, command: str) -> list[str]:
201
+ """Install one hook on every installed host. Returns the hosts written."""
202
+ event, name, matcher = spec
203
+ written = []
204
+ for host in _hook_hosts(scope):
205
+ target = hookhost.translate(host, event)
206
+ if target is None:
207
+ # Refused out loud rather than dropped: a hook the user asked for
208
+ # and silently never got is worse than one that cannot exist.
209
+ out.warn("%s has no counterpart for %s — skipped"
210
+ % (hookhost.label(host), event))
211
+ continue
212
+ cs.add_hook(scope, target, name, command,
213
+ matcher=matcher if host == hookhost.CLAUDE else None,
214
+ host=host)
215
+ written.append(host)
216
+ return written
217
+
218
+
219
+ def _remove_hook_everywhere(scope: str, *specs: tuple) -> None:
220
+ """Remove hooks from every host, installed or not.
221
+
222
+ Unlike install this does not filter on `shutil.which`: someone who removed
223
+ an agent CLI still wants boost's hooks gone from its settings.json, and
224
+ `remove_hook` against a file that was never written is a no-op.
225
+ """
226
+ for host in hookhost.hosts():
227
+ for event, name, _matcher in specs:
228
+ target = hookhost.translate(host, event)
229
+ if target is not None:
230
+ cs.remove_hook(scope, target, name, host=host)
231
+
232
+
151
233
  def _autopilot_on(scope) -> int:
152
234
  """The one command. Personas + orientation + router, in one idempotent pass.
153
235
 
@@ -160,11 +242,11 @@ def _autopilot_on(scope) -> int:
160
242
  slugs, skipped = core.write_personas(agents)
161
243
 
162
244
  launcher = shlex.quote(str(paths.launcher()))
163
- cs.add_hook(scope, "SessionStart", HOOK_NAME,
164
- _never_fails("%s bmad orient --scope %s" % (launcher, scope)),
165
- matcher=HOOK_MATCHER)
166
- cs.add_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME,
167
- _never_fails("%s bmad route" % launcher))
245
+ hosts = _add_hook_everywhere(
246
+ scope, _ORIENT_HOOK,
247
+ _never_fails("%s bmad orient --scope %s" % (launcher, scope)))
248
+ _add_hook_everywhere(scope, _ROUTE_HOOK,
249
+ _never_fails("%s bmad route" % launcher))
168
250
  _set_scope_state(scope, autopilot=True, startup=True, personas=len(slugs),
169
251
  enabled_at=util.now_iso())
170
252
  journal.log("bmad-autopilot", "on", scope=scope, personas=len(slugs))
@@ -176,8 +258,11 @@ def _autopilot_on(scope) -> int:
176
258
  % (len(skipped), ", ".join(skipped)))
177
259
  out.dim(" delete the file to let `boost bmad on` restore the stock version")
178
260
  out.dim(" personas → %s" % paths.tilde(agents))
179
- out.dim(" hooks → %s (SessionStart + UserPromptSubmit)"
180
- % paths.tilde(cs.settings_path(scope)))
261
+ for host in hosts:
262
+ out.dim(" hooks → %s (%s + %s)"
263
+ % (paths.tilde(cs.settings_path(scope, host=host)),
264
+ hookhost.translate(host, "SessionStart"),
265
+ hookhost.translate(host, "UserPromptSubmit")))
181
266
  out.dim(" every substantive prompt now names its lead persona and its "
182
267
  "definition of done; trivial asks are left alone")
183
268
  # Claude Code only watches an agents dir that existed when the session
@@ -189,8 +274,7 @@ def _autopilot_on(scope) -> int:
189
274
 
190
275
  def _autopilot_off(scope) -> int:
191
276
  scope = scope or "global"
192
- cs.remove_hook(scope, "SessionStart", HOOK_NAME)
193
- cs.remove_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
277
+ _remove_hook_everywhere(scope, _ORIENT_HOOK, _ROUTE_HOOK)
194
278
  removed = core.remove_personas(_agents_dir(scope))
195
279
  _set_scope_state(scope, autopilot=False, startup=False, personas=0)
196
280
  journal.log("bmad-autopilot", "off", scope=scope, personas=len(removed))
@@ -374,14 +458,15 @@ def _startup(value, scope) -> int:
374
458
  if value == "on":
375
459
  cmd = "%s bmad orient --scope %s" % (
376
460
  shlex.quote(str(paths.launcher())), scope)
377
- cs.add_hook(scope, "SessionStart", HOOK_NAME, cmd, matcher=HOOK_MATCHER)
461
+ started = _add_hook_everywhere(scope, _ORIENT_HOOK, cmd)
378
462
  _set_scope_state(scope, startup=True)
379
463
  journal.log("bmad-startup", "on", scope=scope)
380
464
  out.ok("BMAD startup ON (%s) — new sessions get orientation" % scope)
381
- out.dim(" hook → %s" % cs.settings_path(scope))
465
+ for host in started:
466
+ out.dim(" hook → %s" % cs.settings_path(scope, host=host))
382
467
  return 0
383
468
  if value == "off":
384
- cs.remove_hook(scope, "SessionStart", HOOK_NAME)
469
+ _remove_hook_everywhere(scope, _ORIENT_HOOK)
385
470
  _set_scope_state(scope, startup=False)
386
471
  journal.log("bmad-startup", "off", scope=scope)
387
472
  out.ok("BMAD startup OFF (%s) — skills stay installed" % scope)
@@ -419,8 +504,7 @@ def _uninstall(scope, yes) -> int:
419
504
  scope, " + _bmad/, _bmad-output/" if scope == "project" else ""))):
420
505
  out.info("aborted")
421
506
  return 0
422
- cs.remove_hook(scope, "SessionStart", HOOK_NAME)
423
- cs.remove_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
507
+ _remove_hook_everywhere(scope, _ORIENT_HOOK, _ROUTE_HOOK)
424
508
  removed = _rm_skills(_skills_dir(scope))
425
509
  removed += len(core.remove_personas(_agents_dir(scope)))
426
510
  if scope == "project":
@@ -438,7 +522,7 @@ def _uninstall(scope, yes) -> int:
438
522
  def _disable(scope) -> int:
439
523
  """Quarantine: turn startup off and move skills aside (recoverable)."""
440
524
  scope = scope or "project"
441
- cs.remove_hook(scope, "SessionStart", HOOK_NAME)
525
+ _remove_hook_everywhere(scope, _ORIENT_HOOK)
442
526
  qdir = _quarantine_dir(scope)
443
527
  qdir.mkdir(parents=True, exist_ok=True)
444
528
  moved = 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.37
3
+ Version: 1.2.38
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -210,6 +210,7 @@ docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md
210
210
  docs/roadmap/items/bm25-has-no-stemming.md
211
211
  docs/roadmap/items/bm25-index-is-one-json-blob.md
212
212
  docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md
213
+ docs/roadmap/items/bmad-hooks-all-hosts.md
213
214
  docs/roadmap/items/boost-first-carried-the-losing-trigger.md
214
215
  docs/roadmap/items/boost-first-rule.md
215
216
  docs/roadmap/items/boost-langchain-publishing.md
@@ -574,6 +575,7 @@ tests/eval/golden.jsonl
574
575
  tests/eval/recommend.jsonl
575
576
  tests/eval/taps-scale.txt
576
577
  tests/eval/taps.txt
578
+ tests/functional/test_bmad_all_hosts.py
577
579
  tests/functional/test_capabilities_policy.py
578
580
  tests/functional/test_cli_adapt.py
579
581
  tests/functional/test_cli_bmad.py
@@ -48,9 +48,9 @@ boost bmad on
48
48
  ```
49
49
 
50
50
  It writes seven BMAD persona subagents into `~/.claude/agents/` and installs two
51
- hooks. A `SessionStart` hook briefs the session on the roster. A
52
- `UserPromptSubmit` hook classifies each incoming prompt and prefixes it with a
53
- short routing banner:
51
+ hooks on every host it finds. A `SessionStart` hook briefs the session on the
52
+ roster. A `UserPromptSubmit` hook classifies each incoming prompt and prefixes
53
+ it with a short routing banner:
54
54
 
55
55
  ```text
56
56
  [BMAD autopilot] track: build
@@ -92,6 +92,33 @@ contents, so the moment you edit one it stops being boost's. `boost bmad on`
92
92
  reports it as kept rather than overwriting it, and `boost bmad off` leaves it
93
93
  alone. Delete the file if you want the stock version back.
94
94
 
95
+ ### Which hosts get the hooks
96
+
97
+ `boost bmad on` writes its two hooks into every host it has evidence you use,
98
+ and re-running it changes nothing that is already correct.
99
+
100
+ - **Claude always.** It is boost's primary host, and the check deliberately is
101
+ not "is the `claude` binary on `PATH`" — `bmad on` only writes a
102
+ settings.json, so someone running inside Claude Code whose launcher is not on
103
+ boost's `PATH` would otherwise silently get no hooks. (`boost mcp register`
104
+ does gate on the binary, because it shells out to `claude mcp add` and
105
+ genuinely cannot work without it.)
106
+ - **Any other host on evidence of use** — its CLI on `PATH`, or its dotdir
107
+ already there. Writing into `~/.gemini/settings.json` for someone who has
108
+ never run Gemini is litter in a file boost does not own. Install that agent
109
+ later and the next `boost bmad on` picks it up.
110
+
111
+ boost translates on the way in. `UserPromptSubmit` is written as Gemini's
112
+ `BeforeAgent`, and `--timeout 10` means ten seconds on both hosts even though
113
+ Gemini's field is milliseconds. Matchers are **not** translated — they pass
114
+ through host-native — so Claude's `startup|resume|clear` source matcher is
115
+ applied only on Claude, where that vocabulary exists.
116
+
117
+ **The personas stay Claude-only.** A subagent definition is a Claude Code
118
+ contract, and Gemini's `agents/` slot validates its input, so a Claude-dialect
119
+ persona would be rejected. What a second host gets is prompt shaping: the
120
+ routing banner arrives and names a lead persona, but Gemini cannot spawn it.
121
+
95
122
  ## The full BMAD method
96
123
 
97
124
  The method itself is a separate, heavier install. `boost bmad install` delegates
@@ -0,0 +1,42 @@
1
+ ---
2
+ id: bmad-hooks-all-hosts
3
+ board: code
4
+ section: shipped
5
+ status: shipped
6
+ category: Agents · Parity
7
+ complexity: S
8
+ impact: Med
9
+ wow: 3
10
+ note: the autopilot wrote hooks to Claude and nowhere else, long after boost knew a second host
11
+ order: 12
12
+ owner: loop/bmad-all-hosts
13
+ pr:
14
+ title: bmad on knew about a second host and wrote to one anyway
15
+ ---
16
+ <code>boost bmad on</code> installed its two hooks into Claude's
17
+ <code>settings.json</code> and nowhere else — not because of a decision, but because
18
+ <code>_autopilot_on</code> called <code>claude_settings.add_hook</code> without a
19
+ <code>host=</code> and took the default. That kept being true after
20
+ <code>core/hookhost.py</code> taught boost Gemini's event vocabulary and timeout units. The
21
+ capability was there; six call sites never used it.
22
+ <b>Six, not two.</b> <code>bmad on</code> and <code>off</code> were the obvious pair, but
23
+ <code>startup on|off</code>, <code>uninstall</code> and <code>disable</code> all manage the same
24
+ hooks, and a fan-out that fixed only the first two would have left
25
+ <code>boost bmad off</code> unable to remove what <code>boost bmad on</code> wrote.
26
+ <b>An existing test caught a real design error.</b> The first version chose hosts the way
27
+ <code>boost mcp register</code> does — <code>shutil.which</code> on the agent's CLI — and a test
28
+ that stubs <code>which</code> to <code>None</code> went red. It was right to. <code>mcp
29
+ register</code> <i>shells out</i> to <code>claude mcp add</code> and genuinely cannot work
30
+ without the binary; <code>bmad on</code> only writes a settings file. Gating on the binary
31
+ would have left a user running inside Claude Code with no hooks whenever the launcher was not
32
+ on boost's <code>PATH</code>. The rule is now <b>Claude unconditionally, any other host on
33
+ evidence of use</b> — its CLI on <code>PATH</code>, or its dotdir already present — so boost
34
+ never litters <code>~/.gemini/</code> for someone who has never run Gemini.
35
+ <b>What fans out and what does not.</b> Hooks do, translated: <code>UserPromptSubmit</code> is
36
+ written as Gemini's <code>BeforeAgent</code>, and ten seconds is written as
37
+ <code>10000</code> because Gemini's field is milliseconds. Matchers are not translated —
38
+ <code>hookhost</code> passes them through host-native — so Claude's
39
+ <code>startup|resume|clear</code> is applied only on Claude. The personas stay Claude-only: a
40
+ subagent is a Claude contract and Gemini's <code>agents/</code> slot would reject the dialect.
41
+ The module docstring claimed those events had "no equivalent in the other three agents", which
42
+ had quietly stopped being true; it says what is actually so now.
@@ -130,10 +130,10 @@
130
130
  <section class="block reveal">
131
131
  <div class="stats">
132
132
  <!-- ROADMAP:stats -->
133
- <div class="stat"><b>17</b><span>Shipped</span></div>
133
+ <div class="stat"><b>18</b><span>Shipped</span></div>
134
134
  <div class="stat"><b>1</b><span>Next up</span></div>
135
135
  <div class="stat"><b>7</b><span>Planned</span></div>
136
- <div class="stat"><b>280</b><span>Loop finds</span></div>
136
+ <div class="stat"><b>281</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -426,6 +426,45 @@ by new unit tests covering every branch.</p></details>
426
426
  </div>
427
427
  </article>
428
428
 
429
+ <article class="cap rcard" id="bmad-hooks-all-hosts">
430
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Agents · Parity</span></div>
431
+ <h3>bmad on knew about a second host and wrote to one anyway</h3>
432
+ <details class="cardbody"><summary>Write-up</summary>
433
+ <p><code>boost bmad on</code> installed its two hooks into Claude's
434
+ <code>settings.json</code> and nowhere else — not because of a decision, but because
435
+ <code>_autopilot_on</code> called <code>claude_settings.add_hook</code> without a
436
+ <code>host=</code> and took the default. That kept being true after
437
+ <code>core/hookhost.py</code> taught boost Gemini's event vocabulary and timeout units. The
438
+ capability was there; six call sites never used it.
439
+ <b>Six, not two.</b> <code>bmad on</code> and <code>off</code> were the obvious pair, but
440
+ <code>startup on|off</code>, <code>uninstall</code> and <code>disable</code> all manage the same
441
+ hooks, and a fan-out that fixed only the first two would have left
442
+ <code>boost bmad off</code> unable to remove what <code>boost bmad on</code> wrote.
443
+ <b>An existing test caught a real design error.</b> The first version chose hosts the way
444
+ <code>boost mcp register</code> does — <code>shutil.which</code> on the agent's CLI — and a test
445
+ that stubs <code>which</code> to <code>None</code> went red. It was right to. <code>mcp
446
+ register</code> <i>shells out</i> to <code>claude mcp add</code> and genuinely cannot work
447
+ without the binary; <code>bmad on</code> only writes a settings file. Gating on the binary
448
+ would have left a user running inside Claude Code with no hooks whenever the launcher was not
449
+ on boost's <code>PATH</code>. The rule is now <b>Claude unconditionally, any other host on
450
+ evidence of use</b> — its CLI on <code>PATH</code>, or its dotdir already present — so boost
451
+ never litters <code>~/.gemini/</code> for someone who has never run Gemini.
452
+ <b>What fans out and what does not.</b> Hooks do, translated: <code>UserPromptSubmit</code> is
453
+ written as Gemini's <code>BeforeAgent</code>, and ten seconds is written as
454
+ <code>10000</code> because Gemini's field is milliseconds. Matchers are not translated —
455
+ <code>hookhost</code> passes them through host-native — so Claude's
456
+ <code>startup|resume|clear</code> is applied only on Claude. The personas stay Claude-only: a
457
+ subagent is a Claude contract and Gemini's <code>agents/</code> slot would reject the dialect.
458
+ The module docstring claimed those events had "no equivalent in the other three agents", which
459
+ had quietly stopped being true; it says what is actually so now.</p></details>
460
+ <div class="meta">
461
+ <span class="m">Complexity <b>S</b></span>
462
+ <span class="m">Impact <b>Med</b></span>
463
+ <span class="m">Wow <b class="wow">★★★</b></span>
464
+ <span class="m">the autopilot wrote hooks to Claude and nowhere else, long after boost knew a second host</span>
465
+ </div>
466
+ </article>
467
+
429
468
  <article class="cap rcard" id="reuse-helpers-kill-minor-dead-work">
430
469
  <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Tech-debt</span></div>
431
470
  <h3>Reuse helpers; kill minor dead work</h3>
@@ -0,0 +1,124 @@
1
+ # Copyright the boost contributors.
2
+ # SPDX-License-Identifier: GPL-3.0-only
3
+ """`boost bmad on` installs its hooks on every installed host, idempotently.
4
+
5
+ The autopilot's two hooks were written to Claude's settings.json and nowhere
6
+ else, even after `boost hooks` learned about a second host: `_autopilot_on`
7
+ called `claude_settings.add_hook` without a `host=`, so it took the default.
8
+ A user with Gemini CLI installed had to add both by hand, translating the event
9
+ names themselves -- which is the part boost exists to know.
10
+
11
+ Idempotence is asserted rather than assumed because these hooks are written
12
+ into a file the user owns and may re-run `bmad on` against at any time.
13
+ """
14
+ from __future__ import annotations
15
+
16
+ import json
17
+
18
+ import pytest
19
+
20
+ from boost_cli.core import hookhost
21
+
22
+
23
+ def _settings(home, host, name="settings.json"):
24
+ p = home / hookhost.settings_dir(host) / name
25
+ return json.loads(p.read_text(encoding="utf-8")) if p.exists() else {}
26
+
27
+
28
+ def _boost_hooks(data):
29
+ """{event: [names]} for the hooks boost owns, by its `# boost:` marker."""
30
+ found = {}
31
+ for event, entries in (data.get("hooks") or {}).items():
32
+ for block in entries:
33
+ for h in block.get("hooks", []):
34
+ if "# boost:" in h.get("command", ""):
35
+ found.setdefault(event, []).append(
36
+ h["command"].rsplit("# boost:", 1)[1].strip())
37
+ return found
38
+
39
+
40
+ @pytest.fixture()
41
+ def both_hosts(sandbox, monkeypatch):
42
+ """Pretend every known host's CLI is installed."""
43
+ monkeypatch.setattr("shutil.which", lambda name: "/usr/bin/" + name)
44
+ return sandbox
45
+
46
+
47
+ class TestAutopilotFansOut:
48
+ def test_hooks_land_on_every_installed_host(self, both_hosts, boost):
49
+ boost("bmad", "on", "--scope", "global")
50
+ home = both_hosts
51
+ claude = _boost_hooks(_settings(home, hookhost.CLAUDE))
52
+ gemini = _boost_hooks(_settings(home, hookhost.GEMINI))
53
+ assert "bmad" in claude.get("SessionStart", [])
54
+ assert "bmad-route" in claude.get("UserPromptSubmit", [])
55
+ # Gemini spells them differently; boost must translate, not copy.
56
+ assert "bmad" in gemini.get("SessionStart", []), gemini
57
+ assert "bmad-route" in gemini.get("BeforeAgent", []), gemini
58
+
59
+ def test_gemini_timeout_is_milliseconds(self, both_hosts, boost):
60
+ """The unit bug boost exists to absorb: 10s is 10000 on Gemini."""
61
+ boost("bmad", "on", "--scope", "global")
62
+ data = _settings(both_hosts, hookhost.GEMINI)
63
+ entries = [h for blocks in data["hooks"].values()
64
+ for b in blocks for h in b.get("hooks", [])]
65
+ assert entries, data
66
+ assert all(h["timeout"] == 10000 for h in entries), entries
67
+
68
+ def test_running_twice_does_not_duplicate(self, both_hosts, boost):
69
+ boost("bmad", "on", "--scope", "global")
70
+ first = _settings(both_hosts, hookhost.GEMINI)
71
+ boost("bmad", "on", "--scope", "global")
72
+ assert _settings(both_hosts, hookhost.GEMINI) == first
73
+
74
+ def test_off_removes_them_from_every_host(self, both_hosts, boost):
75
+ boost("bmad", "on", "--scope", "global")
76
+ boost("bmad", "off", "--scope", "global")
77
+ for host in (hookhost.CLAUDE, hookhost.GEMINI):
78
+ assert _boost_hooks(_settings(both_hosts, host)) == {}, host
79
+
80
+
81
+ class TestUninstalledHostsAreSkipped:
82
+ def test_a_host_without_its_cli_gets_no_settings_file(self, sandbox, boost,
83
+ monkeypatch):
84
+ """Writing into ~/.gemini for someone who has no Gemini is litter."""
85
+ monkeypatch.setattr("shutil.which",
86
+ lambda name: "/usr/bin/claude" if name == "claude" else None)
87
+ boost("bmad", "on", "--scope", "global")
88
+ gem = sandbox / hookhost.settings_dir(hookhost.GEMINI) / "settings.json"
89
+ assert not gem.exists(), "wrote Gemini settings with no Gemini installed"
90
+ assert _boost_hooks(_settings(sandbox, hookhost.CLAUDE)), "Claude missed"
91
+
92
+
93
+ class TestHostSelectionRule:
94
+ """Claude unconditionally; a second host on evidence that it is in use.
95
+
96
+ The rule is not `boost mcp register`'s. That command shells out to
97
+ `claude mcp add` and genuinely cannot work without the binary; this one
98
+ only writes a settings.json. Gating Claude on `shutil.which` would leave a
99
+ user running inside Claude Code with no hooks whenever the launcher is not
100
+ on boost's PATH — which is exactly what an existing test caught.
101
+ """
102
+
103
+ def test_claude_gets_hooks_even_with_no_cli_anywhere(self, sandbox, boost,
104
+ monkeypatch):
105
+ monkeypatch.setattr("shutil.which", lambda _n: None)
106
+ boost("bmad", "on", "--scope", "global")
107
+ assert _boost_hooks(_settings(sandbox, hookhost.CLAUDE)), \
108
+ "Claude must get hooks regardless of what is on PATH"
109
+
110
+ def test_a_dotdir_is_evidence_enough_without_the_cli(self, sandbox, boost,
111
+ monkeypatch):
112
+ """Someone who has run Gemini has ~/.gemini, whatever their PATH says."""
113
+ monkeypatch.setattr("shutil.which", lambda _n: None)
114
+ (sandbox / hookhost.settings_dir(hookhost.GEMINI)).mkdir(parents=True)
115
+ boost("bmad", "on", "--scope", "global")
116
+ assert _boost_hooks(_settings(sandbox, hookhost.GEMINI)), \
117
+ "an existing dotdir should have earned the hooks"
118
+
119
+ def test_no_cli_and_no_dotdir_means_no_file(self, sandbox, boost,
120
+ monkeypatch):
121
+ monkeypatch.setattr("shutil.which", lambda _n: None)
122
+ boost("bmad", "on", "--scope", "global")
123
+ gem = sandbox / hookhost.settings_dir(hookhost.GEMINI) / "settings.json"
124
+ assert not gem.exists()
File without changes
File without changes