boost-skill-cli 1.2.21__tar.gz → 1.2.23__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 (747) hide show
  1. boost_skill_cli-1.2.23/.vale/styles/boost/AIWriting.yml +69 -0
  2. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.vale/styles/config/vocabularies/boost/accept.txt +2 -0
  3. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/CLAUDE.md +18 -0
  4. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/PKG-INFO +1 -1
  5. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/_version.py +2 -2
  6. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/discovery.py +9 -5
  7. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/info.py +1 -1
  8. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/intelligence.py +11 -5
  9. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/quality.py +10 -7
  10. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/team.py +10 -4
  11. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/output.py +124 -9
  12. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  13. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  14. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/eval-latest.json +2 -2
  15. boost_skill_cli-1.2.23/docs/roadmap/items/long-hints-overflow-narrow-panes.md +69 -0
  16. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap.html +52 -21
  17. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/style/README.md +62 -0
  18. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/style/boost.css +30 -2
  19. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/explain.feature +2 -2
  20. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/steps/cli_steps.py +14 -0
  21. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_discovery.py +1 -1
  22. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_info.py +1 -1
  23. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_intelligence.py +25 -12
  24. boost_skill_cli-1.2.23/tests/functional/test_cli_pane_width.py +137 -0
  25. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_quality.py +2 -2
  26. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_team.py +6 -2
  27. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_output.py +217 -0
  28. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/package-lock.json +12 -12
  29. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/package.json +1 -1
  30. boost_skill_cli-1.2.21/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -38
  31. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.gitattributes +0 -0
  32. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.gitignore +0 -0
  33. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.gitleaks.toml +0 -0
  34. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.htmlvalidate.json +0 -0
  35. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.lighthouserc.json +0 -0
  36. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.lycheeignore +0 -0
  37. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.markdownlint-cli2.jsonc +0 -0
  38. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.pre-commit-config.yaml +0 -0
  39. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.stylelintrc.json +0 -0
  40. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.vale/styles/boost/Terminology.yml +0 -0
  41. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/.vale.ini +0 -0
  42. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/CODE_OF_CONDUCT.md +0 -0
  43. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/CONTRIBUTING.md +0 -0
  44. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/LICENSE +0 -0
  45. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/MANIFEST.in +0 -0
  46. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/Makefile +0 -0
  47. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/README.md +0 -0
  48. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/SECURITY.md +0 -0
  49. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost +0 -0
  50. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/__init__.py +0 -0
  51. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/__main__.py +0 -0
  52. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/cli.py +0 -0
  53. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/cliparse.py +0 -0
  54. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/__init__.py +0 -0
  55. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/_common.py +0 -0
  56. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/bmad.py +0 -0
  57. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/configuration.py +0 -0
  58. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/hooks.py +0 -0
  59. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/pkg.py +0 -0
  60. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/run.py +0 -0
  61. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/safety.py +0 -0
  62. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/commands/taps.py +0 -0
  63. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/__init__.py +0 -0
  64. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/adapters.py +0 -0
  65. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/agents.py +0 -0
  66. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/ai.py +0 -0
  67. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/bmad.py +0 -0
  68. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/bootstrap.py +0 -0
  69. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/browse.py +0 -0
  70. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/builtin.py +0 -0
  71. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/capabilities.py +0 -0
  72. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/catalog.py +0 -0
  73. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/catalogbundle.py +0 -0
  74. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/chat.py +0 -0
  75. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/claude_settings.py +0 -0
  76. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/complete.py +0 -0
  77. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/config.py +0 -0
  78. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/dense.py +0 -0
  79. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/ed25519.py +0 -0
  80. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/embed.py +0 -0
  81. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/faithfulness.py +0 -0
  82. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/frontmatter.py +0 -0
  83. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/gitutil.py +0 -0
  84. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/imperative.py +0 -0
  85. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/injectscan.py +0 -0
  86. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/installscan.py +0 -0
  87. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/integrity.py +0 -0
  88. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/journal.py +0 -0
  89. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/localembed.py +0 -0
  90. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/lockfile.py +0 -0
  91. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/logs.py +0 -0
  92. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/mcp.py +0 -0
  93. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/mcpdecl.py +0 -0
  94. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/mcphost.py +0 -0
  95. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/minisign.py +0 -0
  96. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/nethttp.py +0 -0
  97. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/paths.py +0 -0
  98. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/policy.py +0 -0
  99. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/projectlock.py +0 -0
  100. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/provenance.py +0 -0
  101. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/rag.py +0 -0
  102. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/registry.py +0 -0
  103. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/resolve.py +0 -0
  104. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/rules.py +0 -0
  105. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/scopes.py +0 -0
  106. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/secretscan.py +0 -0
  107. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/selfupdate.py +0 -0
  108. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/serve.py +0 -0
  109. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/stackprobe.py +0 -0
  110. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/staleness.py +0 -0
  111. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/store.py +0 -0
  112. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/trustaudit.py +0 -0
  113. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/typosquat.py +0 -0
  114. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/updatediff.py +0 -0
  115. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/util.py +0 -0
  116. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/core/workflows.py +0 -0
  117. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/data/registries.json +0 -0
  118. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/data/rules/boost-first.mdc +0 -0
  119. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/errors.py +0 -0
  120. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_cli/spin.py +0 -0
  121. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/__init__.py +0 -0
  122. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/_compat.py +0 -0
  123. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/graph.py +0 -0
  124. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/loader.py +0 -0
  125. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/py.typed +0 -0
  126. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_langchain/retriever.py +0 -0
  127. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  128. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  129. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/requires.txt +0 -0
  130. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/boost_skill_cli.egg-info/top_level.txt +0 -0
  131. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/codecov.yml +0 -0
  132. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/.claude/settings.local.json +0 -0
  133. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/DEBUGGING.md +0 -0
  134. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/adapters.html +0 -0
  135. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/README.md +0 -0
  136. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/c4-components-core.md +0 -0
  137. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/c4-containers.md +0 -0
  138. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/c4-context.md +0 -0
  139. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/architecture/c4-dynamic-install.md +0 -0
  140. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/distill.gif +0 -0
  141. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/doctor.gif +0 -0
  142. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/explain.gif +0 -0
  143. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/hooks.gif +0 -0
  144. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/install.gif +0 -0
  145. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/pulse.gif +0 -0
  146. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/search.gif +0 -0
  147. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/gifs/tap.gif +0 -0
  148. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/distill.tape +0 -0
  149. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/doctor.tape +0 -0
  150. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/explain.tape +0 -0
  151. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/hooks.tape +0 -0
  152. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/install.tape +0 -0
  153. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/pulse.tape +0 -0
  154. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/search.tape +0 -0
  155. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel/tapes/tap.tape +0 -0
  156. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/carousel.html +0 -0
  157. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/chat.html +0 -0
  158. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/commands.html +0 -0
  159. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/demo-index.json +0 -0
  160. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/demo.gif +0 -0
  161. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/demo.html +0 -0
  162. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/demo.tape +0 -0
  163. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/design-roadmap.html +0 -0
  164. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/eval.html +0 -0
  165. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/index.html +0 -0
  166. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/langchain.html +0 -0
  167. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/mcp-hub.html +0 -0
  168. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/rag-architecture.md +0 -0
  169. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D01.md +0 -0
  170. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D02.md +0 -0
  171. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D03.md +0 -0
  172. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D04.md +0 -0
  173. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D05.md +0 -0
  174. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D06.md +0 -0
  175. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D07.md +0 -0
  176. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D08.md +0 -0
  177. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D09.md +0 -0
  178. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D10.md +0 -0
  179. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D11.md +0 -0
  180. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D12.md +0 -0
  181. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D13.md +0 -0
  182. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D14.md +0 -0
  183. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D15.md +0 -0
  184. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D16.md +0 -0
  185. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D17.md +0 -0
  186. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D18.md +0 -0
  187. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D19.md +0 -0
  188. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D20.md +0 -0
  189. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D21.md +0 -0
  190. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D22.md +0 -0
  191. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D23.md +0 -0
  192. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D24.md +0 -0
  193. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D25.md +0 -0
  194. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/BOOST-D26.md +0 -0
  195. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  196. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  197. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  198. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  199. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  200. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  201. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  202. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  203. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  204. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  205. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  206. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  207. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  208. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  209. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/boost-first-rule.md +0 -0
  210. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  211. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  212. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  213. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  214. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  215. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  216. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  217. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  218. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  219. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  220. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  221. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  222. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  223. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  224. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  225. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  226. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  227. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  228. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  229. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  230. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/command-carousel-page.md +0 -0
  231. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  232. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  233. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  234. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  235. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  236. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  237. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  238. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  239. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  240. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  241. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  242. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  243. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  244. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  245. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  246. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  247. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  248. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  249. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  250. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  251. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  252. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  253. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  254. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  255. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  256. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  257. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  258. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  259. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  260. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  261. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  262. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  263. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  264. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  265. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  266. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  267. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  268. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  269. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  270. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  271. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  272. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  273. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  274. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  275. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  276. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  277. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  278. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/github-community-health-files.md +0 -0
  279. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  280. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  281. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  282. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  283. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  284. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  285. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  286. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  287. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  288. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  289. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  290. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  291. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  292. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  293. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  294. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  295. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  296. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  297. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  298. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  299. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  300. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  301. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  302. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  303. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  304. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  305. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  306. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  307. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  308. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  309. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  310. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  311. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  312. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  313. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  314. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  315. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  316. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  317. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  318. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  319. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  320. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  321. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  322. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  323. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  324. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  325. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  326. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  327. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  328. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  329. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  330. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  331. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  332. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  333. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  334. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  335. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  336. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  337. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  338. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  339. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  340. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  341. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  342. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  343. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  344. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  345. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  346. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  347. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  348. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  349. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  350. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  351. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  352. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  353. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  354. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  355. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  356. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  357. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  358. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  359. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  360. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  361. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  362. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  363. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  364. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  365. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  366. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  367. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  368. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  369. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  370. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  371. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  372. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  373. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  374. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  375. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  376. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  377. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  378. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  379. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  380. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  381. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  382. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  383. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  384. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  385. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  386. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  387. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  388. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  389. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  390. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  391. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  392. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  393. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  394. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  395. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  396. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  397. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  398. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  399. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  400. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  401. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  402. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  403. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  404. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  405. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  406. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  407. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  408. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  409. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  410. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  411. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  412. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  413. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  414. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  415. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  416. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  417. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  418. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  419. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  420. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  421. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  422. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  423. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  424. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  425. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  426. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  427. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  428. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  429. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  430. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  431. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  432. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  433. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  434. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  435. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  436. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  437. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  438. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  439. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  440. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  441. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  442. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  443. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  444. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  445. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  446. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  447. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  448. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  449. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  450. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  451. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  452. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  453. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  454. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  455. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  456. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  457. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/workspace-scope-install.md +0 -0
  458. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/zip-strict-audit.md +0 -0
  459. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  460. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  461. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  462. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/eslint.config.mjs +0 -0
  463. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/README.md +0 -0
  464. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/__init__.py +0 -0
  465. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/baseline.json +0 -0
  466. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/faithfulness.py +0 -0
  467. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/golden_set.json +0 -0
  468. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/make_corpus.py +0 -0
  469. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/make_golden.py +0 -0
  470. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/metrics.py +0 -0
  471. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/publish_golden_dataset.py +0 -0
  472. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/evals/run_evals.py +0 -0
  473. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/examples/README.md +0 -0
  474. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/examples/adapt-demo.sh +0 -0
  475. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/examples/boost-run-prototype.sh +0 -0
  476. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/index.html +0 -0
  477. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/noxfile.py +0 -0
  478. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/pyproject.toml +0 -0
  479. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/coverage-tools.in +0 -0
  480. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/coverage-tools.txt +0 -0
  481. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/lint-tools.in +0 -0
  482. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/lint-tools.txt +0 -0
  483. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/mutation-tools.in +0 -0
  484. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/mutation-tools.txt +0 -0
  485. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/platform-pins.lock +0 -0
  486. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/release-tools.in +0 -0
  487. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/release-tools.txt +0 -0
  488. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/test-tools.in +0 -0
  489. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/requirements/test-tools.txt +0 -0
  490. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/a11y_check.py +0 -0
  491. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/bench_cli.sh +0 -0
  492. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_command_reference.py +0 -0
  493. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_demo_index.py +0 -0
  494. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_registries.py +0 -0
  495. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_roadmap.py +0 -0
  496. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/build_scale_corpus.py +0 -0
  497. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/check_anchors.py +0 -0
  498. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/check_licenses.py +0 -0
  499. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/check_required_checks.py +0 -0
  500. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/ensure_eval_corpus.sh +0 -0
  501. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_corpus.py +0 -0
  502. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_explain.py +0 -0
  503. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_gate.py +0 -0
  504. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_recommend.py +0 -0
  505. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_retrieval.py +0 -0
  506. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/eval_stats_summary.py +0 -0
  507. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/import_budget.py +0 -0
  508. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/lock_toolchain.py +0 -0
  509. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/measure_registry.py +0 -0
  510. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/mutation_gate.py +0 -0
  511. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/mutation_shards.py +0 -0
  512. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/mutation_weights.json +0 -0
  513. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/page_budget.py +0 -0
  514. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/perf_gate.py +0 -0
  515. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/post_deploy_smoke.py +0 -0
  516. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/publish_eval_json.py +0 -0
  517. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/release_guard.py +0 -0
  518. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/release_preflight.py +0 -0
  519. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/scripts/serve_docs.py +0 -0
  520. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/setup.cfg +0 -0
  521. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/sonar-project.properties +0 -0
  522. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/style/boost.js +0 -0
  523. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/style/demo.html +0 -0
  524. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/adapt.feature +0 -0
  525. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/browse.feature +0 -0
  526. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/count.feature +0 -0
  527. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/discover.feature +0 -0
  528. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/doctor.feature +0 -0
  529. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/environment.py +0 -0
  530. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/index.feature +0 -0
  531. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/install.feature +0 -0
  532. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/list.feature +0 -0
  533. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/mcp.feature +0 -0
  534. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/search.feature +0 -0
  535. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/steps/discovery_steps.py +0 -0
  536. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/steps/mcp_steps.py +0 -0
  537. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/bdd/features/steps/quality_steps.py +0 -0
  538. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/conftest.py +0 -0
  539. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/baseline.json +0 -0
  540. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/explain.jsonl +0 -0
  541. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/golden-natural.jsonl +0 -0
  542. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/golden.jsonl +0 -0
  543. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/recommend.jsonl +0 -0
  544. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/taps-scale.txt +0 -0
  545. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/eval/taps.txt +0 -0
  546. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_capabilities_policy.py +0 -0
  547. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_adapt.py +0 -0
  548. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_bmad.py +0 -0
  549. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_catalog.py +0 -0
  550. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_chat.py +0 -0
  551. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_configuration.py +0 -0
  552. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_hooks.py +0 -0
  553. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_pkg.py +0 -0
  554. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_cli_taps.py +0 -0
  555. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_everyday_loop.py +0 -0
  556. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_integrity_enforce.py +0 -0
  557. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_kind_conformance.py +0 -0
  558. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_property_parsers.py +0 -0
  559. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_run.py +0 -0
  560. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_tap_signing.py +0 -0
  561. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/functional/test_workspace_scope.py +0 -0
  562. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/README.md +0 -0
  563. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  564. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  565. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  566. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  567. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  568. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  569. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  570. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  571. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  572. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  573. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  574. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  575. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  576. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  577. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  578. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  579. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  580. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  581. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  582. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  583. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  584. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  585. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  586. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/fuzz_frontmatter.py +0 -0
  587. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/fuzz/fuzz_registry.py +0 -0
  588. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/langchain/conftest.py +0 -0
  589. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/langchain/test_graph.py +0 -0
  590. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/langchain/test_loader.py +0 -0
  591. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/langchain/test_retriever.py +0 -0
  592. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/make_fixture.py +0 -0
  593. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/perf/test_benchmarks.py +0 -0
  594. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/smoke.sh +0 -0
  595. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_a11y_check.py +0 -0
  596. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_action_pin_lockstep.py +0 -0
  597. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_adapters.py +0 -0
  598. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_adapters_multi.py +0 -0
  599. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_adapters_runner.py +0 -0
  600. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_agents.py +0 -0
  601. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_ai.py +0 -0
  602. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_bmad_core.py +0 -0
  603. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_boost_first_offer.py +0 -0
  604. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_bootstrap.py +0 -0
  605. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_browse.py +0 -0
  606. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_builtin.py +0 -0
  607. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_capabilities.py +0 -0
  608. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_catalog.py +0 -0
  609. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_catalogbundle.py +0 -0
  610. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_chat.py +0 -0
  611. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_check_anchors.py +0 -0
  612. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_check_licenses.py +0 -0
  613. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_claude_settings.py +0 -0
  614. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_clean_internal_cache.py +0 -0
  615. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_cliparse.py +0 -0
  616. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_codeql_analysis_key.py +0 -0
  617. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_command_reference_fresh.py +0 -0
  618. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_community_health_files.py +0 -0
  619. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_compact.py +0 -0
  620. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_complete.py +0 -0
  621. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_complete_rc_block.py +0 -0
  622. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_config.py +0 -0
  623. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_content_dedupe.py +0 -0
  624. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_content_identity.py +0 -0
  625. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_crash_redaction.py +0 -0
  626. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dedup_trust.py +0 -0
  627. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_demo_index.py +0 -0
  628. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense.py +0 -0
  629. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_embed_dedupe.py +0 -0
  630. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_fallback.py +0 -0
  631. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_fix_hint.py +0 -0
  632. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_quantized.py +0 -0
  633. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_ready_order.py +0 -0
  634. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_shard_real_schema.py +0 -0
  635. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  636. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_shards.py +0 -0
  637. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_status.py +0 -0
  638. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dense_status_cheap.py +0 -0
  639. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_dependabot_config.py +0 -0
  640. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_docs_pages_linked.py +0 -0
  641. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_docsite_chrome.py +0 -0
  642. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_ed25519.py +0 -0
  643. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_embed.py +0 -0
  644. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_embed_local.py +0 -0
  645. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_embed_truncated_response.py +0 -0
  646. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_entry_key.py +0 -0
  647. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_errors_and_cli_table.py +0 -0
  648. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_baseline.py +0 -0
  649. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_corpus.py +0 -0
  650. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_faithfulness.py +0 -0
  651. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_gate.py +0 -0
  652. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_grading.py +0 -0
  653. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_metrics.py +0 -0
  654. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_eval_stats_summary.py +0 -0
  655. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  656. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_faithfulness.py +0 -0
  657. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_frontmatter.py +0 -0
  658. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_fuzz_targets.py +0 -0
  659. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  660. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gitleaks_config.py +0 -0
  661. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gitutil.py +0 -0
  662. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gitutil_lfs.py +0 -0
  663. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_gitutil_sparse.py +0 -0
  664. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_imperative.py +0 -0
  665. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_import_budget.py +0 -0
  666. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_injectscan.py +0 -0
  667. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_install_permission_error.py +0 -0
  668. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_installscan.py +0 -0
  669. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_integrity.py +0 -0
  670. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_journal.py +0 -0
  671. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_langchain_packaging.py +0 -0
  672. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_link_ownership.py +0 -0
  673. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_localembed.py +0 -0
  674. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_localembed_e2e.py +0 -0
  675. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_lockfile.py +0 -0
  676. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_logs.py +0 -0
  677. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_marketing_counts.py +0 -0
  678. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mcp.py +0 -0
  679. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mcp_install_scan.py +0 -0
  680. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mcpdecl.py +0 -0
  681. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mcphost.py +0 -0
  682. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_measure_registry.py +0 -0
  683. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_minisign.py +0 -0
  684. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mutation_hardening.py +0 -0
  685. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mutation_shards.py +0 -0
  686. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mutation_subfile_shards.py +0 -0
  687. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_mutmut_source_paths.py +0 -0
  688. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_nethttp.py +0 -0
  689. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_page_budget.py +0 -0
  690. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_paths.py +0 -0
  691. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_perf_gate.py +0 -0
  692. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_pkg_confusions.py +0 -0
  693. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_pkg_injection.py +0 -0
  694. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_pkg_secrets.py +0 -0
  695. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_platform_pins.py +0 -0
  696. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_policy.py +0 -0
  697. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_post_deploy_smoke.py +0 -0
  698. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_project_mcp_sidecar.py +0 -0
  699. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_projectlock.py +0 -0
  700. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_provenance.py +0 -0
  701. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_publish_golden_dataset.py +0 -0
  702. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rag.py +0 -0
  703. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rag_fastpath.py +0 -0
  704. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rag_fusion.py +0 -0
  705. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_registries_fresh.py +0 -0
  706. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_registry.py +0 -0
  707. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_registry_categories.py +0 -0
  708. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_registry_control_chars.py +0 -0
  709. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_release_guard.py +0 -0
  710. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_release_preflight.py +0 -0
  711. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_required_checks.py +0 -0
  712. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rerank_cache.py +0 -0
  713. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_resolve.py +0 -0
  714. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_roadmap_fresh.py +0 -0
  715. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_rules.py +0 -0
  716. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_scale_corpus.py +0 -0
  717. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_scopes.py +0 -0
  718. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_secretscan.py +0 -0
  719. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_selfupdate.py +0 -0
  720. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_serve.py +0 -0
  721. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_serve_docs.py +0 -0
  722. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_shards_matrix.py +0 -0
  723. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_smoke_covers_every_command.py +0 -0
  724. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_spin.py +0 -0
  725. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_stackprobe.py +0 -0
  726. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_staleness.py +0 -0
  727. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_store.py +0 -0
  728. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_store_materialize.py +0 -0
  729. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_sync_blocked_links.py +0 -0
  730. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  731. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_token_parity.py +0 -0
  732. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_toolchain_lock.py +0 -0
  733. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_trustaudit.py +0 -0
  734. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_typosquat.py +0 -0
  735. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_updatediff.py +0 -0
  736. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_util.py +0 -0
  737. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_version.py +0 -0
  738. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_visual_harness_flags.py +0 -0
  739. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflow_concurrency.py +0 -0
  740. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  741. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  742. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflow_timeouts.py +0 -0
  743. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_workflows.py +0 -0
  744. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  745. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/a11y_check.mjs +0 -0
  746. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/console_check.mjs +0 -0
  747. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.23}/tests/visual/visual_check.mjs +0 -0
