boost-skill-cli 1.2.21__tar.gz → 1.2.22__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 (746) hide show
  1. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.vale/styles/config/vocabularies/boost/accept.txt +2 -0
  2. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/CLAUDE.md +18 -0
  3. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/PKG-INFO +1 -1
  4. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/_version.py +2 -2
  5. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/discovery.py +9 -5
  6. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/info.py +1 -1
  7. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/intelligence.py +11 -5
  8. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/quality.py +10 -7
  9. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/team.py +10 -4
  10. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/output.py +124 -9
  11. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  12. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  13. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/eval-latest.json +2 -2
  14. boost_skill_cli-1.2.22/docs/roadmap/items/long-hints-overflow-narrow-panes.md +69 -0
  15. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap.html +52 -21
  16. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/explain.feature +2 -2
  17. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/steps/cli_steps.py +14 -0
  18. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_discovery.py +1 -1
  19. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_info.py +1 -1
  20. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_intelligence.py +25 -12
  21. boost_skill_cli-1.2.22/tests/functional/test_cli_pane_width.py +137 -0
  22. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_quality.py +2 -2
  23. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_team.py +6 -2
  24. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_output.py +217 -0
  25. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/visual/package-lock.json +12 -12
  26. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/visual/package.json +1 -1
  27. boost_skill_cli-1.2.21/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -38
  28. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.gitattributes +0 -0
  29. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.gitignore +0 -0
  30. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.gitleaks.toml +0 -0
  31. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.htmlvalidate.json +0 -0
  32. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.lighthouserc.json +0 -0
  33. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.lycheeignore +0 -0
  34. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.markdownlint-cli2.jsonc +0 -0
  35. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.pre-commit-config.yaml +0 -0
  36. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.stylelintrc.json +0 -0
  37. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.vale/styles/boost/Terminology.yml +0 -0
  38. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/.vale.ini +0 -0
  39. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/CODE_OF_CONDUCT.md +0 -0
  40. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/CONTRIBUTING.md +0 -0
  41. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/LICENSE +0 -0
  42. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/MANIFEST.in +0 -0
  43. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/Makefile +0 -0
  44. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/README.md +0 -0
  45. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/SECURITY.md +0 -0
  46. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost +0 -0
  47. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/__init__.py +0 -0
  48. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/__main__.py +0 -0
  49. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/cli.py +0 -0
  50. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/cliparse.py +0 -0
  51. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/__init__.py +0 -0
  52. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/_common.py +0 -0
  53. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/bmad.py +0 -0
  54. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/configuration.py +0 -0
  55. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/hooks.py +0 -0
  56. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/pkg.py +0 -0
  57. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/run.py +0 -0
  58. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/safety.py +0 -0
  59. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/commands/taps.py +0 -0
  60. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/__init__.py +0 -0
  61. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/adapters.py +0 -0
  62. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/agents.py +0 -0
  63. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/ai.py +0 -0
  64. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/bmad.py +0 -0
  65. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/bootstrap.py +0 -0
  66. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/browse.py +0 -0
  67. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/builtin.py +0 -0
  68. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/capabilities.py +0 -0
  69. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/catalog.py +0 -0
  70. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/catalogbundle.py +0 -0
  71. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/chat.py +0 -0
  72. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/claude_settings.py +0 -0
  73. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/complete.py +0 -0
  74. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/config.py +0 -0
  75. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/dense.py +0 -0
  76. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/ed25519.py +0 -0
  77. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/embed.py +0 -0
  78. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/faithfulness.py +0 -0
  79. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/frontmatter.py +0 -0
  80. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/gitutil.py +0 -0
  81. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/imperative.py +0 -0
  82. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/injectscan.py +0 -0
  83. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/installscan.py +0 -0
  84. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/integrity.py +0 -0
  85. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/journal.py +0 -0
  86. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/localembed.py +0 -0
  87. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/lockfile.py +0 -0
  88. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/logs.py +0 -0
  89. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/mcp.py +0 -0
  90. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/mcpdecl.py +0 -0
  91. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/mcphost.py +0 -0
  92. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/minisign.py +0 -0
  93. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/nethttp.py +0 -0
  94. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/paths.py +0 -0
  95. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/policy.py +0 -0
  96. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/projectlock.py +0 -0
  97. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/provenance.py +0 -0
  98. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/rag.py +0 -0
  99. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/registry.py +0 -0
  100. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/resolve.py +0 -0
  101. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/rules.py +0 -0
  102. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/scopes.py +0 -0
  103. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/secretscan.py +0 -0
  104. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/selfupdate.py +0 -0
  105. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/serve.py +0 -0
  106. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/stackprobe.py +0 -0
  107. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/staleness.py +0 -0
  108. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/store.py +0 -0
  109. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/trustaudit.py +0 -0
  110. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/typosquat.py +0 -0
  111. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/updatediff.py +0 -0
  112. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/util.py +0 -0
  113. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/core/workflows.py +0 -0
  114. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/data/registries.json +0 -0
  115. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/data/rules/boost-first.mdc +0 -0
  116. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/errors.py +0 -0
  117. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_cli/spin.py +0 -0
  118. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_langchain/__init__.py +0 -0
  119. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_langchain/_compat.py +0 -0
  120. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_langchain/graph.py +0 -0
  121. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_langchain/loader.py +0 -0
  122. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_langchain/py.typed +0 -0
  123. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_langchain/retriever.py +0 -0
  124. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  125. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  126. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_skill_cli.egg-info/requires.txt +0 -0
  127. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/boost_skill_cli.egg-info/top_level.txt +0 -0
  128. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/codecov.yml +0 -0
  129. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/.claude/settings.local.json +0 -0
  130. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/DEBUGGING.md +0 -0
  131. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/adapters.html +0 -0
  132. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/architecture/README.md +0 -0
  133. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/architecture/c4-components-core.md +0 -0
  134. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/architecture/c4-containers.md +0 -0
  135. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/architecture/c4-context.md +0 -0
  136. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/architecture/c4-dynamic-install.md +0 -0
  137. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/gifs/distill.gif +0 -0
  138. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/gifs/doctor.gif +0 -0
  139. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/gifs/explain.gif +0 -0
  140. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/gifs/hooks.gif +0 -0
  141. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/gifs/install.gif +0 -0
  142. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/gifs/pulse.gif +0 -0
  143. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/gifs/search.gif +0 -0
  144. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/gifs/tap.gif +0 -0
  145. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/tapes/distill.tape +0 -0
  146. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/tapes/doctor.tape +0 -0
  147. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/tapes/explain.tape +0 -0
  148. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/tapes/hooks.tape +0 -0
  149. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/tapes/install.tape +0 -0
  150. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/tapes/pulse.tape +0 -0
  151. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/tapes/search.tape +0 -0
  152. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel/tapes/tap.tape +0 -0
  153. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/carousel.html +0 -0
  154. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/chat.html +0 -0
  155. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/commands.html +0 -0
  156. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/demo-index.json +0 -0
  157. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/demo.gif +0 -0
  158. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/demo.html +0 -0
  159. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/demo.tape +0 -0
  160. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/design-roadmap.html +0 -0
  161. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/eval.html +0 -0
  162. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/index.html +0 -0
  163. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/langchain.html +0 -0
  164. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/mcp-hub.html +0 -0
  165. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/rag-architecture.md +0 -0
  166. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D01.md +0 -0
  167. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D02.md +0 -0
  168. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D03.md +0 -0
  169. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D04.md +0 -0
  170. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D05.md +0 -0
  171. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D06.md +0 -0
  172. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D07.md +0 -0
  173. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D08.md +0 -0
  174. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D09.md +0 -0
  175. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D10.md +0 -0
  176. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D11.md +0 -0
  177. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D12.md +0 -0
  178. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D13.md +0 -0
  179. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D14.md +0 -0
  180. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D15.md +0 -0
  181. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D16.md +0 -0
  182. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D17.md +0 -0
  183. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D18.md +0 -0
  184. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D19.md +0 -0
  185. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D20.md +0 -0
  186. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D21.md +0 -0
  187. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D22.md +0 -0
  188. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D23.md +0 -0
  189. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D24.md +0 -0
  190. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D25.md +0 -0
  191. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/BOOST-D26.md +0 -0
  192. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  193. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  194. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  195. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  196. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  197. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  198. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  199. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  200. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  201. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  202. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  203. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  204. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  205. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  206. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/boost-first-rule.md +0 -0
  207. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  208. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  209. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  210. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  211. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  212. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  213. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  214. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  215. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  216. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  217. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  218. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  219. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  220. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  221. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  222. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  223. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  224. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  225. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  226. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  227. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/command-carousel-page.md +0 -0
  228. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  229. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  230. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  231. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  232. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  233. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  234. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  235. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  236. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  237. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  238. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  239. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  240. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  241. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  242. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  243. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  244. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  245. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  246. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  247. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  248. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  249. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  250. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  251. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  252. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  253. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  254. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  255. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  256. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  257. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  258. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  259. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  260. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  261. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  262. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  263. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  264. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  265. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  266. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  267. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  268. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  269. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  270. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  271. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  272. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  273. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  274. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  275. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/github-community-health-files.md +0 -0
  276. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  277. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  278. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  279. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  280. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  281. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  282. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  283. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  284. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  285. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  286. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  287. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  288. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  289. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  290. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  291. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  292. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  293. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  294. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  295. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  296. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  297. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  298. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  299. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  300. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  301. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  302. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  303. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  304. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  305. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  306. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  307. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  308. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  309. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  310. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  311. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  312. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  313. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  314. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  315. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  316. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  317. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  318. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  319. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  320. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  321. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  322. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  323. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  324. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  325. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  326. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  327. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  328. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  329. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  330. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  331. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  332. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  333. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  334. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  335. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  336. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  337. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  338. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  339. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  340. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  341. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  342. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  343. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  344. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  345. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  346. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  347. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  348. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  349. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  350. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  351. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  352. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  353. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  354. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  355. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  356. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  357. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  358. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  359. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  360. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  361. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  362. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  363. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  364. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  365. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  366. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  367. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  368. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  369. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  370. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  371. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  372. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  373. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  374. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  375. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  376. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  377. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  378. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  379. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  380. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  381. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  382. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  383. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  384. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  385. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  386. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  387. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  388. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  389. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  390. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  391. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  392. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  393. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  394. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  395. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  396. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  397. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  398. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  399. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  400. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  401. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  402. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  403. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  404. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  405. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  406. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  407. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  408. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  409. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  410. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  411. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  412. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  413. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  414. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  415. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  416. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  417. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  418. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  419. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  420. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  421. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  422. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  423. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  424. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  425. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  426. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  427. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  428. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  429. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  430. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  431. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  432. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  433. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  434. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  435. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  436. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  437. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  438. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  439. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  440. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  441. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  442. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  443. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  444. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  445. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  446. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  447. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  448. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  449. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  450. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  451. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  452. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  453. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  454. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/workspace-scope-install.md +0 -0
  455. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/zip-strict-audit.md +0 -0
  456. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  457. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  458. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  459. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/eslint.config.mjs +0 -0
  460. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/README.md +0 -0
  461. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/__init__.py +0 -0
  462. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/baseline.json +0 -0
  463. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/faithfulness.py +0 -0
  464. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/golden_set.json +0 -0
  465. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/make_corpus.py +0 -0
  466. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/make_golden.py +0 -0
  467. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/metrics.py +0 -0
  468. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/publish_golden_dataset.py +0 -0
  469. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/evals/run_evals.py +0 -0
  470. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/examples/README.md +0 -0
  471. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/examples/adapt-demo.sh +0 -0
  472. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/examples/boost-run-prototype.sh +0 -0
  473. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/index.html +0 -0
  474. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/noxfile.py +0 -0
  475. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/pyproject.toml +0 -0
  476. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/coverage-tools.in +0 -0
  477. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/coverage-tools.txt +0 -0
  478. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/lint-tools.in +0 -0
  479. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/lint-tools.txt +0 -0
  480. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/mutation-tools.in +0 -0
  481. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/mutation-tools.txt +0 -0
  482. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/platform-pins.lock +0 -0
  483. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/release-tools.in +0 -0
  484. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/release-tools.txt +0 -0
  485. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/test-tools.in +0 -0
  486. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/requirements/test-tools.txt +0 -0
  487. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/a11y_check.py +0 -0
  488. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/bench_cli.sh +0 -0
  489. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/build_command_reference.py +0 -0
  490. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/build_demo_index.py +0 -0
  491. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/build_registries.py +0 -0
  492. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/build_roadmap.py +0 -0
  493. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/build_scale_corpus.py +0 -0
  494. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/check_anchors.py +0 -0
  495. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/check_licenses.py +0 -0
  496. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/check_required_checks.py +0 -0
  497. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/ensure_eval_corpus.sh +0 -0
  498. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/eval_corpus.py +0 -0
  499. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/eval_explain.py +0 -0
  500. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/eval_gate.py +0 -0
  501. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/eval_recommend.py +0 -0
  502. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/eval_retrieval.py +0 -0
  503. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/eval_stats_summary.py +0 -0
  504. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/import_budget.py +0 -0
  505. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/lock_toolchain.py +0 -0
  506. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/measure_registry.py +0 -0
  507. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/mutation_gate.py +0 -0
  508. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/mutation_shards.py +0 -0
  509. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/mutation_weights.json +0 -0
  510. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/page_budget.py +0 -0
  511. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/perf_gate.py +0 -0
  512. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/post_deploy_smoke.py +0 -0
  513. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/publish_eval_json.py +0 -0
  514. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/release_guard.py +0 -0
  515. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/release_preflight.py +0 -0
  516. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/scripts/serve_docs.py +0 -0
  517. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/setup.cfg +0 -0
  518. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/sonar-project.properties +0 -0
  519. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/style/README.md +0 -0
  520. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/style/boost.css +0 -0
  521. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/style/boost.js +0 -0
  522. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/style/demo.html +0 -0
  523. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/adapt.feature +0 -0
  524. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/browse.feature +0 -0
  525. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/count.feature +0 -0
  526. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/discover.feature +0 -0
  527. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/doctor.feature +0 -0
  528. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/environment.py +0 -0
  529. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/index.feature +0 -0
  530. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/install.feature +0 -0
  531. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/list.feature +0 -0
  532. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/mcp.feature +0 -0
  533. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/search.feature +0 -0
  534. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/steps/discovery_steps.py +0 -0
  535. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/steps/mcp_steps.py +0 -0
  536. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/bdd/features/steps/quality_steps.py +0 -0
  537. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/conftest.py +0 -0
  538. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/eval/baseline.json +0 -0
  539. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/eval/explain.jsonl +0 -0
  540. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/eval/golden-natural.jsonl +0 -0
  541. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/eval/golden.jsonl +0 -0
  542. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/eval/recommend.jsonl +0 -0
  543. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/eval/taps-scale.txt +0 -0
  544. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/eval/taps.txt +0 -0
  545. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_capabilities_policy.py +0 -0
  546. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_adapt.py +0 -0
  547. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_bmad.py +0 -0
  548. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_catalog.py +0 -0
  549. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_chat.py +0 -0
  550. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_configuration.py +0 -0
  551. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_hooks.py +0 -0
  552. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_pkg.py +0 -0
  553. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_cli_taps.py +0 -0
  554. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_everyday_loop.py +0 -0
  555. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_integrity_enforce.py +0 -0
  556. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_kind_conformance.py +0 -0
  557. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_property_parsers.py +0 -0
  558. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_run.py +0 -0
  559. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_tap_signing.py +0 -0
  560. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/functional/test_workspace_scope.py +0 -0
  561. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/README.md +0 -0
  562. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  563. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  564. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  565. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  566. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  567. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  568. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  569. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  570. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  571. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  572. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  573. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  574. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  575. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  576. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  577. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  578. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  579. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  580. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  581. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  582. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  583. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  584. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  585. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/fuzz_frontmatter.py +0 -0
  586. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/fuzz/fuzz_registry.py +0 -0
  587. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/langchain/conftest.py +0 -0
  588. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/langchain/test_graph.py +0 -0
  589. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/langchain/test_loader.py +0 -0
  590. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/langchain/test_retriever.py +0 -0
  591. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/make_fixture.py +0 -0
  592. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/perf/test_benchmarks.py +0 -0
  593. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/smoke.sh +0 -0
  594. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_a11y_check.py +0 -0
  595. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_action_pin_lockstep.py +0 -0
  596. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_adapters.py +0 -0
  597. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_adapters_multi.py +0 -0
  598. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_adapters_runner.py +0 -0
  599. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_agents.py +0 -0
  600. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_ai.py +0 -0
  601. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_bmad_core.py +0 -0
  602. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_boost_first_offer.py +0 -0
  603. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_bootstrap.py +0 -0
  604. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_browse.py +0 -0
  605. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_builtin.py +0 -0
  606. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_capabilities.py +0 -0
  607. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_catalog.py +0 -0
  608. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_catalogbundle.py +0 -0
  609. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_chat.py +0 -0
  610. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_check_anchors.py +0 -0
  611. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_check_licenses.py +0 -0
  612. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_claude_settings.py +0 -0
  613. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_clean_internal_cache.py +0 -0
  614. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_cliparse.py +0 -0
  615. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_codeql_analysis_key.py +0 -0
  616. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_command_reference_fresh.py +0 -0
  617. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_community_health_files.py +0 -0
  618. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_compact.py +0 -0
  619. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_complete.py +0 -0
  620. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_complete_rc_block.py +0 -0
  621. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_config.py +0 -0
  622. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_content_dedupe.py +0 -0
  623. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_content_identity.py +0 -0
  624. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_crash_redaction.py +0 -0
  625. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dedup_trust.py +0 -0
  626. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_demo_index.py +0 -0
  627. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense.py +0 -0
  628. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_embed_dedupe.py +0 -0
  629. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_fallback.py +0 -0
  630. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_fix_hint.py +0 -0
  631. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_quantized.py +0 -0
  632. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_ready_order.py +0 -0
  633. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_shard_real_schema.py +0 -0
  634. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  635. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_shards.py +0 -0
  636. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_status.py +0 -0
  637. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dense_status_cheap.py +0 -0
  638. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_dependabot_config.py +0 -0
  639. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_docs_pages_linked.py +0 -0
  640. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_docsite_chrome.py +0 -0
  641. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_ed25519.py +0 -0
  642. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_embed.py +0 -0
  643. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_embed_local.py +0 -0
  644. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_embed_truncated_response.py +0 -0
  645. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_entry_key.py +0 -0
  646. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_errors_and_cli_table.py +0 -0
  647. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_eval_baseline.py +0 -0
  648. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_eval_corpus.py +0 -0
  649. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_eval_faithfulness.py +0 -0
  650. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_eval_gate.py +0 -0
  651. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_eval_grading.py +0 -0
  652. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_eval_metrics.py +0 -0
  653. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_eval_stats_summary.py +0 -0
  654. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  655. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_faithfulness.py +0 -0
  656. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_frontmatter.py +0 -0
  657. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_fuzz_targets.py +0 -0
  658. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  659. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_gitleaks_config.py +0 -0
  660. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_gitutil.py +0 -0
  661. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_gitutil_lfs.py +0 -0
  662. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_gitutil_sparse.py +0 -0
  663. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_imperative.py +0 -0
  664. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_import_budget.py +0 -0
  665. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_injectscan.py +0 -0
  666. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_install_permission_error.py +0 -0
  667. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_installscan.py +0 -0
  668. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_integrity.py +0 -0
  669. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_journal.py +0 -0
  670. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_langchain_packaging.py +0 -0
  671. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_link_ownership.py +0 -0
  672. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_localembed.py +0 -0
  673. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_localembed_e2e.py +0 -0
  674. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_lockfile.py +0 -0
  675. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_logs.py +0 -0
  676. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_marketing_counts.py +0 -0
  677. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_mcp.py +0 -0
  678. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_mcp_install_scan.py +0 -0
  679. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_mcpdecl.py +0 -0
  680. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_mcphost.py +0 -0
  681. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_measure_registry.py +0 -0
  682. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_minisign.py +0 -0
  683. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_mutation_hardening.py +0 -0
  684. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_mutation_shards.py +0 -0
  685. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_mutation_subfile_shards.py +0 -0
  686. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_mutmut_source_paths.py +0 -0
  687. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_nethttp.py +0 -0
  688. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_page_budget.py +0 -0
  689. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_paths.py +0 -0
  690. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_perf_gate.py +0 -0
  691. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_pkg_confusions.py +0 -0
  692. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_pkg_injection.py +0 -0
  693. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_pkg_secrets.py +0 -0
  694. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_platform_pins.py +0 -0
  695. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_policy.py +0 -0
  696. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_post_deploy_smoke.py +0 -0
  697. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_project_mcp_sidecar.py +0 -0
  698. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_projectlock.py +0 -0
  699. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_provenance.py +0 -0
  700. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_publish_golden_dataset.py +0 -0
  701. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_rag.py +0 -0
  702. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_rag_fastpath.py +0 -0
  703. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_rag_fusion.py +0 -0
  704. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_registries_fresh.py +0 -0
  705. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_registry.py +0 -0
  706. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_registry_categories.py +0 -0
  707. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_registry_control_chars.py +0 -0
  708. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_release_guard.py +0 -0
  709. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_release_preflight.py +0 -0
  710. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_required_checks.py +0 -0
  711. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_rerank_cache.py +0 -0
  712. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_resolve.py +0 -0
  713. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_roadmap_fresh.py +0 -0
  714. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_rules.py +0 -0
  715. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_scale_corpus.py +0 -0
  716. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_scopes.py +0 -0
  717. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_secretscan.py +0 -0
  718. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_selfupdate.py +0 -0
  719. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_serve.py +0 -0
  720. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_serve_docs.py +0 -0
  721. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_shards_matrix.py +0 -0
  722. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_smoke_covers_every_command.py +0 -0
  723. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_spin.py +0 -0
  724. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_stackprobe.py +0 -0
  725. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_staleness.py +0 -0
  726. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_store.py +0 -0
  727. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_store_materialize.py +0 -0
  728. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_sync_blocked_links.py +0 -0
  729. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  730. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_token_parity.py +0 -0
  731. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_toolchain_lock.py +0 -0
  732. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_trustaudit.py +0 -0
  733. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_typosquat.py +0 -0
  734. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_updatediff.py +0 -0
  735. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_util.py +0 -0
  736. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_version.py +0 -0
  737. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_visual_harness_flags.py +0 -0
  738. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_workflow_concurrency.py +0 -0
  739. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  740. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  741. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_workflow_timeouts.py +0 -0
  742. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_workflows.py +0 -0
  743. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  744. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/visual/a11y_check.mjs +0 -0
  745. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/visual/console_check.mjs +0 -0
  746. {boost_skill_cli-1.2.21 → boost_skill_cli-1.2.22}/tests/visual/visual_check.mjs +0 -0
