boost-skill-cli 1.2.57__tar.gz → 1.2.59__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 (827) hide show
  1. {boost_skill_cli-1.2.57/boost_skill_cli.egg-info → boost_skill_cli-1.2.59}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/quality.py +15 -0
  4. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/claude_settings.py +36 -0
  5. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/config.py +25 -0
  6. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/store.py +20 -0
  7. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/data/registries.json +15 -3
  8. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  9. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  10. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +16 -10
  11. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +6 -1
  12. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/tool-call-eval-tier.md +20 -3
  13. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap.html +42 -13
  14. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/build_registries.py +24 -0
  15. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_quality.py +40 -0
  16. boost_skill_cli-1.2.59/tests/unit/test_bot_pr_dco.py +130 -0
  17. boost_skill_cli-1.2.59/tests/unit/test_gstack_coexistence.py +285 -0
  18. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.gitattributes +0 -0
  19. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.gitignore +0 -0
  20. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.gitleaks.toml +0 -0
  21. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.htmlvalidate.json +0 -0
  22. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.lighthouserc.json +0 -0
  23. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.lycheeignore +0 -0
  24. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.markdownlint-cli2.jsonc +0 -0
  25. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.pre-commit-config.yaml +0 -0
  26. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.stylelintrc.json +0 -0
  27. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.vale/styles/boost/AIWriting.yml +0 -0
  28. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.vale/styles/boost/Terminology.yml +0 -0
  29. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  30. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/.vale.ini +0 -0
  31. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/CLAUDE.md +0 -0
  32. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/CODE_OF_CONDUCT.md +0 -0
  33. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/CONTRIBUTING.md +0 -0
  34. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/DCO +0 -0
  35. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/GOVERNANCE.md +0 -0
  36. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/LICENSE +0 -0
  37. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/MAINTAINERS.md +0 -0
  38. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/MANIFEST.in +0 -0
  39. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/Makefile +0 -0
  40. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/README.md +0 -0
  41. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/SECURITY.md +0 -0
  42. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/SUPPORT.md +0 -0
  43. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost +0 -0
  44. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/__init__.py +0 -0
  45. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/__main__.py +0 -0
  46. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/cli.py +0 -0
  47. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/cliparse.py +0 -0
  48. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/__init__.py +0 -0
  49. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/_common.py +0 -0
  50. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/bmad.py +0 -0
  51. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/configuration.py +0 -0
  52. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/discovery.py +0 -0
  53. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/hooks.py +0 -0
  54. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/info.py +0 -0
  55. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/intelligence.py +0 -0
  56. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/pkg.py +0 -0
  57. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/quickstart.py +0 -0
  58. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/run.py +0 -0
  59. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/safety.py +0 -0
  60. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/taps.py +0 -0
  61. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/commands/team.py +0 -0
  62. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/__init__.py +0 -0
  63. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/adapters.py +0 -0
  64. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/agents.py +0 -0
  65. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/ai.py +0 -0
  66. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/aihost.py +0 -0
  67. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/bmad.py +0 -0
  68. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/bootstrap.py +0 -0
  69. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/browse.py +0 -0
  70. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/builtin.py +0 -0
  71. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/capabilities.py +0 -0
  72. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/catalog.py +0 -0
  73. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/catalogbundle.py +0 -0
  74. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/chat.py +0 -0
  75. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/complete.py +0 -0
  76. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/dense.py +0 -0
  77. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/ed25519.py +0 -0
  78. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/embed.py +0 -0
  79. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/faithfulness.py +0 -0
  80. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/frontmatter.py +0 -0
  81. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/gitutil.py +0 -0
  82. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/hookhost.py +0 -0
  83. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/imperative.py +0 -0
  84. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/injectscan.py +0 -0
  85. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/installscan.py +0 -0
  86. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/integrity.py +0 -0
  87. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/journal.py +0 -0
  88. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/localembed.py +0 -0
  89. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/lockfile.py +0 -0
  90. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/logs.py +0 -0
  91. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/mcp.py +0 -0
  92. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/mcpdecl.py +0 -0
  93. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/mcphost.py +0 -0
  94. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/minisign.py +0 -0
  95. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/nethttp.py +0 -0
  96. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/output.py +0 -0
  97. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/paths.py +0 -0
  98. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/policy.py +0 -0
  99. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/projectlock.py +0 -0
  100. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/provenance.py +0 -0
  101. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/rag.py +0 -0
  102. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/registry.py +0 -0
  103. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/resolve.py +0 -0
  104. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/rules.py +0 -0
  105. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/scopes.py +0 -0
  106. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/secretscan.py +0 -0
  107. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/selfupdate.py +0 -0
  108. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/serve.py +0 -0
  109. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/shards.py +0 -0
  110. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/stackprobe.py +0 -0
  111. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/staleness.py +0 -0
  112. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/trustaudit.py +0 -0
  113. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/typosquat.py +0 -0
  114. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/updatediff.py +0 -0
  115. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/util.py +0 -0
  116. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/core/workflows.py +0 -0
  117. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/data/rules/boost-first.mdc +0 -0
  118. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/errors.py +0 -0
  119. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_cli/spin.py +0 -0
  120. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_langchain/__init__.py +0 -0
  121. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_langchain/_compat.py +0 -0
  122. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_langchain/graph.py +0 -0
  123. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_langchain/loader.py +0 -0
  124. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_langchain/py.typed +0 -0
  125. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_langchain/retriever.py +0 -0
  126. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  127. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  128. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_skill_cli.egg-info/requires.txt +0 -0
  129. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/boost_skill_cli.egg-info/top_level.txt +0 -0
  130. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/codecov.yml +0 -0
  131. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/.claude/settings.local.json +0 -0
  132. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/DEBUGGING.md +0 -0
  133. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/adapters.html +0 -0
  134. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/architecture/README.md +0 -0
  135. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/architecture/c4-components-core.md +0 -0
  136. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/architecture/c4-containers.md +0 -0
  137. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/architecture/c4-context.md +0 -0
  138. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/architecture/c4-dynamic-install.md +0 -0
  139. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/bmad.md +0 -0
  140. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/gifs/distill.gif +0 -0
  141. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/gifs/doctor.gif +0 -0
  142. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/gifs/explain.gif +0 -0
  143. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/gifs/hooks.gif +0 -0
  144. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/gifs/install.gif +0 -0
  145. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/gifs/pulse.gif +0 -0
  146. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/gifs/search.gif +0 -0
  147. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/gifs/tap.gif +0 -0
  148. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/tapes/distill.tape +0 -0
  149. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/tapes/doctor.tape +0 -0
  150. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/tapes/explain.tape +0 -0
  151. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/tapes/hooks.tape +0 -0
  152. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/tapes/install.tape +0 -0
  153. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/tapes/pulse.tape +0 -0
  154. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/tapes/search.tape +0 -0
  155. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel/tapes/tap.tape +0 -0
  156. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/carousel.html +0 -0
  157. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/chat.html +0 -0
  158. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/code-review.md +0 -0
  159. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/commands.html +0 -0
  160. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/commit-audit.md +0 -0
  161. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/demo-index.json +0 -0
  162. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/demo.gif +0 -0
  163. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/demo.html +0 -0
  164. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/demo.tape +0 -0
  165. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/dependencies.md +0 -0
  166. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/design-roadmap.html +0 -0
  167. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/eval-latest.json +0 -0
  168. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/eval.html +0 -0
  169. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/index.html +0 -0
  170. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/langchain.html +0 -0
  171. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/mcp-hub.html +0 -0
  172. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/openssf-badge.md +0 -0
  173. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/openssf-playbook.md +0 -0
  174. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/rag-architecture.md +0 -0
  175. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D01.md +0 -0
  176. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D02.md +0 -0
  177. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D03.md +0 -0
  178. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D04.md +0 -0
  179. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D05.md +0 -0
  180. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D06.md +0 -0
  181. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D07.md +0 -0
  182. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D08.md +0 -0
  183. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D09.md +0 -0
  184. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D10.md +0 -0
  185. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D11.md +0 -0
  186. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D12.md +0 -0
  187. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D13.md +0 -0
  188. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D14.md +0 -0
  189. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D15.md +0 -0
  190. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D16.md +0 -0
  191. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D17.md +0 -0
  192. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D18.md +0 -0
  193. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D19.md +0 -0
  194. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D20.md +0 -0
  195. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D21.md +0 -0
  196. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D22.md +0 -0
  197. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D23.md +0 -0
  198. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D24.md +0 -0
  199. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D25.md +0 -0
  200. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D26.md +0 -0
  201. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/BOOST-D27.md +0 -0
  202. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  203. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  204. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  205. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  206. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  207. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  208. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  209. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  210. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  211. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  212. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  213. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  214. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  215. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  216. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  217. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  218. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/boost-first-rule.md +0 -0
  219. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  220. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  221. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/branch-current-gate.md +0 -0
  222. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  223. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  224. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  225. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  226. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  227. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  228. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  229. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  230. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  231. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  232. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  233. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  234. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  235. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  236. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/cli-command-audit.md +0 -0
  237. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  238. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  239. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  240. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  241. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/command-carousel-page.md +0 -0
  242. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  243. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  244. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  245. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  246. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  247. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  248. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  249. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  250. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  251. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  252. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  253. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  254. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  255. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  256. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  257. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  258. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  259. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  260. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  261. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  262. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  263. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  264. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  265. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  266. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  267. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  268. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  269. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  270. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  271. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  272. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  273. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  274. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  275. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  276. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  277. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  278. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  279. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  280. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  281. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  282. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  283. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  284. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  285. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  286. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  287. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  288. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  289. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  290. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  291. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  292. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  293. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  294. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/github-community-health-files.md +0 -0
  295. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  296. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  297. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  298. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  299. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  300. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  301. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  302. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  303. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  304. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  305. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  306. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  307. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  308. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  309. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  310. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  311. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  312. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  313. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  314. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  315. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  316. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  317. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  318. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  319. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  320. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  321. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  322. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  323. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  324. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  325. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  326. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  327. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  328. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  329. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  330. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  331. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  332. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  333. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  334. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  335. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  336. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  337. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  338. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  339. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  340. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  341. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  342. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  343. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  344. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  345. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  346. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  347. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  348. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  349. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  350. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  351. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  352. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  353. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  354. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  355. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  356. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  357. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  358. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  359. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  360. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  361. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  362. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  363. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  364. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  365. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  366. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  367. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  368. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  369. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  370. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  371. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/openssf-playbook.md +0 -0
  372. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/openssf-silver.md +0 -0
  373. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  374. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  375. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  376. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  377. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  378. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  379. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  380. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  381. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  382. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  383. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  384. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  385. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  386. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  387. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  388. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  389. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  390. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  391. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  392. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  393. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  394. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  395. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  396. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  397. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  398. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  399. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  400. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  401. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  402. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  403. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  404. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/relicence-apache-2.md +0 -0
  405. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  406. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  407. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  408. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  409. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  410. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  411. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  412. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  413. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  414. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  415. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  416. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  417. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  418. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  419. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  420. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  421. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  422. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  423. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  424. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  425. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  426. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  427. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  428. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  429. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  430. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  431. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  432. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  433. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  434. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  435. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  436. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  437. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  438. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  439. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  440. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  441. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  442. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  443. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  444. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  445. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  446. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  447. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  448. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  449. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  450. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  451. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  452. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  453. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  454. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  455. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  456. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  457. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  458. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  459. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  460. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  461. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  462. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  463. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  464. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  465. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  466. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  467. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  468. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  469. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  470. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  471. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  472. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  473. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  474. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  475. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  476. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  477. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  478. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  479. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  480. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  481. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  482. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  483. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  484. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/workspace-scope-install.md +0 -0
  485. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/zip-strict-audit.md +0 -0
  486. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  487. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  488. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/security-design.md +0 -0
  489. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/semantic-search.md +0 -0
  490. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  491. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/verifying-releases.md +0 -0
  492. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/vex/meta.md +0 -0
  493. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/vex/openvex.json +0 -0
  494. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  495. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  496. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  497. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  498. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/eslint.config.mjs +0 -0
  499. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/README.md +0 -0
  500. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/__init__.py +0 -0
  501. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/baseline.json +0 -0
  502. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/faithfulness.py +0 -0
  503. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/golden_set.json +0 -0
  504. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/make_corpus.py +0 -0
  505. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/make_golden.py +0 -0
  506. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/metrics.py +0 -0
  507. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/publish_golden_dataset.py +0 -0
  508. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/evals/run_evals.py +0 -0
  509. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/examples/README.md +0 -0
  510. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/examples/adapt-demo.sh +0 -0
  511. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/examples/boost-run-prototype.sh +0 -0
  512. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/index.html +0 -0
  513. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/noxfile.py +0 -0
  514. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/pyproject.toml +0 -0
  515. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/coverage-tools.in +0 -0
  516. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/coverage-tools.txt +0 -0
  517. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/lint-tools.in +0 -0
  518. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/lint-tools.txt +0 -0
  519. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/mutation-tools.in +0 -0
  520. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/mutation-tools.txt +0 -0
  521. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/platform-pins.lock +0 -0
  522. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/release-tools.in +0 -0
  523. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/release-tools.txt +0 -0
  524. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/test-tools.in +0 -0
  525. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/requirements/test-tools.txt +0 -0
  526. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/a11y_check.py +0 -0
  527. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/add_spdx_headers.py +0 -0
  528. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/bench_cli.sh +0 -0
  529. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/build_command_reference.py +0 -0
  530. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/build_demo_index.py +0 -0
  531. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/build_roadmap.py +0 -0
  532. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/build_scale_corpus.py +0 -0
  533. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/build_vex.py +0 -0
  534. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/check_anchors.py +0 -0
  535. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/check_branch_current.py +0 -0
  536. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/check_dco.py +0 -0
  537. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/check_licenses.py +0 -0
  538. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/check_reproducible.py +0 -0
  539. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/check_required_checks.py +0 -0
  540. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/ensure_eval_corpus.sh +0 -0
  541. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/eval_corpus.py +0 -0
  542. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/eval_explain.py +0 -0
  543. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/eval_gate.py +0 -0
  544. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/eval_recommend.py +0 -0
  545. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/eval_retrieval.py +0 -0
  546. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/eval_stats_summary.py +0 -0
  547. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/eval_tools.py +0 -0
  548. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/import_budget.py +0 -0
  549. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/lock_toolchain.py +0 -0
  550. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/measure_registry.py +0 -0
  551. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/mutation_gate.py +0 -0
  552. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/mutation_shards.py +0 -0
  553. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/mutation_weights.json +0 -0
  554. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/normalize_sdist.py +0 -0
  555. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/page_budget.py +0 -0
  556. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/perf_gate.py +0 -0
  557. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/post_deploy_smoke.py +0 -0
  558. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/publish_eval_json.py +0 -0
  559. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/publish_shards.py +0 -0
  560. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/release_guard.py +0 -0
  561. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/release_preflight.py +0 -0
  562. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/serve_docs.py +0 -0
  563. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/scripts/shard_plan.py +0 -0
  564. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/setup.cfg +0 -0
  565. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/sonar-project.properties +0 -0
  566. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/style/README.md +0 -0
  567. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/style/boost.css +0 -0
  568. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/style/boost.js +0 -0
  569. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/style/demo.html +0 -0
  570. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/adapt.feature +0 -0
  571. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/browse.feature +0 -0
  572. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/count.feature +0 -0
  573. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/discover.feature +0 -0
  574. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/doctor.feature +0 -0
  575. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/environment.py +0 -0
  576. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/explain.feature +0 -0
  577. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/index.feature +0 -0
  578. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/install.feature +0 -0
  579. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/list.feature +0 -0
  580. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/mcp.feature +0 -0
  581. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/search.feature +0 -0
  582. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/steps/cli_steps.py +0 -0
  583. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/steps/discovery_steps.py +0 -0
  584. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/steps/mcp_steps.py +0 -0
  585. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/bdd/features/steps/quality_steps.py +0 -0
  586. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/conftest.py +0 -0
  587. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/eval/baseline.json +0 -0
  588. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/eval/explain.jsonl +0 -0
  589. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/eval/golden-natural.jsonl +0 -0
  590. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/eval/golden.jsonl +0 -0
  591. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/eval/recommend.jsonl +0 -0
  592. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/eval/taps-scale.txt +0 -0
  593. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/eval/taps.txt +0 -0
  594. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/eval/tool_calls.jsonl +0 -0
  595. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_bmad_all_hosts.py +0 -0
  596. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_capabilities_policy.py +0 -0
  597. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_adapt.py +0 -0
  598. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_bmad.py +0 -0
  599. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_catalog.py +0 -0
  600. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_chat.py +0 -0
  601. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_configuration.py +0 -0
  602. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_discovery.py +0 -0
  603. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_hooks.py +0 -0
  604. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_hooks_gemini.py +0 -0
  605. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_info.py +0 -0
  606. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_intelligence.py +0 -0
  607. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_pane_width.py +0 -0
  608. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_pkg.py +0 -0
  609. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_quickstart.py +0 -0
  610. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_tap_pins.py +0 -0
  611. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_taps.py +0 -0
  612. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_cli_team.py +0 -0
  613. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_everyday_loop.py +0 -0
  614. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_integrity_enforce.py +0 -0
  615. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_kind_conformance.py +0 -0
  616. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_property_parsers.py +0 -0
  617. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_run.py +0 -0
  618. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_tap_signing.py +0 -0
  619. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/functional/test_workspace_scope.py +0 -0
  620. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/README.md +0 -0
  621. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  622. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  623. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  624. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  625. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  626. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  627. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  628. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  629. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  630. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  631. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  632. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  633. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  634. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  635. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  636. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  637. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  638. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  639. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  640. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  641. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  642. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  643. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  644. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/fuzz_frontmatter.py +0 -0
  645. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/fuzz/fuzz_registry.py +0 -0
  646. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/langchain/conftest.py +0 -0
  647. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/langchain/test_graph.py +0 -0
  648. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/langchain/test_loader.py +0 -0
  649. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/langchain/test_retriever.py +0 -0
  650. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/make_fixture.py +0 -0
  651. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/perf/test_benchmarks.py +0 -0
  652. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/smoke.sh +0 -0
  653. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_a11y_check.py +0 -0
  654. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_action_pin_lockstep.py +0 -0
  655. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_adapters.py +0 -0
  656. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_adapters_multi.py +0 -0
  657. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_adapters_runner.py +0 -0
  658. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_agents.py +0 -0
  659. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_ai.py +0 -0
  660. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_aihost.py +0 -0
  661. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_bmad_core.py +0 -0
  662. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_boost_first_offer.py +0 -0
  663. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_bootstrap.py +0 -0
  664. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_branch_current.py +0 -0
  665. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_browse.py +0 -0
  666. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_builtin.py +0 -0
  667. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_capabilities.py +0 -0
  668. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_catalog.py +0 -0
  669. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_catalogbundle.py +0 -0
  670. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_chat.py +0 -0
  671. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_check_anchors.py +0 -0
  672. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_check_dco.py +0 -0
  673. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_check_licenses.py +0 -0
  674. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_check_reproducible.py +0 -0
  675. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_claude_settings.py +0 -0
  676. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_clean_internal_cache.py +0 -0
  677. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_cliparse.py +0 -0
  678. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_codeql_analysis_key.py +0 -0
  679. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_command_reference_fresh.py +0 -0
  680. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_community_health_files.py +0 -0
  681. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_compact.py +0 -0
  682. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_complete.py +0 -0
  683. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_complete_rc_block.py +0 -0
  684. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_config.py +0 -0
  685. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_content_dedupe.py +0 -0
  686. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_content_identity.py +0 -0
  687. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_crash_redaction.py +0 -0
  688. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dedup_trust.py +0 -0
  689. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_demo_index.py +0 -0
  690. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense.py +0 -0
  691. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_embed_dedupe.py +0 -0
  692. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_entry_reuse.py +0 -0
  693. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_fallback.py +0 -0
  694. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_fix_hint.py +0 -0
  695. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_progress.py +0 -0
  696. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_quantized.py +0 -0
  697. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_ready_order.py +0 -0
  698. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_shard_real_schema.py +0 -0
  699. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  700. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_shards.py +0 -0
  701. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_status.py +0 -0
  702. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dense_status_cheap.py +0 -0
  703. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_dependabot_config.py +0 -0
  704. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_docs_pages_linked.py +0 -0
  705. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_docsite_chrome.py +0 -0
  706. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_ed25519.py +0 -0
  707. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_embed.py +0 -0
  708. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_embed_local.py +0 -0
  709. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_embed_truncated_response.py +0 -0
  710. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_entry_key.py +0 -0
  711. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_errors_and_cli_table.py +0 -0
  712. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_eval_baseline.py +0 -0
  713. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_eval_corpus.py +0 -0
  714. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_eval_faithfulness.py +0 -0
  715. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_eval_gate.py +0 -0
  716. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_eval_grading.py +0 -0
  717. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_eval_metrics.py +0 -0
  718. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_eval_stats_summary.py +0 -0
  719. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_eval_tools.py +0 -0
  720. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  721. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_faithfulness.py +0 -0
  722. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_frontmatter.py +0 -0
  723. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_fuzz_targets.py +0 -0
  724. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  725. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_gitleaks_config.py +0 -0
  726. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_gitutil.py +0 -0
  727. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_gitutil_lfs.py +0 -0
  728. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_gitutil_sparse.py +0 -0
  729. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_hook_settings_hosts.py +0 -0
  730. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_hookhost.py +0 -0
  731. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_imperative.py +0 -0
  732. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_import_budget.py +0 -0
  733. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_injectscan.py +0 -0
  734. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_install_permission_error.py +0 -0
  735. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_installscan.py +0 -0
  736. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_integrity.py +0 -0
  737. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_journal.py +0 -0
  738. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_langchain_packaging.py +0 -0
  739. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_link_ownership.py +0 -0
  740. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_localembed.py +0 -0
  741. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_localembed_e2e.py +0 -0
  742. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_lockfile.py +0 -0
  743. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_logs.py +0 -0
  744. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_marketing_counts.py +0 -0
  745. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_mcp.py +0 -0
  746. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_mcp_install_scan.py +0 -0
  747. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_mcp_read.py +0 -0
  748. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_mcpdecl.py +0 -0
  749. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_mcphost.py +0 -0
  750. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_measure_registry.py +0 -0
  751. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_minisign.py +0 -0
  752. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_mutation_hardening.py +0 -0
  753. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_mutation_shards.py +0 -0
  754. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_mutation_subfile_shards.py +0 -0
  755. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_mutmut_source_paths.py +0 -0
  756. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_nethttp.py +0 -0
  757. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_normalize_sdist.py +0 -0
  758. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_output.py +0 -0
  759. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_page_budget.py +0 -0
  760. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_paths.py +0 -0
  761. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_perf_gate.py +0 -0
  762. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_pkg_confusions.py +0 -0
  763. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_pkg_injection.py +0 -0
  764. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_pkg_secrets.py +0 -0
  765. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_platform_pins.py +0 -0
  766. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_policy.py +0 -0
  767. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_post_deploy_smoke.py +0 -0
  768. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_project_mcp_sidecar.py +0 -0
  769. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_projectlock.py +0 -0
  770. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_provenance.py +0 -0
  771. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_publish_golden_dataset.py +0 -0
  772. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_rag.py +0 -0
  773. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_rag_fastpath.py +0 -0
  774. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_rag_fusion.py +0 -0
  775. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_registries_fresh.py +0 -0
  776. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_registry.py +0 -0
  777. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_registry_categories.py +0 -0
  778. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_registry_control_chars.py +0 -0
  779. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_registry_parallel.py +0 -0
  780. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_release_guard.py +0 -0
  781. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_release_preflight.py +0 -0
  782. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_required_checks.py +0 -0
  783. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_rerank_cache.py +0 -0
  784. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_resolve.py +0 -0
  785. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_roadmap_fresh.py +0 -0
  786. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_rules.py +0 -0
  787. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_scale_corpus.py +0 -0
  788. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_scopes.py +0 -0
  789. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_secretscan.py +0 -0
  790. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_selfupdate.py +0 -0
  791. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_serve.py +0 -0
  792. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_serve_docs.py +0 -0
  793. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_shard_plan.py +0 -0
  794. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_shards.py +0 -0
  795. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_shards_incremental.py +0 -0
  796. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_shards_matrix.py +0 -0
  797. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_smoke_covers_every_command.py +0 -0
  798. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_spdx_headers.py +0 -0
  799. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_spin.py +0 -0
  800. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_stackprobe.py +0 -0
  801. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_staleness.py +0 -0
  802. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_store.py +0 -0
  803. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_store_materialize.py +0 -0
  804. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_sync_blocked_links.py +0 -0
  805. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  806. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_tap_pins.py +0 -0
  807. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_token_parity.py +0 -0
  808. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_toolchain_lock.py +0 -0
  809. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_trustaudit.py +0 -0
  810. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_typosquat.py +0 -0
  811. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_updatediff.py +0 -0
  812. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_util.py +0 -0
  813. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_version.py +0 -0
  814. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_version_tags.py +0 -0
  815. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_vex.py +0 -0
  816. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_visual_harness_flags.py +0 -0
  817. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_workflow_concurrency.py +0 -0
  818. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  819. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  820. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_workflow_timeouts.py +0 -0
  821. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_workflows.py +0 -0
  822. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  823. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/visual/a11y_check.mjs +0 -0
  824. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/visual/console_check.mjs +0 -0
  825. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/visual/package-lock.json +0 -0
  826. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/visual/package.json +0 -0
  827. {boost_skill_cli-1.2.57 → boost_skill_cli-1.2.59}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.57