@@ -0,0 +1,69 @@
1
+ extends: existence
2
+ message: "'%s' is a common LLM writing tell — rewrite it plainly."
3
+ level: warning
4
+ ignorecase: true
5
+ # Vocabulary that marks generated prose, drawn from Wikipedia's
6
+ # "Signs of AI writing" (WP:AISIGNS) and confirmed against boost's own docs:
7
+ # all 13 files the prose-lint workflow checks scored ZERO hits on this list
8
+ # before it was added, so it gates new drafts rather than grandfathering old
9
+ # ones. Scope is text only — Vale never looks inside code spans or fences, so
10
+ # this file's own examples in `backticks` and any CLI output are unaffected.
11
+ #
12
+ # Two classes of tell are deliberately NOT listed here, because a linter reads
13
+ # tokens and these are properties of a whole passage:
14
+ # * em-dash density — one is punctuation, nine on a screen is a signature.
15
+ # * rule-of-three parallelism, and closing lines that assert a thing's
16
+ # significance instead of stating what it does.
17
+ # style/README.md ("Writing") carries those, since they need a human read.
18
+ tokens:
19
+ # puffery and promotional register
20
+ - boasts?
21
+ - nestled
22
+ - groundbreaking
23
+ - renowned
24
+ - cutting[- ]edge
25
+ - state[- ]of[- ]the[- ]art
26
+ - game[- ]chang(er|ing)
27
+ - best[- ]in[- ]class
28
+ - seamless(ly)?
29
+ - vibrant
30
+ - rich tapestry
31
+ - tapestry
32
+ # inflated significance
33
+ - testament to
34
+ - pivotal
35
+ - stands as
36
+ - serves as
37
+ - plays a (vital|key|crucial|significant) role
38
+ - underscor(e|es|ing)
39
+ - highlight(s|ing) the importance
40
+ - indelible mark
41
+ - ever[- ]evolving
42
+ - evolving landscape
43
+ # filler analysis and hedged attribution
44
+ - valuable insights?
45
+ - it('s| is) worth noting
46
+ - experts (argue|say|agree)
47
+ - industry reports?
48
+ - observers have
49
+ # LLM-favoured connectives and verbs
50
+ - delve
51
+ - delving
52
+ - meticulous(ly)?
53
+ - intricac(y|ies)
54
+ - myriad
55
+ - plethora
56
+ - realm of
57
+ - navigate the
58
+ - foster(ing)?
59
+ - resonate(s|d)? with
60
+ - align(s|ed)? with
61
+ # negative parallelism
62
+ - not just .{1,40} but
63
+ - not only .{1,40} but also
64
+ # essay scaffolding
65
+ - in conclusion
66
+ - overall,
67
+ - moreover,
68
+ - furthermore,
69
+ - additionally,
@@ -5,6 +5,8 @@ allowlisted
5
5
  argparse
6
6
  Arize
7
7
  Attio
8
+ backtick
9
+ backticks
8
10
  Bagisto
9
11
  bmad
10
12
  bookended
@@ -212,6 +212,24 @@ line coverage. Target `boost_cli/core` behavior with assertions, not just import
212
212
  a workflow is rendered per agent (TOML for Gemini, see
213
213
  `workflows.TOML_COMMAND_AGENTS`). Installing a rule therefore edits a file the
214
214
  user reads every session — treat it as more invasive than a skill, not less.
215
+ - **A long line is either chrome or data, and only chrome may be wrapped.**
216
+ `out.wrap()` folds prose to the pane, and the emitters take it opt-in —
217
+ `warn`/`info`/`dim`/`kv` accept `wrap=True` and each pays for its own prefix,
218
+ so continuations align under the message rather than folding to column zero.
219
+ It is opt-in because always-on wrapping would fold the lines that must stay
220
+ long: `pulse`'s `source=` paths and `fingerprint`'s 64-character hash are the
221
+ information the line exists to carry, and a hash split across two lines
222
+ cannot be compared by eye. **A backtick span is one atomic token**, spaces
223
+ and all — `doctor` and `search` both interpolate `dense.fix_hint()`, whose
224
+ answers end in `pip install 'boost-skill-cli[rag]'`, and a wrap that splits
225
+ that hands the user a command which does not run. A token wider than the pane
226
+ overflows whole rather than breaking. Wrap *before* adding color: `out.role`
227
+ brackets its argument with a start code and a reset, so coloring first and
228
+ splitting after leaves line one unterminated and line two plain. And
229
+ budget the emitter's own indent — wrapping to the full `term_width()` and
230
+ then letting `out.info` add two spaces is what put `boost search`'s hint one
231
+ column past the pane it had just been fitted to.
232
+
215
233
  - **Sub-actions of one action repo move in lockstep.** `github/codeql-action/{init,
216
234
  analyze,upload-sarif}` and `actions/cache{,/save,/restore}` are each *one repo at
217
235
  one commit*, but Dependabot tracks one `uses:` path as one dependency and raises a
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.21
3
+ Version: 1.2.23
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.21'
22
- __version_tuple__ = version_tuple = (1, 2, 21)
21
+ __version__ = version = '1.2.23'
22
+ __version_tuple__ = version_tuple = (1, 2, 23)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -12,7 +12,6 @@ import re
12
12
  import shutil
13
13
  import subprocess
14
14
  import sys
15
- import textwrap
16
15
  import threading
17
16
  import time
18
17
  import urllib.parse
@@ -152,7 +151,7 @@ def cmd_search(argv):
152
151
  if reranked:
153
152
  scored, ranker = reranked, "Claude Haiku relevance"
154
153
  else:
155
- out.warn(ai.fallback_note())
154
+ out.warn(ai.fallback_note(), wrap=True)
156
155
  shown = scored[:args.limit]
157
156
  # The dot marks "a skill by this name is installed" — a name match, with
158
157
  # the known homonym caveat (13 real skills share `code-reviewer`). A lock
@@ -228,8 +227,12 @@ def _hint_semantic_search(engine: str) -> None:
228
227
  # runnable — a copy-pasteable `pip install ...` matters more than a hard
229
228
  # clamp, and _FIX is tested to hold no token long enough to overflow.
230
229
  msg = "semantic search is off — %s" % dense.fix_hint(st.get("reason", ""), st)
231
- for line in textwrap.wrap(msg, max(out.term_width(), 20),
232
- break_long_words=False, break_on_hyphens=False):
230
+ # `- 2` pays for the indent `out.info` adds: wrapping to the full width and
231
+ # then indenting is what put this hint one column over the pane. Wrap
232
+ # first, colour each line after — `out.role` brackets its argument with a
233
+ # start code and a reset, so colouring first and splitting after leaves the
234
+ # first line unterminated and the second uncoloured.
235
+ for line in out.wrap(msg, max(out.term_width() - 2, 20)):
233
236
  out.info(out.role(line, "muted"))
234
237
 
235
238
 
@@ -315,7 +318,8 @@ def cmd_reindex(argv):
315
318
  ", ".join(stats["reindexed"]) or "none"), "muted"))