@@ -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.22
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.22'
22
+ __version_tuple__ = version_tuple = (1, 2, 22)
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.22
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -543,6 +543,7 @@ tests/functional/test_cli_discovery.py
543
543
  tests/functional/test_cli_hooks.py
544
544
  tests/functional/test_cli_info.py
545
545
  tests/functional/test_cli_intelligence.py
546
+ tests/functional/test_cli_pane_width.py
546
547
  tests/functional/test_cli_pkg.py
547
548
  tests/functional/test_cli_quality.py
548
549
  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.
@@ -9127,36 +9127,67 @@ output change, not a rider on this one. See <code>long-hints-overflow-narrow-pan
9127
9127
  </article>
9128
9128
 
9129
9129
  <article class="cap rcard" id="long-hints-overflow-narrow-panes">
9130
- <div class="head"><span class="pill next">Next</span><span class="cat">CLI · Output</span></div>
9130
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">CLI · Output</span></div>
9131
9131
  <h3>The hints still run past the pane, and the worst one is pinned by six test files</h3>
9132
9132
  <p><b>Measured, at <code>COLUMNS=80</code>, over 46 commands.</b> After the box and the help screen
9133
- were fitted, <b>11</b> still emit a line past 80 columns. Ranked:
9133
+ were fitted, <b>11</b> still emitted a line past 80 columns. Ranked:
9134
9134
  <code>doctor</code>'s semantic-search hint at <b>127</b>; the AI-fallback notice at <b>101</b>,