3
+ Version: 1.2.59
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.57'
22
- __version_tuple__ = version_tuple = (1, 2, 57)
21
+ __version__ = version = '1.2.59'
22
+ __version_tuple__ = version_tuple = (1, 2, 59)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -24,6 +24,7 @@ from ..core import (
24
24
  agents,
25
25
  ai,
26
26
  catalog,
27
+ claude_settings,
27
28
  complete,
28
29
  frontmatter,
29
30
  gitutil,
@@ -549,6 +550,20 @@ def cmd_doctor(argv):
549
550
  "left alone; yours to remove or repair"
550
551
  % (len(foreign), _s(len(foreign))))
551
552
 
553
+ others = claude_settings.foreign_hooks("global")
554
+ if others:
555
+ # `out.info`, not `bad`, for the same reason as the foreign symlinks
556
+ # above: boost did not write these and will never remove them, so
557
+ # counting them would leave doctor permanently red on something no
558
+ # boost command can clear. Naming them is still worth a line — at
559
+ # 130k stars gstack is now a likely second writer of this exact file,
560
+ # and a user debugging a hook needs to know boost is not the only one
561
+ # in it.
562
+ events = sorted({h["event"] for h in others})
563
+ out.info("%d hook%s in ~/.claude/settings.json not managed by boost "
564
+ "(%s) — left alone; `boost hooks` only touches its own"
565
+ % (len(others), _s(len(others)), ", ".join(events)), wrap=True)
566
+
552
567
  for dup in store.duplicate_discovery():