316
319
  if args.dense:
317
320
  if dense_stats is None:
318
- out.warn("dense index skipped — %s" % embed.fallback_note())
321
+ out.warn("dense index skipped — %s" % embed.fallback_note(),
322
+ wrap=True)
319
323
  else:
320
324
  failed = dense_stats.get("failed") or []
321
325
  if failed:
@@ -694,7 +694,7 @@ def cmd_explain(argv):
694
694
  "extractive summary instead"
695
695
  % ", ".join(faithfulness.ungrounded_terms(reply, text)[:4]))
696
696
  else:
697
- out.warn(ai.fallback_note())
697
+ out.warn(ai.fallback_note(), wrap=True)
698
698
  meta, body = frontmatter.parse(text)
699
699
  desc = str(meta.get("description") or "").strip()
700
700
  if desc:
@@ -46,7 +46,7 @@ def _note_fallback() -> None:
46
46
  """Warn once per invocation that the AI path is unavailable."""
47
47
  global _warned_fallback
48
48
  if not _warned_fallback:
49
- out.warn(ai.fallback_note())
49
+ out.warn(ai.fallback_note(), wrap=True)
50
50
  _warned_fallback = True
51
51
 
52
52
 
@@ -279,8 +279,12 @@ def cmd_simulate(argv: list[str]) -> int:
279
279
  out.info(" • (no imperative rules found in the skill body)")
280
280
  desc = str(meta.get("description") or "").strip()
281
281
  if desc:
282
- out.info(out.role('likely triggers when the task involves: "%s"'
283
- % desc[:100], "muted"))
282
+ # Clipped to 100 characters, which is a length and not a width: at
283
+ # 80 columns the quoted description ran seven past the pane. Wrapping
284
+ # shows the same clipped text and fits it.
285
+ trigger = 'likely triggers when the task involves: "%s"' % desc[:100]
286
+ for line in out.wrap(trigger, max(out.term_width() - 2, 20)):
287
+ out.info(out.role(line, "muted"))
284
288
  return 0
285
289
 
286
290
 
@@ -1191,8 +1195,10 @@ def _chat_session(args) -> int:
1191
1195
  if not ai.available():
1192
1196
  # Worth saying up front rather than letting every answer look terse for
1193
1197
  # an unexplained reason.
1194
- out.info(out.role("no AI configured — answers are the grounded matches "
1195
- "themselves (%s)" % ai.fallback_note(), "muted"))
1198
+ note = ("no AI configured — answers are the grounded matches "
1199
+ "themselves (%s)" % ai.fallback_note())
1200
+ for line in out.wrap(note, max(out.term_width() - 2, 20)):
1201
+ out.info(out.role(line, "muted"))
1196
1202
  out.info(out.role("ask about skills; blank line or Ctrl-D to exit", "muted"))
1197
1203
  history: list[chat_engine.Turn] = []
1198
1204
  while True:
@@ -364,10 +364,10 @@ def cmd_doctor(argv):
364
364
 
365
365
  out.heading("boost doctor")
366
366
 
367
- def bad(msg):
367
+ def bad(msg, wrap=False):
368
368
  nonlocal issues
369
369
  issues += 1
370
- out.warn(msg)
370
+ out.warn(msg, wrap=wrap)
371
371
 
372
372
  if gitutil.has_git():
373
373
  out.ok("git on PATH")
@@ -633,11 +633,12 @@ def _report_search_engine(bad) -> None:
633
633
  elif st["reason"] == "empty":
634
634
  detail += " but holds no vectors"
635
635
  bad("semantic search silently off — %d-chunk vector store %s; "
636
- "searches are using BM25. %s" % (st["chunks"], detail, fix))
636
+ "searches are using BM25. %s" % (st["chunks"], detail, fix),
637
+ wrap=True)
637
638
  return
638
639
 
639
640
  out.info("semantic search not configured — using the full-content BM25 "
640
- "engine (%s)" % fix)
641
+ "engine (%s)" % fix, wrap=True)
641
642
 
642
643
 
643
644
  def _print_skipped(skipped: list[dict]) -> None:
@@ -1010,7 +1011,7 @@ def cmd_conflict(argv):
1010
1011
  if i in confirmed:
1011
1012
  p["kind"] = "ai-confirmed"
1012
1013
  elif heuristic and not args.json:
1013
- out.warn(ai.fallback_note())
1014
+ out.warn(ai.fallback_note(), wrap=True)
1014
1015
 
1015
1016
  if args.json:
1016
1017
  print(json.dumps({"pairs": pairs}))
@@ -1058,8 +1059,10 @@ def cmd_changelog(argv):
1058
1059
  if not lines:
1059
1060
  out.warn("no history found for %s in %s" % (rel, tap.name))
1060
1061
  if len(lines) < 3:
1061
- print(out.role(" (shallow clone: run `git -C %s fetch --unshallow` "
1062
- "for full history)" % _tilde(tap.path), "muted"))
1062
+ note = ("(shallow clone: run `git -C %s fetch --unshallow` "
1063
+ "for full history)" % _tilde(tap.path))
1064
+ for line in out.wrap(note, max(out.term_width() - 2, 20)):
1065
+ print(out.role(" " + line, "muted"))
1063
1066
  return 0
1064
1067
 
1065
1068
 
@@ -481,8 +481,14 @@ def cmd_protocol(argv) -> int:
481
481
  if system == "Linux":
482
482
  out.kv("desktop", _tilde(_desktop_file())
483
483
  if _desktop_file().exists() else "not registered")
484
- out.kv("URL forms", "boost://install/<skill> · boost://install/<tap>:<skill> "
485
- "· boost://tap/<owner>/<repo>")
484
+ # One form per row rather than a `·`-joined run: the run was 100 columns,
485
+ # and wrapping it strands a bare `·` at the start of a line, because the
486
+ # separator is a word to any wrapper. A form per row needs no separator and
487
+ # reads the same at every width.
488
+ for i, form in enumerate(("boost://install/<skill>",
489
+ "boost://install/<tap>:<skill>",
490
+ "boost://tap/<owner>/<repo>")):
491
+ out.kv("URL forms" if i == 0 else "", form)
486
492
  out.dim(" try it: boost protocol open boost://install/brainstorming")
487
493
  return 0
488
494
 
@@ -713,7 +719,7 @@ def cmd_who(argv) -> int:
713
719
  out.table(rows[:20], headers=("WHEN", "USER", "ACTION"))
714
720
  print()
715
721
  out.dim("based on the local journal — in a team setup, pulse feeds "
716
- "aggregate via `boost onboard`")
722
+ "aggregate via `boost onboard`", wrap=True)
717
723
  return 0
718
724
 
719
725
  users: dict[str, dict] = {}
@@ -738,5 +744,5 @@ def cmd_who(argv) -> int:
738
744
  out.table(board, headers=("USER", "EVENTS", "SKILLS", "INSTALLS", "LAST ACTIVE"))
739
745
  print()
740
746
  out.dim("based on the local journal — in a team setup, pulse feeds aggregate "
741
- "via `boost onboard`")
747
+ "via `boost onboard`", wrap=True)
742
748
  return 0
@@ -200,20 +200,38 @@ def gradient(text: str, stream=None) -> str:
200
200
  return "".join(out)
201
201
 
202
202
 
203
+ def _wrap_lines(msg: str, lead: int) -> list[str]:
204
+ """Wrap `msg` for an emitter whose own prefix costs `lead` columns.
205
+
206
+ Returns at least one line so an emitter never silently prints nothing for a
207
+ message it was given; the emitter decides what its prefix and continuation
208
+ padding look like.
209
+ """
210
+ return wrap(msg, term_width() - lead) or [msg]
211
+
212
+
203
213
  def ok(msg: str) -> None:
204
214
  """Print msg as an indented success line with a green check mark."""
205
215
  print(" " + role("✓", "success") + " " + msg)
206
216
 
207
217
 
208
- def warn(msg: str, stream=None) -> None:
218
+ def warn(msg: str, stream=None, wrap: bool = False) -> None:
209
219
  """Print msg as an indented `!` warning line, all in the warn role.
210
220
 
211
221
  ``stream`` exists for the commands that also speak JSON on stdout: a notice
212
222
  about *which corpus answered* has to survive `--json`, and the old choice
213
223
  was between corrupting the JSON and suppressing the notice entirely. Passing
214
224
  ``sys.stderr`` keeps both.
225
+
226
+ ``wrap`` is opt-in per call site rather than always-on, because not every
227
+ long line is prose: `pulse`'s `source=` paths and `fingerprint`'s hash are
228
+ data, and folding those destroys the information the line exists to carry.
229
+ Prose hints pass it; data lines do not.
215
230
  """
216
- print(" " + role("!", "warn") + " " + role(msg, "warn"), file=stream)
231
+ body = _wrap_lines(msg, 4) if wrap else [msg]
232
+ for i, line in enumerate(body):
233
+ lead = " " + role("!", "warn") + " " if i == 0 else " "
234
+ print(lead + role(line, "warn"), file=stream)
217
235
 
218
236
 