9135
- which is one shared string surfacing in <code>explain</code>, <code>impact</code> and
9136
- <code>simulate</code>; <code>protocol</code>'s URL forms at 100; <code>changelog</code>'s
9137
- unshallow hint at 93; <code>who</code>'s footer at 87; <code>search</code>'s extra hint at 82;
9138
- <code>replay</code>'s footer at 81.
9135
+ which is one shared string surfacing in six places; <code>protocol</code>'s URL forms at 100;
9136
+ <code>changelog</code>'s unshallow hint at 93; <code>who</code>'s footer at 87;
9137
+ <code>search</code>'s extra hint at 82. A re-measure while claiming this found a twelfth the
9138
+ first pass missed — <code>simulate</code>'s quoted trigger line at <b>97</b>, which clips the
9139
+ description to 100 <em>characters</em>, a length rather than a width.
9139
9140
 
9140
- <b>Two of the eleven must be left alone.</b> <code>pulse</code>'s <code>source=</code> paths and
9141
+ <b>Two of them must be left alone.</b> <code>pulse</code>'s <code>source=</code> paths and
9141
9142
  <code>fingerprint</code>'s hash are data, not chrome — clipping them destroys the information the
9142
- line exists to carry. So a blanket "no line exceeds <code>term_width()</code>" assertion is the
9143
- wrong gate: it would false-positive on exactly the lines that should be long. Pin the composed
9144
- sites individually.
9145
-
9146
- <b>Why this is not a quick wrap.</b> The 101-column offender contains
9147
- <code>using the heuristic fallback</code>, which is asserted by <b>six</b> test files plus
9148
- <code>tests/bdd/features/explain.feature</code>. Wrapping inserts a newline mid-sentence and
9149
- breaks every one of them; and under pytest <code>term_width()</code> falls back to 80, so the
9150
- wrap fires in the suite rather than only on a narrow terminal. The change is a
9151
- <code>wrap()</code> helper in <code>core/output.py</code> — mutation-gated, so boundary-width
9152
- tests, not coverage — plus re-pinning those assertions. Shortening the strings instead is a
9153
- smaller diff but a voice decision, and the substring pinned by the tests would have to survive
9154
- either way.</p>
9143
+ line exists to carry, and a hash broken across two lines cannot be compared by eye. So a blanket
9144
+ &ldquo;no line exceeds <code>term_width()</code>&rdquo; assertion is the wrong gate: it would
9145
+ false-positive on exactly the lines that should be long.
9146
+
9147
+ <b>What shipped: a code span is one atomic token.</b> <code>out.wrap()</code> is a greedy word
9148
+ wrap in which a backticked span is a single unbreakable unit even though it contains spaces,
9149
+ because the spans in these hints are shell commands the user is meant to select and paste. That
9150
+ is the whole reason this is not two lines of <code>textwrap</code>: <code>doctor</code> and
9151
+ <code>search</code> both interpolate <code>dense.fix_hint()</code>, whose answers end in
9152
+ <code>pip install 'boost-skill-cli[rag]'</code>, and a wrap that splits it hands the user a
9153
+ command that does not run. A token wider than the pane is emitted whole and overflows — one long
9154
+ line the terminal soft-wraps still yields the right text on a copy, which a bisected one does not.
9155
+ <code>search</code> already wrapped, with a comment conceding it relied on a test that no
9156
+ <code>_FIX</code> entry holds an over-long token; the span rule makes that structural. It also
9157
+ wrapped to the <em>full</em> width and then let <code>out.info</code> indent by two, which is
9158
+ precisely the 82.
9159
+
9160
+ <b>Wrapping is opt-in per call site, and that is the design.</b> <code>warn</code>,
9161
+ <code>info</code>, <code>dim</code> and <code>kv</code> take <code>wrap=True</code> and each pays
9162
+ for its own prefix — the marker, the indent, the key column — so continuations align under the
9163
+ message rather than folding back to column zero. Always-on wrapping would have folded the two
9164
+ data lines this item exists to protect.
9165
+
9166
+ <b>Two claims in the first draft of this card did not survive measurement.</b> It said the
9167
+ 101-column offender was pinned by <b>six</b> test files; only <b>one</b> pins it verbatim
9168
+ (<code>test_ai_fallback_note_verbatim</code>, the mutant-killer, which wraps at the <em>emission
9169
+ site</em> and so was never touched). The other five pin the substring
9170
+ <code>using the heuristic fallback</code>, and are re-pinned against whitespace-collapsed output —
9171
+ an idiom <code>test_cli_discovery.py</code> had already established, for this exact reason. The
9172
+ BDD feature got a separate <code>should contain wrapped</code> step rather than collapsing inside
9173
+ <code>the output should contain</code>, which eleven feature files use ~87 times.
9174
+
9175
+ <b>Result: eight overflowing lines became two, and the two are the data lines.</b> The gate splits
9176
+ the commands by whose words are on the line — <code>search</code>, <code>who</code> and
9177
+ <code>protocol</code> compose their whole output and are swept down to 40 columns; commands that
9178
+ quote a skill's own rules are swept at 80 and wider, because reflowing someone else's prose is a
9179
+ different decision from fitting boost's own hints.
9180
+
9181
+ <b>Still open, found by the new gate rather than by this card.</b> At 40 and 60 columns
9182
+ <code>doctor</code>'s <code>·</code>-joined status summaries run to 71, and
9183
+ <code>protocol</code>'s <code>try it:</code> example is a single 59-column command that cannot
9184
+ fold. Neither is in this item's scope — both are recorded here so the next pass does not
9185
+ rediscover them as new.</p>
9155
9186
  <div class="meta">