553
568
  # An agent that reads the canonical store natively, holding its own
554
569
  # entry for a skill that store already carries. Boost did not put it
@@ -200,6 +200,42 @@ def has_hook(scope: str, event: str, name: str,
200
200
  return False
201
201
 
202
202
 
203
+ def foreign_hooks(scope: str | None = None,
204
+ project_dir: Path | None = None,
205
+ host: str = hookhost.CLAUDE) -> list[dict]:
206
+ """Hooks in this host's settings that boost does not own.
207
+
208
+ The complement of :func:`list_hooks`, which skips every entry without the
209
+ `# boost:` marker — so boost could write this file for years and never be
210
+ able to say who else was writing it. That matters now that a settings.json
211
+ routinely has more than one writer: `garrytan/gstack`'s `./setup` registers
212
+ its own Stop hooks here and prunes "dead gstack entries" on every run, and
213
+ boost prunes its own by marker. The two namespaces are disjoint and
214
+ `tests/unit/test_gstack_coexistence.py` pins that they stay that way.
215
+
216
+ This exists so `boost doctor` can *report* the other tenant rather than
217
+ discover it by deleting something. Nothing here writes: a foreign hook is
218
+ not a boost problem to fix, it is context for a user reading a health
219
+ check — which is why doctor counts it with `out.info` rather than raising
220
+ the issue count.
221
+ """
222
+ scopes = (scope,) if scope else SCOPES
223
+ rows: list[dict] = []
224
+ for sc in scopes:
225
+ data = load(sc, project_dir, host)
226
+ for event, blocks in (data.get("hooks") or {}).items():
227
+ for block in blocks or []:
228
+ if not isinstance(block, dict):
229
+ continue
230
+ for h in block.get("hooks") or []:
231
+ raw = str(h.get("command", ""))
232
+ if _hook_name(raw) is not None:
233
+ continue # ours
234
+ rows.append({"scope": sc, "event": event, "command": raw,
235
+ "matcher": block.get("matcher", "")})
236
+ return rows
237
+
238
+
203
239
  def list_hooks(scope: str | None = None,
204
240
  project_dir: Path | None = None,
205
241
  host: str = hookhost.CLAUDE) -> list[dict]:
@@ -131,6 +131,31 @@ def load_registry_catalog() -> list:
131
131
  return data.get("registries", [])
132
132
 
133
133
 
134
+ def self_installing_command(tap: str) -> str | None:
135
+ """The repo's own install command, when boost must not copy its items.
136
+
137
+ Some registries are real catalogues of Markdown and some are programs that
138
+ happen to ship Markdown entry points. For the second kind boost's install —
139
+ copy the item's directory into the canonical store, symlink it out — yields
140
+ a skill that *looks* installed and cannot run, because the step that makes
141
+ it work is the repo's own build, not a fetch. Returns the upstream command
142
+ so the caller can name it instead of pretending; None for every other tap.
143
+
144
+ The tap may be addressed by full ``owner/repo`` or by the bare repo name a
145
+ clone directory carries, so both resolve.
146
+ """
147
+ if not tap:
148
+ return None
149
+ for row in load_registry_catalog():
150
+ cmd = row.get("self_installing")
151
+ if not cmd:
152
+ continue
153
+ name = row.get("name") or ""
154
+ if tap in (name, name.split("/")[-1]):
155
+ return cmd
156
+ return None
157
+
158
+
134
159
  def _merge(base: dict, override: dict) -> dict:
135
160
  out = deepcopy(base)
136
161
  # `or {}`: the only caller feeds this json.loads() of config.json, so a file
@@ -17,6 +17,7 @@ from pathlib import Path
17
17
  from ..errors import BoostError
18
18
  from . import (
19
19
  agents,
20
+ config,
20
21
  gitutil,
21
22
  journal,
22
23
  lockfile,
@@ -489,6 +490,24 @@ def _require_project_base(scope: str, base, what: str) -> Path | None:
489
490
  return resolved
490
491
 
491
492
 
493
+ def _refuse_self_installing(entry: dict) -> None:
494
+ """Refuse to half-copy an item whose repo installs itself.
495
+
496
+ Checked before the kind dispatch because the property belongs to the repo,
497
+ not the item: every kind it ships has the same missing build step. Naming
498
+ the upstream command is the whole point — a refusal that only says "no"
499
+ leaves the user exactly where `boost install` pretending would have.
500
+ """
501
+ cmd = config.self_installing_command(entry.get("tap") or "")
502
+ if not cmd:
503
+ return
504
+ raise BoostError(
505
+ "%s comes from %s, which installs itself — boost would copy its "
506
+ "Markdown and leave a skill that cannot run"
507
+ % (entry.get("name", "?"), entry.get("tap", "?")),
508
+ hint="run the registry's own installer: %s" % cmd)
509
+
510
+
492
511
  def install(entry: dict, force: bool = False,
493
512
  only_agents: list[str] | None = None,
494
513
  scope: str = "user", base=None) -> InstallResult:
@@ -499,6 +518,7 @@ def install(entry: dict, force: bool = False,
499
518
  current repo). Every kind honors it.
500
519
  """
501
520
  scopes.check_scope(scope)
521
+ _refuse_self_installing(entry)
502
522
  kind = entry.get("kind", "skill")
503
523
  if kind == "rule":
504
524
  return _install_rule(entry, force=force, only_agents=only_agents,
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "generated_note": "Curated skill/rule/workflow registries for boost. est_items are research estimates; verify by tapping. list_only repos are index/awesome lists that link out.",
3
- "count": 486,
4
- "est_items_total": 34840,
5
- "est_items_scannable": 30419,
3
+ "count": 487,
4
+ "est_items_total": 34901,
5
+ "est_items_scannable": 30480,
6
6
  "registries": [
7
7
  {
8
8
  "name": "Aaronontheweb/dotnet-cursor-rules",
@@ -1621,6 +1621,18 @@
1621
1621
  "list_only": false,
1622
1622
  "curated": true
1623
1623
  },
1624
+ {
1625
+ "name": "garrytan/gstack",
1626
+ "url": "https://github.com/garrytan/gstack",
1627
+ "type": "skill",
1628
+ "category": "workflow",
1629
+ "focus": "Sprint-workflow slash commands \u2014 /ship, /qa, /review, /plan-*, /retro, /office-hours \u2014 self-installing across ten coding agents",
1630
+ "est_items": 61,
1631
+ "confidence": "high",
1632
+ "list_only": false,
1633
+ "curated": true,
1634
+ "self_installing": "git clone --single-branch --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup"
1635
+ },
1624
1636
  {
1625
1637
  "name": "GDvega/super-android-kotlin-firebase-skill",
1626
1638
  "url": "https://github.com/GDvega/super-android-kotlin-firebase-skill",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.57
3
+ Version: 1.2.59
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -658,6 +658,7 @@ tests/unit/test_aihost.py
658
658
  tests/unit/test_bmad_core.py
659
659
  tests/unit/test_boost_first_offer.py
660
660
  tests/unit/test_bootstrap.py
661
+ tests/unit/test_bot_pr_dco.py
661
662
  tests/unit/test_branch_current.py
662
663
  tests/unit/test_browse.py
663
664
  tests/unit/test_builtin.py
@@ -723,6 +724,7 @@ tests/unit/test_gitleaks_config.py
723
724
  tests/unit/test_gitutil.py
724
725
  tests/unit/test_gitutil_lfs.py
725
726
  tests/unit/test_gitutil_sparse.py
727
+ tests/unit/test_gstack_coexistence.py
726
728
  tests/unit/test_hook_settings_hosts.py
727
729
  tests/unit/test_hookhost.py
728
730
  tests/unit/test_imperative.py
@@ -2,22 +2,24 @@
2
2
  id: gstack-tap-first-then-coexistence
3
3
  board: code
4
4
  section: compat
5
- status: planned
5
+ status: shipped
6
6
  category: Interop · Registry
7
7
  complexity: M
8
8
  impact: Med
9
9
  wow: 3
10
10
  note: 130k stars of SKILL.md that boost can index today, and a second installer writing into the same dotdirs
11
11
  order: 106
12
- owner:
12
+ owner: feat/gstack-registry
13
13
  pr:
14
14
  title: <code>garrytan/gstack</code> &mdash; tap it first, then learn to coexist with it
15
15
  ---
16
16
  <a href="https://github.com/garrytan/gstack">garrytan/gstack</a> is the largest thing in
17
17
  boost's domain that boost has never heard of: <b>130,344 stars, 19,602 forks</b>, MIT, created
18
- 2026-03-11 and pushed the same day this was written. It ships roughly 35 slash-command skills
18
+ 2026-03-11 and pushed the same day this was written. It ships <b>61 measured items</b> &mdash; the repo
19
+ <em>description</em> advertises 23 and its README lists ~35, and
20
+ <code>scripts/measure_registry.py</code> over a sparse clone of <code>07b59e39</code> counts 61
19
21
  &mdash; <code>/review</code>, <code>/ship</code>, <code>/qa</code>, <code>/cso</code>,
20
- <code>/autoplan</code>, <code>/office-hours</code> &mdash; each as a
22
+ <code>/autoplan</code>, <code>/office-hours</code> among them, each as a
21
23
  <code>&lt;name&gt;/SKILL.md</code> directory at the repo root, which is <em>exactly</em> the
22
24
  layout <code>catalog.scan_dir</code> already indexes. Nothing needs building for boost to
23
25
  catalogue it.
@@ -53,12 +55,16 @@ Boost should not own bun, Chromium, or someone else's upgrade channel.
53
55
  into the same places boost does, and at 130k stars it is now the likeliest other tenant on a
54
56
  user's machine:
55
57
 
56
- <b>The canonical store.</b> Repo-local gstack installs land at
57
- <code>.agents/skills/gstack</code> &mdash; the same path boost treats as its single source of
58
- truth. <code>store.duplicate_discovery()</code> is already <em>topology, not ownership</em>, for
59
- exactly this reason, and <code>heal --prune-duplicates</code> must keep proving it: gstack's
60
- directories are real directories and its per-host copies are its own, so neither may ever be
61
- swept as "boost's stale links".
58
+ <b>The canonical store.</b> <b>Corrected on implementation:</b> this card claimed repo-local
59
+ gstack installs land at <code>.agents/skills/gstack</code>. They do not &mdash; gstack's README
60
+ installs to <code>~/.claude/skills/gstack</code>, a <em>real directory</em> inside a linking
61
+ agent's skills dir, and the team install bootstraps <code>.claude/</code> rather than
62
+ <code>.agents/</code>. The hazard is real either way and lands one path over:
63
+ <code>store.duplicate_discovery()</code> is already <em>topology, not ownership</em>, and
64
+ <code>sync_plan</code>'s stale-link sweep asks <code>is_symlink()</code> before anything else, so
65
+ gstack's real directories are never candidates. Neither had a test saying so, and the cost of
66
+ being wrong is an 8&nbsp;MB working install of someone else's program deleted as "boost's stale
67
+ links".
62
68
 
63
69
  <b>Host dotdirs boost does not target.</b> gstack installs to
64
70
  <code>~/.codex/skills/gstack-*</code>, <code>~/.config/opencode/skills/gstack-*</code>,
@@ -7,7 +7,7 @@ category: Tech-debt
7
7
  complexity: S
8
8
  impact: Low
9
9
  wow: 1
10
- note: blocked on ragas shipping a release after 0.4.3 — check before starting
10
+ note: still blocked — re-checked 2026-08-30, PyPI's newest ragas is still 0.4.3
11
11
  order: 97
12
12
  title: unpin the <code>[eval]</code> langchain stack when ragas ships its fix
13
13
  ---
@@ -27,6 +27,11 @@ pins, and adapt <code>scripts/eval_explain.py</code> if the 0.4 scoring API move
27
27
  <code>test_eval_faithfulness.py</code> stubs in the unit suite). The <code>eval-explain</code> workflow is
28
28
  the live proof — it must stay green with real keys.
29
29
 
30
+ <b>Re-checked 2026-08-30.</b> <code>pip index versions ragas</code> still reports
31
+ <code>0.4.3</code> as the newest release, so nothing has changed and this card is still not
32
+ claimable. Recorded here rather than left implicit: a card that says "check before starting"
33
+ gives a reader no way to tell a check that came back negative from a check nobody ran.
34
+
30
35
  <b>Why it stays its own card.</b> The shipped integration card documents the block but will not be
31
36
  re-read; an unpin nobody remembers is how a workaround pin outlives its reason by years. This card
32
37
  is the reminder, and it is deliberately not claimable until the upstream release exists.
@@ -2,13 +2,13 @@
2
2
  id: tool-call-eval-tier
3
3
  board: code
4
4
  section: planned
5
- status: inflight
5
+ status: planned
6
6
  category: Quality · Eval
7
7
  complexity: L
8
8
  impact: High
9
9
  wow: 4
10
- note: boost floors four retrieval metrics and measures whether an agent ever calls the tools zero times
11
- owner: feat/tool-call-eval
10
+ note: Claude Code arm shipped in #616; the second host arm is unwritten and the card stays open for it
11
+ owner:
12
12
  order: 96
13
13
  title: a Tier 3 eval for tool-call behaviour, floored in <b>both</b> directions
14
14
  ---
@@ -61,6 +61,23 @@ N runs per prompt with an interval rather than a single pass/fail, the way
61
61
  <code>golden-set-statistical-power</code> established for retrieval — a one-shot replay cannot tell
62
62
  a wording regression from a sampling wobble.
63
63
 
64
+ <b>Where this stands (2026-08-30).</b> The Claude Code arm shipped in #616:
65
+ <code>scripts/eval_tools.py</code>, a 16-prompt set halved into should-call and should-NOT-call,
66
+ Wilson intervals over N runs, and a verdict that floors call rate <em>and</em> ceilings false
67
+ calls. Its first real run measured <b>3/3 false calls</b> &mdash; boost's tools fired on "What is
68
+ the difference between a Python list and a tuple?", which the shipped skip list excuses by name.
69
+ Call rate alone would have scored that a perfect 1.00, which is the whole argument for flooring
70
+ both directions, now with a number behind it.
71
+
72
+ <b>The card stays open because "per host, never averaged" is the binding requirement and only one
73
+ host has been driven.</b> Gemini CLI is not installed on the machine this was built on, and its
74
+ successor Antigravity CLI (<code>agy</code>, which boost already supports as its fifth agent
75
+ target and which has boost registered) cannot be driven from a sandbox: it starts a local
76
+ language server and dies on <code>listen tcp 127.0.0.1:0: bind: operation not permitted</code>.
77
+ Shipping an arm for a host nobody drove would put a number next to a measurement that never
78
+ happened &mdash; the exact unfalsifiable claim this tier exists to retire. The <code>owner</code>
79
+ is cleared rather than left on a merged branch, so the second arm is claimable.
80
+
64
81
  <b>What it unlocks.</b> The first honest answer to "did that description edit help", a baseline the
65
82
  next surface change can regress against, and a way to retire claims that survive only because
66
83
  nobody can check them.
@@ -814,7 +814,7 @@ an oversight.</p></details>
814
814
  </article>
815
815
 
816
816
  <article class="cap rcard" id="tool-call-eval-tier">
817
- <div class="head"><span class="pill inflight">In flight</span><span class="cat">Quality · Eval</span></div>
817
+ <div class="head"><span class="pill planned">Planned</span><span class="cat">Quality · Eval</span></div>
818
818
  <h3>a Tier 3 eval for tool-call behaviour, floored in <b>both</b> directions</h3>
819
819
  <p>boost's required gate floors <b>four</b> retrieval metrics — recall@k &ge; 0.78, hit@1 &ge; 0.40,
820
820
  MRR &ge; 0.52, nDCG@k &ge; 0.58 — over a 91-query golden set and a 10,152-entry corpus, every
@@ -865,6 +865,23 @@ N runs per prompt with an interval rather than a single pass/fail, the way
865
865
  <code>golden-set-statistical-power</code> established for retrieval — a one-shot replay cannot tell
866
866
  a wording regression from a sampling wobble.
867
867
 
868
+ <b>Where this stands (2026-08-30).</b> The Claude Code arm shipped in #616:
869
+ <code>scripts/eval_tools.py</code>, a 16-prompt set halved into should-call and should-NOT-call,
870
+ Wilson intervals over N runs, and a verdict that floors call rate <em>and</em> ceilings false
871
+ calls. Its first real run measured <b>3/3 false calls</b> &mdash; boost's tools fired on "What is
872
+ the difference between a Python list and a tuple?", which the shipped skip list excuses by name.
873
+ Call rate alone would have scored that a perfect 1.00, which is the whole argument for flooring
874
+ both directions, now with a number behind it.
875
+
876
+ <b>The card stays open because "per host, never averaged" is the binding requirement and only one
877
+ host has been driven.</b> Gemini CLI is not installed on the machine this was built on, and its
878
+ successor Antigravity CLI (<code>agy</code>, which boost already supports as its fifth agent
879
+ target and which has boost registered) cannot be driven from a sandbox: it starts a local
880
+ language server and dies on <code>listen tcp 127.0.0.1:0: bind: operation not permitted</code>.
881
+ Shipping an arm for a host nobody drove would put a number next to a measurement that never
882
+ happened &mdash; the exact unfalsifiable claim this tier exists to retire. The <code>owner</code>
883
+ is cleared rather than left on a merged branch, so the second arm is claimable.
884
+
868
885
  <b>What it unlocks.</b> The first honest answer to "did that description edit help", a baseline the
869
886
  next surface change can regress against, and a way to retire claims that survive only because
870
887
  nobody can check them.</p>
@@ -872,7 +889,7 @@ nobody can check them.</p>
872
889
  <span class="m">Complexity <b>L</b></span>
873
890
  <span class="m hi">Impact <b>High</b></span>
874
891
  <span class="m">Wow <b class="wow">★★★★</b></span>
875
- <span class="m">boost floors four retrieval metrics and measures whether an agent ever calls the tools zero times</span>
892
+ <span class="m">Claude Code arm shipped in</span>
876
893
  </div>
877
894
  </article>
878
895
 
@@ -895,6 +912,11 @@ pins, and adapt <code>scripts/eval_explain.py</code> if the 0.4 scoring API move
895
912
  <code>test_eval_faithfulness.py</code> stubs in the unit suite). The <code>eval-explain</code> workflow is
896
913
  the live proof — it must stay green with real keys.
897
914
 
915
+ <b>Re-checked 2026-08-30.</b> <code>pip index versions ragas</code> still reports
916
+ <code>0.4.3</code> as the newest release, so nothing has changed and this card is still not
917
+ claimable. Recorded here rather than left implicit: a card that says "check before starting"
918
+ gives a reader no way to tell a check that came back negative from a check nobody ran.
919
+
898
920
  <b>Why it stays its own card.</b> The shipped integration card documents the block but will not be
899
921
  re-read; an unpin nobody remembers is how a workaround pin outlives its reason by years. This card
900
922
  is the reminder, and it is deliberately not claimable until the upstream release exists.</p>
@@ -902,7 +924,7 @@ is the reminder, and it is deliberately not claimable until the upstream release
902
924
  <span class="m">Complexity <b>S</b></span>
903
925
  <span class="m">Impact <b>Low</b></span>
904
926
  <span class="m">Wow <b class="wow">★</b></span>
905
- <span class="m">blocked on ragas shipping a release after 0.4.3 — check before starting</span>
927
+ <span class="m">still blocked — re-checked 2026-08-30, PyPI's newest ragas is still 0.4.3</span>
906
928
  </div>
907
929
  </article>
908
930
 
@@ -11844,13 +11866,16 @@ about 4.7&times; by sampling and then re-ranked by a filter the report never men
11844
11866
  </article>
11845
11867
 
11846
11868
  <article class="cap rcard" id="gstack-tap-first-then-coexistence">
11847
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Interop · Registry</span></div>
11869
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Interop · Registry</span></div>
11848
11870
  <h3><code>garrytan/gstack</code> &mdash; tap it first, then learn to coexist with it</h3>
11871
+ <details class="cardbody"><summary>Write-up</summary>
11849
11872
  <p><a href="https://github.com/garrytan/gstack">garrytan/gstack</a> is the largest thing in
11850
11873
  boost's domain that boost has never heard of: <b>130,344 stars, 19,602 forks</b>, MIT, created
11851
- 2026-03-11 and pushed the same day this was written. It ships roughly 35 slash-command skills
11874
+ 2026-03-11 and pushed the same day this was written. It ships <b>61 measured items</b> &mdash; the repo
11875
+ <em>description</em> advertises 23 and its README lists ~35, and
11876
+ <code>scripts/measure_registry.py</code> over a sparse clone of <code>07b59e39</code> counts 61
11852
11877
  &mdash; <code>/review</code>, <code>/ship</code>, <code>/qa</code>, <code>/cso</code>,
11853
- <code>/autoplan</code>, <code>/office-hours</code> &mdash; each as a
11878
+ <code>/autoplan</code>, <code>/office-hours</code> among them, each as a
11854
11879
  <code>&lt;name&gt;/SKILL.md</code> directory at the repo root, which is <em>exactly</em> the
11855
11880
  layout <code>catalog.scan_dir</code> already indexes. Nothing needs building for boost to
11856
11881
  catalogue it.
@@ -11886,12 +11911,16 @@ Boost should not own bun, Chromium, or someone else's upgrade channel.
11886
11911
  into the same places boost does, and at 130k stars it is now the likeliest other tenant on a
11887
11912
  user's machine:
11888
11913
 
11889
- <b>The canonical store.</b> Repo-local gstack installs land at
11890
- <code>.agents/skills/gstack</code> &mdash; the same path boost treats as its single source of
11891
- truth. <code>store.duplicate_discovery()</code> is already <em>topology, not ownership</em>, for
11892
- exactly this reason, and <code>heal --prune-duplicates</code> must keep proving it: gstack's
11893
- directories are real directories and its per-host copies are its own, so neither may ever be
11894
- swept as "boost's stale links".
11914
+ <b>The canonical store.</b> <b>Corrected on implementation:</b> this card claimed repo-local
11915
+ gstack installs land at <code>.agents/skills/gstack</code>. They do not &mdash; gstack's README
11916
+ installs to <code>~/.claude/skills/gstack</code>, a <em>real directory</em> inside a linking
11917
+ agent's skills dir, and the team install bootstraps <code>.claude/</code> rather than
11918
+ <code>.agents/</code>. The hazard is real either way and lands one path over:
11919
+ <code>store.duplicate_discovery()</code> is already <em>topology, not ownership</em>, and
11920
+ <code>sync_plan</code>'s stale-link sweep asks <code>is_symlink()</code> before anything else, so
11921
+ gstack's real directories are never candidates. Neither had a test saying so, and the cost of
11922
+ being wrong is an 8&nbsp;MB working install of someone else's program deleted as "boost's stale
11923
+ links".
11895
11924
 
11896
11925
  <b>Host dotdirs boost does not target.</b> gstack installs to
11897
11926
  <code>~/.codex/skills/gstack-*</code>, <code>~/.config/opencode/skills/gstack-*</code>,
@@ -11912,7 +11941,7 @@ should be able to <em>see</em> a foreign hook block and report it without touchi
11912
11941
  <b>Deliberately out of scope:</b> vendoring gstack, re-implementing its skills, or having boost
11913
11942
  run <code>./setup</code>. The proposal is one registry row, one honest "self-installing" marker
11914
11943
  on the install path, and one coexistence test per hazard named above &mdash; scoped down on purpose,
11915
- because the fit is a catalogue fit, not an engine fit.</p>
11944
+ because the fit is a catalogue fit, not an engine fit.</p></details>
11916
11945
  <div class="meta">
11917
11946
  <span class="m">Complexity <b>M</b></span>
11918
11947
  <span class="m">Impact <b>Med</b></span>
@@ -69,6 +69,25 @@ RETIRED = {
69
69
  "fails the scheduled eval-scale gate on its pinned corpus",
70
70
  }
71
71
 
72
+ # Repos that ship their own installer and cannot be installed by copying
73
+ # Markdown. boost's install is "copy the item's directory into the canonical
74
+ # store and symlink it out"; for these the item is a thin entry point over a
75
+ # build step boost does not run — `garrytan/gstack`'s `./setup` renders a
76
+ # per-host variant from ten TypeScript configs and its `/browse` and `/qa`
77
+ # skills drive a real Chromium behind Bun. Copying the Markdown alone produces
78
+ # a skill that *looks* installed and cannot run, which is the failure mode
79
+ # `store.source_dir_for` and `gitutil.materialize` exist to prevent and that
80
+ # materializing cannot fix here: the missing step is `bun install`, not a
81
+ # fetch. So the catalogue carries the repo (it is real, and worth searching)
82
+ # and the value is the upstream command to run instead. boost does not own
83
+ # bun, Chromium, or someone else's upgrade channel.
84
+ SELF_INSTALLING = {
85
+ "garrytan/gstack":
86
+ "git clone --single-branch --depth 1 "
87
+ "https://github.com/garrytan/gstack.git ~/.claude/skills/gstack "
88
+ "&& cd ~/.claude/skills/gstack && ./setup",
89
+ }
90
+
72
91
  # --- skills (SKILL.md registries) -------------------------------------------
73
92
  SKILLS = [
74
93
  ("travisvn/awesome-claude-skills", "meta", "Curated awesome-list of Claude Skills, tools, and resources", 60, "high"),
@@ -497,6 +516,7 @@ SKILLS = [
497
516
  ("Cold-IQ/ColdIQ-s-GTM-Skills", "marketing", "Cold email sequences, ABM messaging, buying signals, list building and deliverability", 90, "high"),
498
517
  ("LeadMagic/gtm-skills", "marketing", "CRM setup and hygiene (Salesforce, HubSpot, Attio), enrichment, AI SDR, ABM and lifecycle", 206, "high"),
499
518
  ("NEON-Rutger/B2B-revops-skills", "marketing", "B2B RevOps: CRM migration, lead routing, deal desk, pipeline visibility, ICP and forecasting", 38, "high"),
519
+ ("garrytan/gstack", "workflow", "Sprint-workflow slash commands — /ship, /qa, /review, /plan-*, /retro, /office-hours — self-installing across ten coding agents", 61, "high"),
500
520
  ]
501
521
 
502
522
  # --- rules (Cursor .mdc / .cursorrules / Windsurf) --------------------------
@@ -649,6 +669,10 @@ def rows(pairs, typ):
649
669
  "confidence": conf,
650
670
  "list_only": name in LIST_ONLY,
651
671
  "curated": True,
672
+ # Only where set: adding a null to every row would rewrite the
673
+ # whole generated file to say nothing about 460 registries.
674
+ **({"self_installing": SELF_INSTALLING[name]}
675
+ if name in SELF_INSTALLING else {}),
652
676
  }
653
677
 
654
678
 
@@ -220,6 +220,46 @@ class TestDoctor:
220
220
  "run `boost reinstall gone`") in r.out
221
221
 
222
222
 
223
+
224
+ class TestDoctorSeesTheOtherTenant:
225
+ """boost is no longer the only writer of ~/.claude/settings.json.
226
+
227
+ `garrytan/gstack`'s `./setup` registers its own Stop hooks there and prunes
228
+ "dead gstack entries" on every run; boost prunes its own by the `# boost:`
229
+ marker. doctor must be able to *say* the other writer is present without
230
+ touching it — and must not count it, because boost will never remove it and
231
+ a health check that stays permanently red on something no command can clear
232
+ stops being read (the same rule as the foreign broken symlinks above it).
233
+ """
234
+
235
+ THEIRS = "~/.claude/skills/gstack/bin/gstack-timeline-stop"
236
+
237
+ def _write_foreign_hook(self):
238
+ from boost_cli.core import claude_settings as cs
239
+ cs.save("global", {"hooks": {"Stop": [
240
+ {"matcher": "*",
241
+ "hooks": [{"type": "command", "command": self.THEIRS}]}]}})
242
+
243
+ def test_doctor_reports_it_and_stays_green(self, boost, tapped):
244
+ self._write_foreign_hook()
245
+ r = boost("doctor") # the fixture asserts rc == 0
246
+ assert "not managed by boost" in r.out
247
+ assert "Stop" in r.out
248
+
249
+ def test_doctor_does_not_remove_it(self, boost, tapped):
250
+ from boost_cli.core import claude_settings as cs
251
+ self._write_foreign_hook()
252
+ boost("doctor")
253
+ blocks = cs.load("global")["hooks"]["Stop"]
254
+ assert blocks[0]["hooks"][0]["command"] == self.THEIRS
255
+
256
+ def test_a_clean_settings_file_says_nothing(self, boost, tapped):
257
+ # The line must be absent, not merely zero — doctor's output is read
258
+ # top to bottom and a "0 hooks not managed by boost" line is noise.
259
+ r = boost("doctor")
260
+ assert "not managed by boost" not in r.out
261
+
262
+
223
263
  # ── lint ─────────────────────────────────────────────────────────────────
224
264
 
225
265
  class TestLint: