boost-skill-cli 1.2.36__tar.gz → 1.2.37__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (797) hide show
  1. {boost_skill_cli-1.2.36/boost_skill_cli.egg-info → boost_skill_cli-1.2.37}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/cli.py +6 -1
  4. boost_skill_cli-1.2.37/boost_cli/cliparse.py +66 -0
  5. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/bmad.py +5 -1
  6. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/discovery.py +1 -1
  7. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/info.py +21 -8
  8. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/intelligence.py +6 -3
  9. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/team.py +15 -7
  10. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/output.py +45 -7
  11. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  12. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  13. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/commands.html +8 -8
  14. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/design-roadmap.html +16 -2
  15. boost_skill_cli-1.2.37/docs/roadmap/items/BOOST-D27.md +22 -0
  16. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_bmad.py +15 -0
  17. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_discovery.py +10 -0
  18. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_info.py +85 -0
  19. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_intelligence.py +21 -0
  20. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_team.py +41 -0
  21. boost_skill_cli-1.2.37/tests/unit/test_cliparse.py +92 -0
  22. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_errors_and_cli_table.py +21 -0
  23. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_output.py +113 -0
  24. boost_skill_cli-1.2.36/boost_cli/cliparse.py +0 -33
  25. boost_skill_cli-1.2.36/tests/unit/test_cliparse.py +0 -45
  26. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.gitattributes +0 -0
  27. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.gitignore +0 -0
  28. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.gitleaks.toml +0 -0
  29. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.htmlvalidate.json +0 -0
  30. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.lighthouserc.json +0 -0
  31. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.lycheeignore +0 -0
  32. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.markdownlint-cli2.jsonc +0 -0
  33. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.pre-commit-config.yaml +0 -0
  34. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.stylelintrc.json +0 -0
  35. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.vale/styles/boost/AIWriting.yml +0 -0
  36. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.vale/styles/boost/Terminology.yml +0 -0
  37. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  38. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/.vale.ini +0 -0
  39. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/CLAUDE.md +0 -0
  40. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/CODE_OF_CONDUCT.md +0 -0
  41. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/CONTRIBUTING.md +0 -0
  42. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/DCO +0 -0
  43. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/GOVERNANCE.md +0 -0
  44. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/LICENSE +0 -0
  45. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/MAINTAINERS.md +0 -0
  46. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/MANIFEST.in +0 -0
  47. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/Makefile +0 -0
  48. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/README.md +0 -0
  49. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/SECURITY.md +0 -0
  50. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/SUPPORT.md +0 -0
  51. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost +0 -0
  52. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/__init__.py +0 -0
  53. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/__main__.py +0 -0
  54. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/__init__.py +0 -0
  55. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/_common.py +0 -0
  56. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/configuration.py +0 -0
  57. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/hooks.py +0 -0
  58. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/pkg.py +0 -0
  59. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/quality.py +0 -0
  60. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/run.py +0 -0
  61. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/safety.py +0 -0
  62. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/commands/taps.py +0 -0
  63. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/__init__.py +0 -0
  64. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/adapters.py +0 -0
  65. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/agents.py +0 -0
  66. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/ai.py +0 -0
  67. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/bmad.py +0 -0
  68. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/bootstrap.py +0 -0
  69. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/browse.py +0 -0
  70. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/builtin.py +0 -0
  71. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/capabilities.py +0 -0
  72. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/catalog.py +0 -0
  73. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/catalogbundle.py +0 -0
  74. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/chat.py +0 -0
  75. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/claude_settings.py +0 -0
  76. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/complete.py +0 -0
  77. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/config.py +0 -0
  78. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/dense.py +0 -0
  79. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/ed25519.py +0 -0
  80. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/embed.py +0 -0
  81. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/faithfulness.py +0 -0
  82. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/frontmatter.py +0 -0
  83. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/gitutil.py +0 -0
  84. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/hookhost.py +0 -0
  85. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/imperative.py +0 -0
  86. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/injectscan.py +0 -0
  87. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/installscan.py +0 -0
  88. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/integrity.py +0 -0
  89. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/journal.py +0 -0
  90. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/localembed.py +0 -0
  91. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/lockfile.py +0 -0
  92. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/logs.py +0 -0
  93. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/mcp.py +0 -0
  94. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/mcpdecl.py +0 -0
  95. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/mcphost.py +0 -0
  96. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/minisign.py +0 -0
  97. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/nethttp.py +0 -0
  98. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/paths.py +0 -0
  99. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/policy.py +0 -0
  100. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/projectlock.py +0 -0
  101. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/provenance.py +0 -0
  102. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/rag.py +0 -0
  103. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/registry.py +0 -0
  104. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/resolve.py +0 -0
  105. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/rules.py +0 -0
  106. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/scopes.py +0 -0
  107. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/secretscan.py +0 -0
  108. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/selfupdate.py +0 -0
  109. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/serve.py +0 -0
  110. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/stackprobe.py +0 -0
  111. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/staleness.py +0 -0
  112. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/store.py +0 -0
  113. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/trustaudit.py +0 -0
  114. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/typosquat.py +0 -0
  115. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/updatediff.py +0 -0
  116. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/util.py +0 -0
  117. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/core/workflows.py +0 -0
  118. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/data/registries.json +0 -0
  119. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/data/rules/boost-first.mdc +0 -0
  120. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/errors.py +0 -0
  121. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_cli/spin.py +0 -0
  122. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/__init__.py +0 -0
  123. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/_compat.py +0 -0
  124. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/graph.py +0 -0
  125. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/loader.py +0 -0
  126. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/py.typed +0 -0
  127. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_langchain/retriever.py +0 -0
  128. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  129. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  130. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/requires.txt +0 -0
  131. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/boost_skill_cli.egg-info/top_level.txt +0 -0
  132. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/codecov.yml +0 -0
  133. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/.claude/settings.local.json +0 -0
  134. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/DEBUGGING.md +0 -0
  135. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/adapters.html +0 -0
  136. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/README.md +0 -0
  137. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/c4-components-core.md +0 -0
  138. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/c4-containers.md +0 -0
  139. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/c4-context.md +0 -0
  140. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/architecture/c4-dynamic-install.md +0 -0
  141. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/bmad.md +0 -0
  142. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/distill.gif +0 -0
  143. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/doctor.gif +0 -0
  144. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/explain.gif +0 -0
  145. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/hooks.gif +0 -0
  146. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/install.gif +0 -0
  147. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/pulse.gif +0 -0
  148. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/search.gif +0 -0
  149. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/gifs/tap.gif +0 -0
  150. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/distill.tape +0 -0
  151. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/doctor.tape +0 -0
  152. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/explain.tape +0 -0
  153. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/hooks.tape +0 -0
  154. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/install.tape +0 -0
  155. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/pulse.tape +0 -0
  156. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/search.tape +0 -0
  157. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel/tapes/tap.tape +0 -0
  158. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/carousel.html +0 -0
  159. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/chat.html +0 -0
  160. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/code-review.md +0 -0
  161. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/commit-audit.md +0 -0
  162. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/demo-index.json +0 -0
  163. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/demo.gif +0 -0
  164. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/demo.html +0 -0
  165. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/demo.tape +0 -0
  166. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/dependencies.md +0 -0
  167. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/eval-latest.json +0 -0
  168. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/eval.html +0 -0
  169. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/index.html +0 -0
  170. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/langchain.html +0 -0
  171. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/mcp-hub.html +0 -0
  172. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/openssf-badge.md +0 -0
  173. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/openssf-playbook.md +0 -0
  174. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/rag-architecture.md +0 -0
  175. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D01.md +0 -0
  176. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D02.md +0 -0
  177. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D03.md +0 -0
  178. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D04.md +0 -0
  179. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D05.md +0 -0
  180. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D06.md +0 -0
  181. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D07.md +0 -0
  182. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D08.md +0 -0
  183. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D09.md +0 -0
  184. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D10.md +0 -0
  185. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D11.md +0 -0
  186. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D12.md +0 -0
  187. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D13.md +0 -0
  188. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D14.md +0 -0
  189. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D15.md +0 -0
  190. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D16.md +0 -0
  191. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D17.md +0 -0
  192. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D18.md +0 -0
  193. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D19.md +0 -0
  194. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D20.md +0 -0
  195. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D21.md +0 -0
  196. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D22.md +0 -0
  197. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D23.md +0 -0
  198. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D24.md +0 -0
  199. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D25.md +0 -0
  200. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/BOOST-D26.md +0 -0
  201. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  202. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  203. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  204. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  205. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  206. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  207. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  208. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  209. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  210. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  211. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  212. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  213. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  214. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  215. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/boost-first-rule.md +0 -0
  216. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  217. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  218. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/branch-current-gate.md +0 -0
  219. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  220. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  221. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  222. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  223. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  224. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  225. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  226. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  227. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  228. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  229. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  230. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  231. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  232. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  233. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/cli-command-audit.md +0 -0
  234. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  235. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  236. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  237. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  238. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/command-carousel-page.md +0 -0
  239. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  240. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  241. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  242. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  243. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  244. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  245. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  246. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  247. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  248. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  249. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  250. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  251. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  252. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  253. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  254. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  255. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  256. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  257. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  258. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  259. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  260. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  261. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  262. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  263. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  264. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  265. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  266. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  267. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  268. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  269. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  270. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  271. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  272. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  273. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  274. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  275. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  276. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  277. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  278. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  279. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  280. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  281. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  282. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  283. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  284. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  285. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  286. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  287. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  288. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  289. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/github-community-health-files.md +0 -0
  290. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  291. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  292. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  293. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  294. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  295. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  296. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  297. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  298. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  299. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  300. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  301. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  302. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  303. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  304. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  305. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  306. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  307. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  308. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  309. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  310. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  311. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  312. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  313. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  314. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  315. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  316. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  317. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  318. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  319. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  320. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  321. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  322. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  323. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  324. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  325. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  326. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  327. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  328. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  329. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  330. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  331. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  332. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  333. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  334. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  335. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  336. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  337. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  338. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  339. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  340. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  341. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  342. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  343. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  344. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  345. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  346. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  347. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  348. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  349. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  350. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  351. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  352. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  353. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  354. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  355. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  356. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  357. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  358. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  359. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  360. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  361. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  362. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  363. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  364. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  365. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/openssf-playbook.md +0 -0
  366. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/openssf-silver.md +0 -0
  367. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  368. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  369. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  370. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  371. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  372. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  373. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  374. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  375. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  376. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  377. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  378. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  379. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  380. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  381. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  382. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  383. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  384. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  385. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  386. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  387. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  388. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  389. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  390. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  391. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  392. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  393. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  394. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  395. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  396. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  397. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  398. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  399. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  400. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  401. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  402. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  403. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  404. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  405. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  406. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  407. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  408. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  409. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  410. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  411. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  412. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  413. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  414. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  415. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  416. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  417. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  418. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  419. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  420. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  421. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  422. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  423. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  424. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  425. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  426. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  427. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  428. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  429. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  430. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  431. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  432. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  433. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  434. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  435. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  436. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  437. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  438. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  439. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  440. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  441. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  442. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  443. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  444. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  445. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  446. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  447. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  448. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  449. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  450. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  451. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  452. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  453. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  454. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  455. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  456. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  457. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  458. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  459. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  460. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  461. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  462. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  463. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  464. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  465. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  466. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  467. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  468. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  469. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  470. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  471. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  472. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  473. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  474. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  475. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  476. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  477. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/workspace-scope-install.md +0 -0
  478. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/zip-strict-audit.md +0 -0
  479. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  480. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  481. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/roadmap.html +0 -0
  482. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/security-design.md +0 -0
  483. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/semantic-search.md +0 -0
  484. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  485. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/verifying-releases.md +0 -0
  486. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/meta.md +0 -0
  487. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/openvex.json +0 -0
  488. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  489. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  490. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  491. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  492. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/eslint.config.mjs +0 -0
  493. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/README.md +0 -0
  494. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/__init__.py +0 -0
  495. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/baseline.json +0 -0
  496. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/faithfulness.py +0 -0
  497. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/golden_set.json +0 -0
  498. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/make_corpus.py +0 -0
  499. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/make_golden.py +0 -0
  500. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/metrics.py +0 -0
  501. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/publish_golden_dataset.py +0 -0
  502. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/evals/run_evals.py +0 -0
  503. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/examples/README.md +0 -0
  504. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/examples/adapt-demo.sh +0 -0
  505. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/examples/boost-run-prototype.sh +0 -0
  506. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/index.html +0 -0
  507. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/noxfile.py +0 -0
  508. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/pyproject.toml +0 -0
  509. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/coverage-tools.in +0 -0
  510. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/coverage-tools.txt +0 -0
  511. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/lint-tools.in +0 -0
  512. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/lint-tools.txt +0 -0
  513. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/mutation-tools.in +0 -0
  514. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/mutation-tools.txt +0 -0
  515. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/platform-pins.lock +0 -0
  516. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/release-tools.in +0 -0
  517. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/release-tools.txt +0 -0
  518. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/test-tools.in +0 -0
  519. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/requirements/test-tools.txt +0 -0
  520. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/a11y_check.py +0 -0
  521. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/add_spdx_headers.py +0 -0
  522. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/bench_cli.sh +0 -0
  523. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_command_reference.py +0 -0
  524. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_demo_index.py +0 -0
  525. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_registries.py +0 -0
  526. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_roadmap.py +0 -0
  527. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_scale_corpus.py +0 -0
  528. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/build_vex.py +0 -0
  529. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_anchors.py +0 -0
  530. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_branch_current.py +0 -0
  531. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_dco.py +0 -0
  532. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_licenses.py +0 -0
  533. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_reproducible.py +0 -0
  534. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/check_required_checks.py +0 -0
  535. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/ensure_eval_corpus.sh +0 -0
  536. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_corpus.py +0 -0
  537. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_explain.py +0 -0
  538. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_gate.py +0 -0
  539. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_recommend.py +0 -0
  540. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_retrieval.py +0 -0
  541. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/eval_stats_summary.py +0 -0
  542. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/import_budget.py +0 -0
  543. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/lock_toolchain.py +0 -0
  544. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/measure_registry.py +0 -0
  545. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/mutation_gate.py +0 -0
  546. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/mutation_shards.py +0 -0
  547. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/mutation_weights.json +0 -0
  548. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/normalize_sdist.py +0 -0
  549. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/page_budget.py +0 -0
  550. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/perf_gate.py +0 -0
  551. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/post_deploy_smoke.py +0 -0
  552. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/publish_eval_json.py +0 -0
  553. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/release_guard.py +0 -0
  554. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/release_preflight.py +0 -0
  555. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/scripts/serve_docs.py +0 -0
  556. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/setup.cfg +0 -0
  557. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/sonar-project.properties +0 -0
  558. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/style/README.md +0 -0
  559. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/style/boost.css +0 -0
  560. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/style/boost.js +0 -0
  561. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/style/demo.html +0 -0
  562. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/adapt.feature +0 -0
  563. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/browse.feature +0 -0
  564. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/count.feature +0 -0
  565. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/discover.feature +0 -0
  566. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/doctor.feature +0 -0
  567. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/environment.py +0 -0
  568. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/explain.feature +0 -0
  569. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/index.feature +0 -0
  570. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/install.feature +0 -0
  571. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/list.feature +0 -0
  572. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/mcp.feature +0 -0
  573. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/search.feature +0 -0
  574. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/steps/cli_steps.py +0 -0
  575. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/steps/discovery_steps.py +0 -0
  576. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/steps/mcp_steps.py +0 -0
  577. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/bdd/features/steps/quality_steps.py +0 -0
  578. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/conftest.py +0 -0
  579. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/baseline.json +0 -0
  580. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/explain.jsonl +0 -0
  581. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/golden-natural.jsonl +0 -0
  582. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/golden.jsonl +0 -0
  583. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/recommend.jsonl +0 -0
  584. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/taps-scale.txt +0 -0
  585. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/eval/taps.txt +0 -0
  586. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_capabilities_policy.py +0 -0
  587. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_adapt.py +0 -0
  588. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_catalog.py +0 -0
  589. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_chat.py +0 -0
  590. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_configuration.py +0 -0
  591. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_hooks.py +0 -0
  592. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_hooks_gemini.py +0 -0
  593. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_pane_width.py +0 -0
  594. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_pkg.py +0 -0
  595. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_quality.py +0 -0
  596. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_cli_taps.py +0 -0
  597. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_everyday_loop.py +0 -0
  598. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_integrity_enforce.py +0 -0
  599. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_kind_conformance.py +0 -0
  600. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_property_parsers.py +0 -0
  601. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_run.py +0 -0
  602. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_tap_signing.py +0 -0
  603. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/functional/test_workspace_scope.py +0 -0
  604. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/README.md +0 -0
  605. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  606. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  607. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  608. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  609. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  610. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  611. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  612. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  613. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  614. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  615. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  616. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  617. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  618. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  619. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  620. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  621. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  622. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  623. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  624. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  625. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  626. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  627. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  628. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/fuzz_frontmatter.py +0 -0
  629. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/fuzz/fuzz_registry.py +0 -0
  630. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/langchain/conftest.py +0 -0
  631. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/langchain/test_graph.py +0 -0
  632. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/langchain/test_loader.py +0 -0
  633. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/langchain/test_retriever.py +0 -0
  634. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/make_fixture.py +0 -0
  635. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/perf/test_benchmarks.py +0 -0
  636. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/smoke.sh +0 -0
  637. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_a11y_check.py +0 -0
  638. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_action_pin_lockstep.py +0 -0
  639. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_adapters.py +0 -0
  640. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_adapters_multi.py +0 -0
  641. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_adapters_runner.py +0 -0
  642. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_agents.py +0 -0
  643. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_ai.py +0 -0
  644. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_bmad_core.py +0 -0
  645. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_boost_first_offer.py +0 -0
  646. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_bootstrap.py +0 -0
  647. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_branch_current.py +0 -0
  648. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_browse.py +0 -0
  649. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_builtin.py +0 -0
  650. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_capabilities.py +0 -0
  651. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_catalog.py +0 -0
  652. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_catalogbundle.py +0 -0
  653. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_chat.py +0 -0
  654. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_check_anchors.py +0 -0
  655. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_check_dco.py +0 -0
  656. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_check_licenses.py +0 -0
  657. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_check_reproducible.py +0 -0
  658. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_claude_settings.py +0 -0
  659. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_clean_internal_cache.py +0 -0
  660. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_codeql_analysis_key.py +0 -0
  661. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_command_reference_fresh.py +0 -0
  662. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_community_health_files.py +0 -0
  663. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_compact.py +0 -0
  664. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_complete.py +0 -0
  665. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_complete_rc_block.py +0 -0
  666. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_config.py +0 -0
  667. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_content_dedupe.py +0 -0
  668. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_content_identity.py +0 -0
  669. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_crash_redaction.py +0 -0
  670. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dedup_trust.py +0 -0
  671. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_demo_index.py +0 -0
  672. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense.py +0 -0
  673. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_embed_dedupe.py +0 -0
  674. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_fallback.py +0 -0
  675. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_fix_hint.py +0 -0
  676. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_quantized.py +0 -0
  677. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_ready_order.py +0 -0
  678. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_shard_real_schema.py +0 -0
  679. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  680. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_shards.py +0 -0
  681. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_status.py +0 -0
  682. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dense_status_cheap.py +0 -0
  683. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_dependabot_config.py +0 -0
  684. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_docs_pages_linked.py +0 -0
  685. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_docsite_chrome.py +0 -0
  686. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_ed25519.py +0 -0
  687. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_embed.py +0 -0
  688. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_embed_local.py +0 -0
  689. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_embed_truncated_response.py +0 -0
  690. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_entry_key.py +0 -0
  691. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_baseline.py +0 -0
  692. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_corpus.py +0 -0
  693. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_faithfulness.py +0 -0
  694. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_gate.py +0 -0
  695. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_grading.py +0 -0
  696. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_metrics.py +0 -0
  697. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_eval_stats_summary.py +0 -0
  698. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  699. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_faithfulness.py +0 -0
  700. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_frontmatter.py +0 -0
  701. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_fuzz_targets.py +0 -0
  702. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  703. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gitleaks_config.py +0 -0
  704. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gitutil.py +0 -0
  705. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gitutil_lfs.py +0 -0
  706. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_gitutil_sparse.py +0 -0
  707. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_hook_settings_hosts.py +0 -0
  708. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_hookhost.py +0 -0
  709. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_imperative.py +0 -0
  710. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_import_budget.py +0 -0
  711. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_injectscan.py +0 -0
  712. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_install_permission_error.py +0 -0
  713. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_installscan.py +0 -0
  714. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_integrity.py +0 -0
  715. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_journal.py +0 -0
  716. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_langchain_packaging.py +0 -0
  717. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_link_ownership.py +0 -0
  718. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_localembed.py +0 -0
  719. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_localembed_e2e.py +0 -0
  720. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_lockfile.py +0 -0
  721. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_logs.py +0 -0
  722. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_marketing_counts.py +0 -0
  723. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mcp.py +0 -0
  724. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mcp_install_scan.py +0 -0
  725. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mcpdecl.py +0 -0
  726. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mcphost.py +0 -0
  727. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_measure_registry.py +0 -0
  728. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_minisign.py +0 -0
  729. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mutation_hardening.py +0 -0
  730. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mutation_shards.py +0 -0
  731. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mutation_subfile_shards.py +0 -0
  732. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_mutmut_source_paths.py +0 -0
  733. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_nethttp.py +0 -0
  734. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_normalize_sdist.py +0 -0
  735. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_page_budget.py +0 -0
  736. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_paths.py +0 -0
  737. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_perf_gate.py +0 -0
  738. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_pkg_confusions.py +0 -0
  739. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_pkg_injection.py +0 -0
  740. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_pkg_secrets.py +0 -0
  741. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_platform_pins.py +0 -0
  742. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_policy.py +0 -0
  743. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_post_deploy_smoke.py +0 -0
  744. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_project_mcp_sidecar.py +0 -0
  745. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_projectlock.py +0 -0
  746. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_provenance.py +0 -0
  747. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_publish_golden_dataset.py +0 -0
  748. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rag.py +0 -0
  749. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rag_fastpath.py +0 -0
  750. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rag_fusion.py +0 -0
  751. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_registries_fresh.py +0 -0
  752. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_registry.py +0 -0
  753. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_registry_categories.py +0 -0
  754. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_registry_control_chars.py +0 -0
  755. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_release_guard.py +0 -0
  756. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_release_preflight.py +0 -0
  757. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_required_checks.py +0 -0
  758. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rerank_cache.py +0 -0
  759. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_resolve.py +0 -0
  760. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_roadmap_fresh.py +0 -0
  761. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_rules.py +0 -0
  762. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_scale_corpus.py +0 -0
  763. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_scopes.py +0 -0
  764. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_secretscan.py +0 -0
  765. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_selfupdate.py +0 -0
  766. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_serve.py +0 -0
  767. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_serve_docs.py +0 -0
  768. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_shards_matrix.py +0 -0
  769. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_smoke_covers_every_command.py +0 -0
  770. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_spdx_headers.py +0 -0
  771. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_spin.py +0 -0
  772. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_stackprobe.py +0 -0
  773. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_staleness.py +0 -0
  774. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_store.py +0 -0
  775. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_store_materialize.py +0 -0
  776. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_sync_blocked_links.py +0 -0
  777. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  778. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_token_parity.py +0 -0
  779. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_toolchain_lock.py +0 -0
  780. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_trustaudit.py +0 -0
  781. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_typosquat.py +0 -0
  782. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_updatediff.py +0 -0
  783. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_util.py +0 -0
  784. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_version.py +0 -0
  785. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_vex.py +0 -0
  786. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_visual_harness_flags.py +0 -0
  787. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflow_concurrency.py +0 -0
  788. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  789. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  790. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflow_timeouts.py +0 -0
  791. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_workflows.py +0 -0
  792. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  793. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/visual/a11y_check.mjs +0 -0
  794. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/visual/console_check.mjs +0 -0
  795. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/visual/package-lock.json +0 -0
  796. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/tests/visual/package.json +0 -0
  797. {boost_skill_cli-1.2.36 → boost_skill_cli-1.2.37}/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.36
3
+ Version: 1.2.37
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.36'
22
- __version_tuple__ = version_tuple = (1, 2, 36)
21
+ __version__ = version = '1.2.37'
22
+ __version_tuple__ = version_tuple = (1, 2, 37)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -199,7 +199,12 @@ def print_help() -> None:
199
199
  else:
200
200
  print(head)
201
201
  for n, s in cmds:
202
- print(" " + out.c(n.ljust(width + 2), out.CYAN)
202
+ # accent, not a raw 16-color CYAN: every other command-name
203
+ # surface (search rows, info badges) resolves through this same
204
+ # semantic role, which is Aurora truecolor cyan with the correct
205
+ # 16-color/plain degradation — a raw CYAN here painted a visibly
206
+ # different cyan on any truecolor terminal.
207
+ print(" " + out.role(n.ljust(width + 2), "accent")
203
208
  + out.truncate(s, max(0, cols - width - 4)))
204
209
  print()
205
210
  print(out.c("%d commands · %d groups" % (len(COMMANDS), len(GROUPS)), out.DIM))
@@ -0,0 +1,66 @@
1
+ # Copyright the boost contributors.
2
+ # SPDX-License-Identifier: GPL-3.0-only
3
+ """A branded ArgumentParser.
4
+
5
+ Argparse's default failure output is a raw, unstyled ``usage:`` block with a
6
+ bare ``prog: error: …`` line — nothing like boost's branded top-level dispatch
7
+ (which routes through :func:`output.err` and offers a "did you mean"). This
8
+ subclass routes a parser's own errors through the same Aurora output layer, so
9
+ a wrong invocation looks as designed as a right one.
10
+
11
+ Adopt it via :func:`parser` in place of ``argparse.ArgumentParser``. Sub-parsers
12
+ created with ``add_subparsers()`` inherit this class automatically, so a single
13
+ top-level swap brands a command's whole tree.
14
+ """
15
+ from __future__ import annotations
16
+
17
+ import argparse
18
+ import sys
19
+
20
+ from .core import output as out
21
+
22
+
23
+ class _BoostHelpFormatter(argparse.HelpFormatter):
24
+ """Wraps help/description text the way :func:`output.wrap` does,
25
+ keeping a backtick-quoted command atomic instead of splitting it across
26
+ lines — the same rule every other long line in this CLI follows.
27
+
28
+ argparse's own ``HelpFormatter`` wraps with plain ``textwrap``, which
29
+ knows nothing about a backtick span (``doctor``/``search`` interpolate
30
+ hints ending in a pasteable ``pip install '...'``-style command; several
31
+ ``help=`` strings quote a ``boost`` invocation the same way) — so a
32
+ narrow terminal could split one across two lines, handing the user a
33
+ command that does not run. Only the two text-filling hooks are
34
+ overridden; ``_format_usage``'s own line-splitting already treats a
35
+ metavar as one atomic part and is left alone.
36
+ """
37
+
38
+ def _split_lines(self, text: str, width: int) -> list[str]:
39
+ text = self._whitespace_matcher.sub(" ", text).strip()
40
+ return out.wrap(text, width) or [text]
41
+
42
+ def _fill_text(self, text: str, width: int, indent: str) -> str:
43
+ text = self._whitespace_matcher.sub(" ", text).strip()
44
+ lines = out.wrap(text, max(width - len(indent), 1)) or [text]
45
+ return "\n".join(indent + ln for ln in lines)
46
+
47
+
48
+ class BoostArgumentParser(argparse.ArgumentParser):
49
+ def __init__(self, *args, **kwargs):
50
+ # add_subparsers() creates each sub-parser via type(self)(**kwargs)
51
+ # without forwarding formatter_class, so defaulting it here (rather
52
+ # than in parser() below) is what brands every subcommand's --help
53
+ # too, not just the top-level one.
54
+ kwargs.setdefault("formatter_class", _BoostHelpFormatter)
55
+ super().__init__(*args, **kwargs)
56
+
57
+ def error(self, message: str):
58
+ """Print a branded error + dimmed usage, then exit 2 (argparse's code)."""
59
+ out.err(message)
60
+ sys.stderr.write(out.c(self.format_usage(), out.DIM))
61
+ self.exit(2)
62
+
63
+
64
+ def parser(*args, **kwargs) -> BoostArgumentParser:
65
+ """Drop-in replacement for ``argparse.ArgumentParser(...)``."""
66
+ return BoostArgumentParser(*args, **kwargs)
@@ -78,7 +78,11 @@ def cmd_bmad(argv) -> int:
78
78
  p = cliparse.parser(
79
79
  prog="boost bmad",
80
80
  description="BMAD Method autopilot: personas, prompt routing, workflows")
81
- p.add_argument("action", choices=_ACTIONS, help=" | ".join(_ACTIONS))
81
+ # metavar="ACTION": the auto-generated {on,off,...,status} metavar (13
82
+ # entries) is one unbreakable token and overflowed the usage line up to
83
+ # 100 columns wide. The full list still shows in `help=` below.
84
+ p.add_argument("action", choices=_ACTIONS, metavar="ACTION",
85
+ help=" | ".join(_ACTIONS))
82
86
  p.add_argument("value", nargs="?",
83
87
  help="startup: on | off | status · route: the prompt to classify")
84
88
  p.add_argument("-s", "--scope", choices=("project", "global"), default=None,
@@ -1630,7 +1630,7 @@ def cmd_stats(argv):
1630
1630
  else:
1631
1631
  out.kv("latest", "%s %s" % (latest, out.role("(up to date)", "muted")))
1632
1632
  if upstream:
1633
- out.kv("upstream", upstream)
1633
+ out.kv("upstream", upstream, wrap=True)
1634
1634
  return 0
1635
1635
 
1636
1636
 
@@ -13,7 +13,6 @@ import re
13
13
  import shlex
14
14
  import subprocess
15
15
  import sys
16
- import textwrap
17
16
  import webbrowser
18
17
  from itertools import chain
19
18
  from pathlib import Path
@@ -197,9 +196,12 @@ def _mark(installed: bool) -> str:
197
196
 
198
197
 
199
198
  def _print_wrapped(text: str) -> None:
199
+ """Wrap prose to the *real* pane via out.wrap(), not a hardcoded width —
200
+ a fixed textwrap width=76 neither shrank for a narrow terminal nor grew
201
+ for a wide one, and did not know a backtick span must stay whole."""
200
202
  paras = [p for p in re.split(r"\n\s*\n", text.strip()) if p.strip()]
201
203
  for i, para in enumerate(paras):
202
- for line in textwrap.wrap(" ".join(para.split()), width=76):
204
+ for line in out.wrap(" ".join(para.split()), out.term_width() - 2):
203
205
  out.info(line)
204
206
  if i < len(paras) - 1:
205
207
  print()
@@ -471,10 +473,11 @@ def cmd_info(argv):
471
473
  if badges:
472
474
  out.info(" ".join(badges))
473
475
  if desc:
474
- lines = textwrap.wrap(desc, width=62)
475
- out.kv("description", lines[0])
476
- for ln in lines[1:]:
477
- print(" " * 16 + ln)
476
+ # kv's own wrap=True already folds to the real terminal width and
477
+ # aligns continuations under the value — the hand-rolled version this
478
+ # replaced hardcoded width=62 (a hand copy of kv's default 16-column
479
+ # lead against a fixed 78-column pane) and ignored COLUMNS entirely.
480
+ out.kv("description", desc, wrap=True)
478
481
  if lock:
479
482
  inst_v = str(lock.get("version", "?"))
480
483
  out.kv("version", inst_v)
@@ -630,9 +633,19 @@ def _render_markdown(body: str) -> None:
630
633
  continue
631
634
  m = re.match(r"^(\s*)[-*]\s+(.*)$", line)
632
635
  if m:
633
- print("%s • %s" % (m.group(1), _inline(m.group(2))))
636
+ prefix = "%s • " % m.group(1)
637
+ # Wrap the raw markdown first, THEN colorize each wrapped chunk —
638
+ # coloring before wrapping (the old behavior for the plain-prose
639
+ # branch below) would either split an inline `code` span or leave
640
+ # line 1's color code unterminated. A backtick span is one atomic
641
+ # token either way, via out.wrap().
642
+ wrapped = out.wrap(m.group(2), out.term_width() - len(prefix)) or [""]
643
+ for i, chunk in enumerate(wrapped):
644
+ lead = prefix if i == 0 else " " * len(prefix)
645
+ print(lead + _inline(chunk))
634
646
  continue
635
- print(_inline(line))
647
+ for chunk in out.wrap(line, out.term_width()) or [""]:
648
+ print(_inline(chunk))
636
649
 
637
650
 
638
651
  def cmd_preview(argv):
@@ -772,8 +772,10 @@ _CONTEXT_DEFAULT = {"enabled": False, "rules": []}
772
772
  def cmd_context(argv: list[str]) -> int:
773
773
  ap = cliparse.parser(
774
774
  prog="boost context", description="Branch-aware skill activation")
775
- sub = ap.add_subparsers(dest="action",
776
- metavar="status|enable|disable|map|unmap|apply")
775
+ # metavar="ACTION": the full "status|enable|disable|map|unmap|apply"
776
+ # spelling is one unbreakable token that overflowed the usage line at 60
777
+ # columns. Each subcommand still lists its own help= below.
778
+ sub = ap.add_subparsers(dest="action", metavar="ACTION")
777
779
  sp = sub.add_parser("status", help="show rules, enabled flag & branch")
778
780
  sp.add_argument("--json", action="store_true")
779
781
  sub.add_parser("enable", help="turn on branch-aware activation (runs apply)")
@@ -873,7 +875,8 @@ def _context_status(state: dict, as_json: bool) -> int:
873
875
  out.kv("branch", branch or "(not in a git repository)")
874
876
  rules = state.get("rules", [])
875
877
  if not rules:
876
- out.info("no rules — add one with `boost context map 'feature/*' skill1,skill2`")
878
+ out.info("no rules — add one with `boost context map 'feature/*' "
879
+ "skill1,skill2`", wrap=True)
877
880
  return 0
878
881
  rows = [(r.get("pattern", "?"), ", ".join(r.get("skills", [])),
879
882
  "*" if branch and fnmatch.fnmatch(branch, r.get("pattern", "")) else "")
@@ -128,7 +128,7 @@ def cmd_cohort(argv) -> int:
128
128
  raise BoostError("no cohort named %s" % args.name,
129
129
  hint="list cohorts with `boost cohort list`")
130
130
  if not targets:
131
- out.info("no cohorts defined")
131
+ print(out.empty_state("no cohorts defined"))
132
132
  return 0
133
133
  applied = skipped = 0
134
134
  for cname in targets:
@@ -174,8 +174,11 @@ def cmd_cohort(argv) -> int:
174
174
  print(json.dumps(data, indent=2))
175
175
  return 0
176
176
  if not rows:
177
- out.info("no cohorts defined")
178
- out.info(out.role("create one: `boost cohort create pilot --skills tdd-workflow --percent 50`", "muted"))
177
+ print(out.empty_state(
178
+ "no cohorts defined",
179
+ hint="create one: `boost cohort create pilot --skills "
180
+ "tdd-workflow --percent 50`",
181
+ wrap=True))
179
182
  return 0
180
183
  out.table(rows, headers=("COHORT", "SKILLS", "ROLLOUT", "YOU"))
181
184
  print()
@@ -518,7 +521,9 @@ def cmd_pulse(argv) -> int:
518
521
  print(json.dumps(events, indent=2))
519
522
  return 0
520
523
  if not events:
521
- out.info("no activity yet — events appear as you install and manage skills")
524
+ print(out.empty_state(
525
+ "no activity yet — events appear as you install and manage skills",
526
+ wrap=True))
522
527
  return 0
523
528
  for e in events:
524
529
  action = e.get("action", "?")
@@ -557,7 +562,9 @@ def cmd_replay(argv) -> int:
557
562
  print(json.dumps(history, indent=2))
558
563
  return 0
559
564
  if not history:
560
- out.info("no lock history yet — every install/uninstall snapshots the lock file")
565
+ print(out.empty_state(
566
+ "no lock history yet — every install/uninstall snapshots "
567
+ "the lock file", wrap=True))
561
568
  return 0
562
569
  rows = []
563
570
  prev_items = None
@@ -693,8 +700,9 @@ def cmd_who(argv) -> int:
693
700
 
694
701
  events = journal.events(subject=args.skill) if args.skill else journal.events()
695
702
  if not events:
696
- out.info("no journal activity yet — expertise builds as people install, "
697
- "edit, and evolve skills")
703
+ print(out.empty_state(
704
+ "no journal activity yet — expertise builds as people install, "
705
+ "edit, and evolve skills", wrap=True))
698
706
  return 0
699
707
 
700
708
  if args.skill:
@@ -16,6 +16,7 @@ import os
16
16
  import re
17
17
  import shutil
18
18
  import sys
19
+ import unicodedata
19
20
  from collections.abc import Sequence
20
21
  from dataclasses import dataclass
21
22
 
@@ -336,9 +337,30 @@ def badge(label: str, hue: str = "cyan") -> str:
336
337
  _ANSI_RE = re.compile(r"\033\[[0-9;]*m")
337
338
 
338
339
 
340
+ def _char_width(ch: str) -> int:
341
+ """Terminal display width of one character: 2 for wide/fullwidth CJK and
342
+ most emoji, 0 for a combining mark, 1 otherwise.
343
+
344
+ A pure-stdlib approximation of wcwidth via ``unicodedata`` — no dependency
345
+ to earn just for column math, and the two classes it distinguishes
346
+ (``unicodedata.east_asian_width`` returning "W"/"F") are exactly the ones
347
+ that render two columns wide in every terminal this CLI targets.
348
+ """
349
+ if unicodedata.combining(ch):
350
+ return 0
351
+ return 2 if unicodedata.east_asian_width(ch) in ("W", "F") else 1
352
+
353
+
339
354
  def visible_len(s: str) -> int:
340
- """Length of a string ignoring ANSI color escapes — its column width."""
341
- return len(_ANSI_RE.sub("", s))
355
+ """Column width of a string: ANSI escapes cost nothing, a wide character
356
+ (CJK, most emoji) costs 2, everything else costs 1.
357
+
358
+ ``len()`` alone undercounts any string holding a double-width character,
359
+ which is what silently misaligned a table the moment a cell held an emoji
360
+ or CJK text — the column budget was measured a codepoint short of what
361
+ the terminal actually draws.
362
+ """
363
+ return sum(_char_width(ch) for ch in _ANSI_RE.sub("", s))
342
364
 
343
365
 
344
366
  _CODE_SPAN_RE = re.compile(r"`[^`]*`")
@@ -457,13 +479,26 @@ _TRAFFIC = ((0xff, 0x5f, 0x57, RED), (0xfe, 0xbc, 0x2e, YELLOW),
457
479
  (0x28, 0xc8, 0x40, GREEN))
458
480
 
459
481
 
460
- def empty_state(message: str, hint: str | None = None) -> str:
482
+ def empty_state(message: str, hint: str | None = None, wrap: bool = False) -> str:
461
483
  """A standardized empty-state: a muted ○ bullet + message, with an optional
462
484
  dim → hint on the next line. One affordance so 'nothing here' always reads
463
- the same across commands."""
464
- out_lines = [" " + c("○ " + message, DIM)]
485
+ the same across commands.
486
+
487
+ ``wrap`` as in :func:`warn`: opt-in, folding each block to the pane rather
488
+ than always-on, so a call site with an atomic backtick-quoted command
489
+ (e.g. cohort's create hint) still gets that command whole rather than
490
+ split across lines. Both markers ("○ " / "→ ") are two visible columns,
491
+ matching the module's other 4-column-lead emitters (2-space indent + a
492
+ 2-wide marker), so message and hint wrap to the same budget.
493
+ """
494
+ def _block(marker: str, text: str) -> list[str]:
495
+ body = _wrap_lines(text, 4) if wrap else [text]
496
+ return ([" " + c(marker + body[0], DIM)]
497
+ + [" " + c(ln, DIM) for ln in body[1:]])
498
+
499
+ out_lines = _block("○ ", message)
465
500
  if hint:
466
- out_lines.append(" " + c("→ " + hint, DIM))
501
+ out_lines += _block("→ ", hint)
467
502
  return "\n".join(out_lines)
468
503
 
469
504
 
@@ -676,8 +711,11 @@ def _clip_visible(s: str, width: int, ellipsis: str = "…") -> str:
676
711
  had_escape = True
677
712
  i = m.end()
678
713
  continue
714
+ w = _char_width(s[i])
715
+ if vis + w > keep:
716
+ break # a wide character never gets cut in half for the ellipsis
679
717
  out_chars.append(s[i])
680
- vis += 1
718
+ vis += w
681
719
  i += 1
682
720
  result = "".join(out_chars) + ellipsis
683
721
  if had_escape and not result.endswith(RESET):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.36
3
+ Version: 1.2.37
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -196,6 +196,7 @@ docs/roadmap/items/BOOST-D23.md
196
196
  docs/roadmap/items/BOOST-D24.md
197
197
  docs/roadmap/items/BOOST-D25.md
198
198
  docs/roadmap/items/BOOST-D26.md
199
+ docs/roadmap/items/BOOST-D27.md
199
200
  docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md
200
201
  docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md
201
202
  docs/roadmap/items/actionlint-skips-shellcheck-silently.md
@@ -156,7 +156,7 @@
156
156
  <a class="cmd-link" href="#cmd-infer" data-search="infer generate a skill.md from your codebase patterns --path dir --name n -o, --output file --install">infer</a>
157
157
  <a class="cmd-link" href="#cmd-absorb" data-search="absorb turn recurring chat-history patterns into a skill --history path --limit n --install">absorb</a>
158
158
  <a class="cmd-link" href="#cmd-evolve" data-search="evolve iteratively improve a skill from feedback --feedback text --apply name">evolve</a>
159
- <a class="cmd-link" href="#cmd-context" data-search="context branch-aware skill activation status|enable|disable|map|unmap|apply">context</a>
159
+ <a class="cmd-link" href="#cmd-context" data-search="context branch-aware skill activation action">context</a>
160
160
  <a class="cmd-link" href="#cmd-focus" data-search="focus temporarily prioritize skills for a work session --clear --status --json skill">focus</a>
161
161
  <a class="cmd-link" href="#cmd-impact" data-search="impact measure a skill&#x27;s influence on code quality --json name">impact</a>
162
162
  </div>
@@ -191,7 +191,7 @@
191
191
  <a class="cmd-link" href="#cmd-serve" data-search="serve browse the catalogue in a browser: search, facets and a tap graph --port port --host host">serve</a>
192
192
  <a class="cmd-link" href="#cmd-mcp" data-search="mcp register boost as an mcp server (claude code, gemini cli) register boost as an mcp server for your agent clis --host h --stdio --seed --no-seed {register,unregister}">mcp</a>
193
193
  <a class="cmd-link" href="#cmd-hooks" data-search="hooks manage agent hooks (claude code, gemini cli) in settings.json manage agent hooks (scope- and host-aware) in settings.json --host h -c, --command command -n, --name name -s, --scope {global,project} -m, --matcher matcher --timeout timeout {add,remove,list} event">hooks</a>
194
- <a class="cmd-link" href="#cmd-bmad" data-search="bmad bmad method autopilot — `bmad on` routes every task to a persona bmad method autopilot: personas, prompt routing, workflows -s, --scope {project,global} --modules modules -y, --yes --startup --plain {on,off,route,personas,install,init,startup,orient,uninstall,disable,enable,doctor,status} value">bmad</a>
194
+ <a class="cmd-link" href="#cmd-bmad" data-search="bmad bmad method autopilot — `bmad on` routes every task to a persona bmad method autopilot: personas, prompt routing, workflows -s, --scope {project,global} --modules modules -y, --yes --startup --plain action value">bmad</a>
195
195
  <a class="cmd-link" href="#cmd-self-update" data-search="self-update update boost itself to the latest version --dry-run">self-update</a>
196
196
  </div>
197
197
  <div class="group" data-group="team">
@@ -766,13 +766,13 @@
766
766
  <div class="arg"><code>--apply</code><span>write the revision to the installed skill</span></div>
767
767
  </div>
768
768
  </section>
769
- <section class="cmd" id="cmd-context" data-search="context branch-aware skill activation status|enable|disable|map|unmap|apply">
769
+ <section class="cmd" id="cmd-context" data-search="context branch-aware skill activation action">
770
770
  <h3><span class="cname">context</span><span class="gtag">ai</span></h3>
771
771
  <p class="summary">Branch-aware skill activation</p>
772
- <pre class="syn">boost context status|enable|disable|map|unmap|apply</pre>
772
+ <pre class="syn">boost context ACTION</pre>
773
773
  <div class="args-h">Arguments</div>
774
774
  <div class="args">
775
- <div class="arg"><code>status|enable|disable|map|unmap|apply</code><span></span></div>
775
+ <div class="arg"><code>ACTION</code><span></span></div>
776
776
  </div>
777
777
  </section>
778
778
  <section class="cmd" id="cmd-focus" data-search="focus temporarily prioritize skills for a work session --clear --status --json skill">
@@ -1127,14 +1127,14 @@
1127
1127
  <div class="arg"><code>--timeout TIMEOUT</code><span>hook timeout in seconds (default: 10)</span></div>
1128
1128
  </div>
1129
1129
  </section>
1130
- <section class="cmd" id="cmd-bmad" data-search="bmad bmad method autopilot — `bmad on` routes every task to a persona bmad method autopilot: personas, prompt routing, workflows -s, --scope {project,global} --modules modules -y, --yes --startup --plain {on,off,route,personas,install,init,startup,orient,uninstall,disable,enable,doctor,status} value">
1130
+ <section class="cmd" id="cmd-bmad" data-search="bmad bmad method autopilot — `bmad on` routes every task to a persona bmad method autopilot: personas, prompt routing, workflows -s, --scope {project,global} --modules modules -y, --yes --startup --plain action value">
1131
1131
  <h3><span class="cname">bmad</span><span class="gtag">cfg</span></h3>
1132
1132
  <p class="summary">BMAD Method autopilot — `bmad on` routes every task to a persona</p>
1133
- <pre class="syn">boost bmad [--scope {project,global}] [--modules MODULES] [--yes] [--startup] [--plain] {on,off,route,personas,install,init,startup,orient,uninstall,disable,enable,doctor,status} [value]</pre>
1133
+ <pre class="syn">boost bmad [--scope {project,global}] [--modules MODULES] [--yes] [--startup] [--plain] ACTION [value]</pre>
1134
1134
  <p class="desc">BMAD Method autopilot: personas, prompt routing, workflows</p>
1135
1135
  <div class="args-h">Arguments</div>
1136
1136
  <div class="args">
1137
- <div class="arg"><code>{on,off,route,personas,install,init,startup,orient,uninstall,disable,enable,doctor,status}</code><span>on | off | route | personas | install | init | startup | orient | uninstall | disable | enable | doctor | status</span></div>
1137
+ <div class="arg"><code>ACTION</code><span>on | off | route | personas | install | init | startup | orient | uninstall | disable | enable | doctor | status</span></div>
1138
1138
  <div class="arg"><code>value</code><span>startup: on | off | status · route: the prompt to classify</span></div>
1139
1139
  </div>
1140
1140
  <div class="args-h">Options</div>
@@ -227,7 +227,7 @@
227
227
  <button class="pill" data-filter="impact" data-val="med">Med</button>
228
228
  <button class="pill" data-filter="impact" data-val="low">Low</button>
229
229
  </div>
230
- <p class="roadmap-count"><b id="shown"><!-- ROADMAP:count shown -->26<!-- /ROADMAP:count --></b> of <b><!-- ROADMAP:count total -->26<!-- /ROADMAP:count --></b> opportunities shown</p>
230
+ <p class="roadmap-count"><b id="shown"><!-- ROADMAP:count shown -->27<!-- /ROADMAP:count --></b> of <b><!-- ROADMAP:count total -->27<!-- /ROADMAP:count --></b> opportunities shown</p>
231
231
  </div>
232
232
 
233
233
  <div class="wrap" id="board">
@@ -289,7 +289,7 @@
289
289
  <h2>Structure &amp; Layout</h2>
290
290
  <p>Width-aware output, glass panels, and results that never blow up the pane.</p>
291
291
  </div>
292
- <span class="n"><!-- ROADMAP:count track=layout -->7 items<!-- /ROADMAP:count --></span>
292
+ <span class="n"><!-- ROADMAP:count track=layout -->8 items<!-- /ROADMAP:count --></span>
293
293
  </div>
294
294
  <div class="rcards">
295
295
 
@@ -349,6 +349,20 @@
349
349
  <div class="rmeta"><span class="m-cat">layout</span><span>Complexity L</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★★★☆</span></div>
350
350
  <div class="rref"><code>core/output.py:table() / _fit_widths / _clip_visible</code></div>
351
351
  </article>
352
+
353
+ <article class="ritem" id="BOOST-D27" data-track="layout" data-impact="med">
354
+ <div class="ritem-top"><span class="rid">BOOST-D27</span><span class="rstatus proposed">Proposed</span></div>
355
+ <h3>Finish the wrap-law rollout across the CLI's remaining hand-rolled spots</h3>
356
+ <p>A narrow-pane audit across all 80 commands fixed the concrete overflow bugs it found — a hardcoded <code>textwrap</code> width in <code>info</code>/<code>preview</code>/<code>explain</code>, two argparse usage lines with no <code>metavar</code>, help text that split a backtick-quoted command across lines, five "nothing here" screens that overflowed unwrapped, and a <code>print_help</code> command column painted in raw 16-color <code>CYAN</code> instead of the Aurora <code>accent</code> role — and added wide-character measurement (<code>unicodedata.east_asian_width</code>) to <code>visible_len()</code>/<code>_clip_visible()</code> so <code>table()</code> stays aligned when a cell holds CJK or an emoji. Three related gaps remain, deliberately left rather than folded into that pass because each is a wider, riskier sweep on its own:
357
+
358
+ <b>1. <code>dim(" text")</code>'s embedded 2-space indent has no wrap path.</b> 39 call sites (<code>bmad</code>'s hint lines, <code>schedule status</code>, <code>impact</code>'s caveat, …) hand-embed a leading <code>" "</code> because <code>dim()</code> prints flush-left by contract; passing <code>wrap=True</code> today would silently drop that margin on the first wrapped line (the tokenizer discards leading whitespace). One of the 39 measurably overflows a 60-column pane by a single character (<code>schedule status</code>'s enable hint) — not worth an inconsistent one-off fix. <code>dim()</code> needs a real <code>indent</code>/margin parameter (mirroring <code>kv</code>'s lead-column math) before any of the 39 can safely opt into wrapping.
359
+
360
+ <b>2. <code>empty_state()</code> adoption is 7 of ~35 "nothing to show" screens.</b> This pass converted cohort/replay/pulse/who's overflowing messages to the standard helper; roughly 28 more (<code>hooks</code>, <code>hallmarks of "no taps configured"</code>, <code>no skills installed</code> across five modules, …) still print via ad hoc <code>out.info("no X")</code>. None of them currently overflow, so converting all 28 in one shot would be a same-behavior refactor risking 28 screens' worth of rendered-text drift for no measured bug — better done a few at a time, verified against real content.
361
+
362
+ <b>3. Wide-character width stopped at <code>visible_len()</code>/<code>_clip_visible()</code>.</b> <code>truncate()</code> (plain-text clipping before coloring) and <code>search_layout()</code>'s column-budget math still count with <code>len()</code>, not display width — so a skill description containing an emoji would still truncate mid-character or throw off a search row's column budget. Not observed in real catalog data (skill names/taps are near-universal ASCII slugs), and widening it touches layout-budget code, not just measurement, so it stayed out of the audit's contained fix.</p>
363
+ <div class="rmeta"><span class="m-cat">layout</span><span>Complexity M</span><span class="m-imp med">Impact Med</span><span class="m-wow">★★☆☆☆</span></div>
364
+ <div class="rref"><code>core/output.py · dim()/empty_state() call sites; truncate()/search_layout()</code></div>
365
+ </article>
352
366
  <!-- /ROADMAP:cards -->
353
367
 
354
368
  </div>
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: BOOST-D27
3
+ board: design
4
+ track: layout
5
+ status: proposed
6
+ impact: med
7
+ complexity: M
8
+ wow: 2
9
+ category: layout
10
+ ref: "core/output.py · dim()/empty_state() call sites; truncate()/search_layout()"
11
+ order: 8
12
+ owner: loop/aesthetics
13
+ pr:
14
+ title: Finish the wrap-law rollout across the CLI's remaining hand-rolled spots
15
+ ---
16
+ A narrow-pane audit across all 80 commands fixed the concrete overflow bugs it found — a hardcoded <code>textwrap</code> width in <code>info</code>/<code>preview</code>/<code>explain</code>, two argparse usage lines with no <code>metavar</code>, help text that split a backtick-quoted command across lines, five "nothing here" screens that overflowed unwrapped, and a <code>print_help</code> command column painted in raw 16-color <code>CYAN</code> instead of the Aurora <code>accent</code> role — and added wide-character measurement (<code>unicodedata.east_asian_width</code>) to <code>visible_len()</code>/<code>_clip_visible()</code> so <code>table()</code> stays aligned when a cell holds CJK or an emoji. Three related gaps remain, deliberately left rather than folded into that pass because each is a wider, riskier sweep on its own:
17
+
18
+ <b>1. <code>dim(" text")</code>'s embedded 2-space indent has no wrap path.</b> 39 call sites (<code>bmad</code>'s hint lines, <code>schedule status</code>, <code>impact</code>'s caveat, …) hand-embed a leading <code>" "</code> because <code>dim()</code> prints flush-left by contract; passing <code>wrap=True</code> today would silently drop that margin on the first wrapped line (the tokenizer discards leading whitespace). One of the 39 measurably overflows a 60-column pane by a single character (<code>schedule status</code>'s enable hint) — not worth an inconsistent one-off fix. <code>dim()</code> needs a real <code>indent</code>/margin parameter (mirroring <code>kv</code>'s lead-column math) before any of the 39 can safely opt into wrapping.
19
+
20
+ <b>2. <code>empty_state()</code> adoption is 7 of ~35 "nothing to show" screens.</b> This pass converted cohort/replay/pulse/who's overflowing messages to the standard helper; roughly 28 more (<code>hooks</code>, <code>hallmarks of "no taps configured"</code>, <code>no skills installed</code> across five modules, …) still print via ad hoc <code>out.info("no X")</code>. None of them currently overflow, so converting all 28 in one shot would be a same-behavior refactor risking 28 screens' worth of rendered-text drift for no measured bug — better done a few at a time, verified against real content.
21
+
22
+ <b>3. Wide-character width stopped at <code>visible_len()</code>/<code>_clip_visible()</code>.</b> <code>truncate()</code> (plain-text clipping before coloring) and <code>search_layout()</code>'s column-budget math still count with <code>len()</code>, not display width — so a skill description containing an emoji would still truncate mid-character or throw off a search row's column budget. Not observed in real catalog data (skill names/taps are near-universal ASCII slugs), and widening it touches layout-budget code, not just measurement, so it stayed out of the audit's contained fix.
@@ -290,6 +290,21 @@ class TestDoctor:
290
290
  assert r.rc == 0 and "MISSING" in r.out
291
291
 
292
292
 
293
+ class TestHelpFitsNarrowPane:
294
+ """`boost bmad --help`'s action list is 13 choices long — spelled out as
295
+ argparse's auto {a,b,c,...} metavar it overflowed every width up to 100
296
+ columns, because that whole bracketed list is one unbreakable token."""
297
+
298
+ def test_help_has_no_line_over_60_columns(self, boost, sandbox,
299
+ monkeypatch):
300
+ monkeypatch.setenv("COLUMNS", "60")
301
+ r = boost("bmad", "--help")
302
+ for ln in r.out.split("\n"):
303
+ assert len(ln) <= 60, ln
304
+ # the choices themselves must still be discoverable somewhere in help
305
+ assert "route" in r.out and "personas" in r.out
306
+
307
+
293
308
  # ------------------------------------------------------------------- autopilot
294
309
 
295
310
  class TestAutopilotOn:
@@ -1365,6 +1365,16 @@ class TestStats:
1365
1365
  assert "1.4.0 (up to date)" in lines["latest"]
1366
1366
  assert "fixture skills" in lines["upstream"] # fixture commit subject
1367
1367
 
1368
+ def test_upstream_wraps_to_a_narrow_pane(self, boost, installed,
1369
+ monkeypatch):
1370
+ # "b2b9486 2026-08-28 Boost Fixture fixture skills" (50 cols) plus
1371
+ # the 16-column kv lead ran to 66 — over a 60-column pane.
1372
+ monkeypatch.setenv("COLUMNS", "60")
1373
+ r = boost("stats", "brainstorming")
1374
+ for ln in r.out.split("\n"):
1375
+ assert len(ln) <= 60, ln
1376
+ assert "fixture" in r.out and "skills" in r.out
1377
+
1368
1378
  def test_update_available(self, boost, installed):
1369
1379
  p = paths.lockfile_path()
1370
1380
  lock = json.loads(p.read_text(encoding="utf-8"))