9156
9187
  <span class="m">Complexity <b>M</b></span>
9157
9188
  <span class="m">Impact <b>Low</b></span>
9158
9189
  <span class="m">Wow <b class="wow">★★</b></span>
9159
- <span class="m">11 commands still emit prose hints past 80 columns; the worst is one string pinned by six test files</span>
9190
+ <span class="m">a code span is one atomic token, so a hint folds to the pane without splitting the command it tells you to run</span>
9160
9191
  </div>
9161
9192
  </article>
9162
9193
  <!-- /ROADMAP:cards -->
@@ -10,14 +10,14 @@ Feature: boost explain
10
10
  Given the "brainstorming" skill is installed
11
11
  When I run "boost explain brainstorming"
12
12
  Then the exit code should be 0
13
- And the output should contain "using the heuristic fallback"
13
+ And the output should contain wrapped "using the heuristic fallback"
14
14
  And the output should contain "Outline:"
15
15
  And the output should contain "Key rules:"
16
16
 
17
17
  Scenario: explaining a skill that is only in a tap (not installed)
18
18
  When I run "boost explain jira-integration"
19
19
  Then the exit code should be 0
20
- And the output should contain "using the heuristic fallback"
20
+ And the output should contain wrapped "using the heuristic fallback"
21
21
 
22
22
  Scenario: explaining an unknown skill fails
23
23
  When I run "boost explain does-not-exist"