219
237
  def err(msg: str, hint: str | None = None) -> None:
@@ -223,11 +241,17 @@ def err(msg: str, hint: str | None = None) -> None:
223
241
  print(c(" hint: " + hint, DIM), file=sys.stderr)
224
242
 
225
243
 
226
- def info(msg: str = "", stream=None) -> None:
244
+ def info(msg: str = "", stream=None, wrap: bool = False) -> None:
227
245
  """Print msg indented two spaces; a blank line when msg is empty.
228
246
 
229
247
  ``stream`` as in :func:`warn` — so a hint can accompany a stderr notice.
248
+ ``wrap`` as in :func:`warn`, and it never turns the empty message into no
249
+ output at all: a caller printing a blank spacer still gets its blank line.
230
250
  """
251
+ if wrap and msg:
252
+ for line in _wrap_lines(msg, 2):
253
+ print(" " + line, file=stream)
254
+ return
231
255
  print(" " + msg if msg else "", file=stream)
232
256
 
233
257
 
@@ -252,9 +276,14 @@ def plain(text: object) -> str:
252
276
  return _CONTROL_RE.sub("", str(text))
253
277
 
254
278
 
255
- def dim(msg: str) -> None:
256
- """Print msg in the muted role (dim when color is on)."""
257
- print(role(msg, "muted"))
279
+ def dim(msg: str, wrap: bool = False) -> None:
280
+ """Print msg in the muted role (dim when color is on).
281
+
282
+ ``wrap`` as in :func:`warn`. `dim` prints flush left, so the wrapped
283
+ continuations are flush left too — there is no marker to align under.
284
+ """
285
+ for line in (_wrap_lines(msg, 0) if wrap else [msg]):
286
+ print(role(line, "muted"))
258
287
 
259
288
 
260
289
  def heading(msg: str) -> None:
@@ -310,6 +339,80 @@ def visible_len(s: str) -> int:
310
339
  return len(_ANSI_RE.sub("", s))
311
340
 
312
341
 
342
+ _CODE_SPAN_RE = re.compile(r"`[^`]*`")
343
+
344
+
345
+ def _wrap_tokens(text: str) -> list[str]:
346
+ """Split text into wrap units, keeping each `code span` whole.
347
+
348
+ A backtick span is one token even though it contains spaces, because the
349
+ spans in boost's hints are shell commands the user is meant to select and
350
+ paste — `pip install 'boost-skill-cli[rag]'`. Everything outside a span is
351
+ split on whitespace, which collapses runs and newlines the way
352
+ :func:`truncate` does; the span itself is copied verbatim, so a command
353
+ that legitimately holds two spaces survives.
354
+
355
+ An unterminated backtick simply never matches, and its text wraps as
356
+ ordinary words. That is the right failure: a half-open span is a typo in
357
+ the message, not a reason to refuse to render it.
358
+ """
359
+ parts: list[str] = []
360
+ pos = 0
361
+ for m in _CODE_SPAN_RE.finditer(text):
362
+ parts.extend(text[pos:m.start()].split())
363
+ parts.append(m.group(0))
364
+ pos = m.end()
365
+ parts.extend(text[pos:].split())
366
+ return parts
367
+
368
+
369
+ def wrap(text: str, width: int | None = None, indent: str = "") -> list[str]:
370
+ """Greedy word-wrap to `width` visible columns, never splitting a code span.
371
+
372
+ Returns one string per line: the first bare, the rest prefixed with
373
+ `indent`, and every one measured with :func:`visible_len` so a coloured
374
+ message is bounded by what the pane shows rather than by its byte count.
375
+ ``width`` defaults to the live terminal.
376
+
377
+ **A token wider than the line is emitted whole and overflows.** That is
378
+ deliberate and it is the reason this is not `textwrap.wrap(break_long_words
379
+ =True)`: the tokens that hit this case are the backticked commands, and a
380
+ command chopped at column 80 is worse than useless — the user pastes it and
381
+ it fails. One long line the terminal soft-wraps still yields the right text
382
+ on a copy.
383
+
384
+ Empty (or all-whitespace) text wraps to no lines at all, so a caller can
385
+ tell "nothing to say" from "one blank line".
386
+ """
387
+ width = term_width() if width is None else width
388
+ tokens = _wrap_tokens(text)
389
+ if not tokens:
390
+ return []
391
+ pad = visible_len(indent)
392
+ lines: list[str] = []
393
+ cur = ""
394
+ for tok in tokens:
395
+ # The first line spends the full width; every later one pays for the
396
+ # indent. No floor under the subtraction: a pane narrower than its own
397
+ # indent yields a limit no token can meet, and each token lands on its
398
+ # own line — which is the same answer a floor of 1 gives, because the
399
+ # fit test below is never satisfiable below 3 columns anyway.
400
+ limit = width if not lines else width - pad
401
+ if cur and visible_len(cur) + 1 + visible_len(tok) <= limit:
402
+ cur += " " + tok
403
+ else:
404
+ if cur:
405
+ lines.append(cur)
406
+ cur = tok
407
+ lines.append(cur)
408
+ return [lines[0]] + [indent + ln for ln in lines[1:]]
409
+
410
+
411
+ #: Alias for callers that take a ``wrap`` keyword argument of their own, which
412
+ #: would otherwise shadow the function inside their own body.
413
+ wrap_text = wrap
414
+
415
+
313
416
  def panel(lines, title: str | None = None, hue: str = "cyan") -> str:
314
417
  """A rounded box around one or more lines, with an Aurora-tinted border and
315
418
  an optional title set into the top rule — the terminal echo of the web
@@ -506,11 +609,23 @@ def format_search_row(name: str, desc: str, kind: str, tap: str, frac: float,
506
609
  return row.rstrip()
507
610
 
508
611
 
509
- def kv(key: str, value: str, width: int = 14) -> None:
510
- """Print an indented key/value line: dim key padded to width, then value."""
612
+ def kv(key: str, value: str, width: int = 14, wrap: bool = False) -> None:
613
+ """Print an indented key/value line: dim key padded to width, then value.
614
+
615
+ ``wrap`` as in :func:`warn`, and the continuations align under the *value*
616
+ rather than the key — a value folded back to column 0 reads as a new row.
617
+ """
511
618
  # The str() is NOT redundant despite the annotation: callers pass raw ints
512
619
  # (e.g. `boost impact` prints files_touched), which would raise TypeError.
513
- print(" " + c(key.ljust(width), DIM) + str(value)) # noqa: FURB123
620
+ text = str(value) # noqa: FURB123
621
+ if not wrap:
622
+ print(" " + c(key.ljust(width), DIM) + text)
623
+ return
624
+ lead = 2 + width
625
+ lines = wrap_text(text, term_width() - lead) or [text]
626
+ print(" " + c(key.ljust(width), DIM) + lines[0])
627
+ for line in lines[1:]:
628
+ print(" " * lead + line)
514
629
 
515
630
 
516
631
  def _pad(cell: str, width: int) -> str:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.21
3
+ Version: 1.2.23
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -24,6 +24,7 @@ noxfile.py
24
24
  pyproject.toml
25
25
  setup.cfg
26
26
  sonar-project.properties
27
+ .vale/styles/boost/AIWriting.yml
27
28
  .vale/styles/boost/Terminology.yml
28
29
  .vale/styles/config/vocabularies/boost/accept.txt
29
30
  boost_cli/__init__.py
@@ -543,6 +544,7 @@ tests/functional/test_cli_discovery.py
543
544
  tests/functional/test_cli_hooks.py
544
545
  tests/functional/test_cli_info.py
545
546
  tests/functional/test_cli_intelligence.py
547
+ tests/functional/test_cli_pane_width.py
546
548
  tests/functional/test_cli_pkg.py
547
549
  tests/functional/test_cli_quality.py
548
550
  tests/functional/test_cli_taps.py
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schema": 1,
3
- "generated": "2026-08-18T06:55:00Z",
4
- "commit": "3a28b3f",
3
+ "generated": "2026-08-25T06:59:06Z",
4
+ "commit": "1167bcd",
5
5
  "engine": "bm25",
6
6
  "corpus": {
7
7
  "entries": 57,
@@ -0,0 +1,69 @@
1
+ ---
2
+ id: long-hints-overflow-narrow-panes
3
+ board: code
4
+ section: dx
5
+ status: inflight
6
+ category: CLI · Output
7
+ complexity: M
8
+ impact: Low
9
+ wow: 2
10
+ note: a code span is one atomic token, so a hint folds to the pane without splitting the command it tells you to run
11
+ order: 126
12
+ owner: loop/wrap-long-hints
13
+ pr:
14
+ title: The hints still run past the pane, and the worst one is pinned by six test files
15
+ ---
16
+ <b>Measured, at <code>COLUMNS=80</code>, over 46 commands.</b> After the box and the help screen
17
+ were fitted, <b>11</b> still emitted a line past 80 columns. Ranked:
18
+ <code>doctor</code>'s semantic-search hint at <b>127</b>; the AI-fallback notice at <b>101</b>,
19
+ which is one shared string surfacing in six places; <code>protocol</code>'s URL forms at 100;
20
+ <code>changelog</code>'s unshallow hint at 93; <code>who</code>'s footer at 87;
21
+ <code>search</code>'s extra hint at 82. A re-measure while claiming this found a twelfth the
22
+ first pass missed — <code>simulate</code>'s quoted trigger line at <b>97</b>, which clips the
23
+ description to 100 <em>characters</em>, a length rather than a width.
24
+
25
+ <b>Two of them must be left alone.</b> <code>pulse</code>'s <code>source=</code> paths and
26
+ <code>fingerprint</code>'s hash are data, not chrome — clipping them destroys the information the
27
+ line exists to carry, and a hash broken across two lines cannot be compared by eye. So a blanket
28
+ &ldquo;no line exceeds <code>term_width()</code>&rdquo; assertion is the wrong gate: it would
29
+ false-positive on exactly the lines that should be long.
30
+
31
+ <b>What shipped: a code span is one atomic token.</b> <code>out.wrap()</code> is a greedy word
32
+ wrap in which a backticked span is a single unbreakable unit even though it contains spaces,
33
+ because the spans in these hints are shell commands the user is meant to select and paste. That
34
+ is the whole reason this is not two lines of <code>textwrap</code>: <code>doctor</code> and
35
+ <code>search</code> both interpolate <code>dense.fix_hint()</code>, whose answers end in
36
+ <code>pip install 'boost-skill-cli[rag]'</code>, and a wrap that splits it hands the user a
37
+ command that does not run. A token wider than the pane is emitted whole and overflows — one long
38
+ line the terminal soft-wraps still yields the right text on a copy, which a bisected one does not.
39
+ <code>search</code> already wrapped, with a comment conceding it relied on a test that no
40
+ <code>_FIX</code> entry holds an over-long token; the span rule makes that structural. It also
41
+ wrapped to the <em>full</em> width and then let <code>out.info</code> indent by two, which is
42
+ precisely the 82.
43
+
44
+ <b>Wrapping is opt-in per call site, and that is the design.</b> <code>warn</code>,
45
+ <code>info</code>, <code>dim</code> and <code>kv</code> take <code>wrap=True</code> and each pays
46
+ for its own prefix — the marker, the indent, the key column — so continuations align under the
47
+ message rather than folding back to column zero. Always-on wrapping would have folded the two
48
+ data lines this item exists to protect.
49
+
50
+ <b>Two claims in the first draft of this card did not survive measurement.</b> It said the
51
+ 101-column offender was pinned by <b>six</b> test files; only <b>one</b> pins it verbatim
52
+ (<code>test_ai_fallback_note_verbatim</code>, the mutant-killer, which wraps at the <em>emission
53
+ site</em> and so was never touched). The other five pin the substring
54
+ <code>using the heuristic fallback</code>, and are re-pinned against whitespace-collapsed output —
55
+ an idiom <code>test_cli_discovery.py</code> had already established, for this exact reason. The
56
+ BDD feature got a separate <code>should contain wrapped</code> step rather than collapsing inside
57
+ <code>the output should contain</code>, which eleven feature files use ~87 times.
58
+
59
+ <b>Result: eight overflowing lines became two, and the two are the data lines.</b> The gate splits
60
+ the commands by whose words are on the line — <code>search</code>, <code>who</code> and
61
+ <code>protocol</code> compose their whole output and are swept down to 40 columns; commands that
62
+ quote a skill's own rules are swept at 80 and wider, because reflowing someone else's prose is a
63
+ different decision from fitting boost's own hints.
64
+
65
+ <b>Still open, found by the new gate rather than by this card.</b> At 40 and 60 columns
66
+ <code>doctor</code>'s <code>·</code>-joined status summaries run to 71, and
67
+ <code>protocol</code>'s <code>try it:</code> example is a single 59-column command that cannot
68
+ fold. Neither is in this item's scope — both are recorded here so the next pass does not
69
+ rediscover them as new.