boost-skill-cli 1.2.19__tar.gz → 1.2.20__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 (744) hide show
  1. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/cli.py +37 -7
  4. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/team.py +2 -2
  5. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/output.py +12 -1
  6. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  7. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  8. boost_skill_cli-1.2.20/docs/roadmap/items/bm25-has-no-stemming.md +50 -0
  9. boost_skill_cli-1.2.20/docs/roadmap/items/cli-output-ignored-the-terminal.md +56 -0
  10. boost_skill_cli-1.2.20/docs/roadmap/items/long-hints-overflow-narrow-panes.md +38 -0
  11. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap.html +133 -1
  12. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_team.py +16 -0
  13. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_errors_and_cli_table.py +36 -0
  14. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_output.py +50 -0
  15. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.gitattributes +0 -0
  16. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.gitignore +0 -0
  17. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.gitleaks.toml +0 -0
  18. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.htmlvalidate.json +0 -0
  19. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.lighthouserc.json +0 -0
  20. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.lycheeignore +0 -0
  21. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.markdownlint-cli2.jsonc +0 -0
  22. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.pre-commit-config.yaml +0 -0
  23. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.stylelintrc.json +0 -0
  24. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.vale/styles/boost/Terminology.yml +0 -0
  25. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  26. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/.vale.ini +0 -0
  27. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/CLAUDE.md +0 -0
  28. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/CODE_OF_CONDUCT.md +0 -0
  29. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/CONTRIBUTING.md +0 -0
  30. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/LICENSE +0 -0
  31. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/MANIFEST.in +0 -0
  32. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/Makefile +0 -0
  33. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/README.md +0 -0
  34. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/SECURITY.md +0 -0
  35. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost +0 -0
  36. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/__init__.py +0 -0
  37. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/__main__.py +0 -0
  38. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/cliparse.py +0 -0
  39. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/__init__.py +0 -0
  40. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/_common.py +0 -0
  41. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/bmad.py +0 -0
  42. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/configuration.py +0 -0
  43. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/discovery.py +0 -0
  44. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/hooks.py +0 -0
  45. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/info.py +0 -0
  46. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/intelligence.py +0 -0
  47. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/pkg.py +0 -0
  48. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/quality.py +0 -0
  49. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/run.py +0 -0
  50. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/safety.py +0 -0
  51. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/commands/taps.py +0 -0
  52. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/__init__.py +0 -0
  53. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/adapters.py +0 -0
  54. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/agents.py +0 -0
  55. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/ai.py +0 -0
  56. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/bmad.py +0 -0
  57. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/bootstrap.py +0 -0
  58. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/browse.py +0 -0
  59. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/builtin.py +0 -0
  60. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/capabilities.py +0 -0
  61. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/catalog.py +0 -0
  62. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/catalogbundle.py +0 -0
  63. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/chat.py +0 -0
  64. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/claude_settings.py +0 -0
  65. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/complete.py +0 -0
  66. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/config.py +0 -0
  67. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/dense.py +0 -0
  68. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/ed25519.py +0 -0
  69. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/embed.py +0 -0
  70. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/faithfulness.py +0 -0
  71. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/frontmatter.py +0 -0
  72. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/gitutil.py +0 -0
  73. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/imperative.py +0 -0
  74. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/injectscan.py +0 -0
  75. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/installscan.py +0 -0
  76. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/integrity.py +0 -0
  77. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/journal.py +0 -0
  78. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/localembed.py +0 -0
  79. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/lockfile.py +0 -0
  80. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/logs.py +0 -0
  81. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/mcp.py +0 -0
  82. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/mcpdecl.py +0 -0
  83. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/mcphost.py +0 -0
  84. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/minisign.py +0 -0
  85. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/nethttp.py +0 -0
  86. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/paths.py +0 -0
  87. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/policy.py +0 -0
  88. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/projectlock.py +0 -0
  89. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/provenance.py +0 -0
  90. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/rag.py +0 -0
  91. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/registry.py +0 -0
  92. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/resolve.py +0 -0
  93. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/rules.py +0 -0
  94. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/scopes.py +0 -0
  95. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/secretscan.py +0 -0
  96. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/selfupdate.py +0 -0
  97. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/serve.py +0 -0
  98. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/stackprobe.py +0 -0
  99. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/staleness.py +0 -0
  100. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/store.py +0 -0
  101. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/trustaudit.py +0 -0
  102. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/typosquat.py +0 -0
  103. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/updatediff.py +0 -0
  104. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/util.py +0 -0
  105. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/core/workflows.py +0 -0
  106. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/data/registries.json +0 -0
  107. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/data/rules/boost-first.mdc +0 -0
  108. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/errors.py +0 -0
  109. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_cli/spin.py +0 -0
  110. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_langchain/__init__.py +0 -0
  111. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_langchain/_compat.py +0 -0
  112. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_langchain/graph.py +0 -0
  113. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_langchain/loader.py +0 -0
  114. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_langchain/py.typed +0 -0
  115. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_langchain/retriever.py +0 -0
  116. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  117. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  118. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_skill_cli.egg-info/requires.txt +0 -0
  119. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/boost_skill_cli.egg-info/top_level.txt +0 -0
  120. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/codecov.yml +0 -0
  121. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/.claude/settings.local.json +0 -0
  122. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/DEBUGGING.md +0 -0
  123. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/adapters.html +0 -0
  124. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/architecture/README.md +0 -0
  125. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/architecture/c4-components-core.md +0 -0
  126. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/architecture/c4-containers.md +0 -0
  127. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/architecture/c4-context.md +0 -0
  128. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/architecture/c4-dynamic-install.md +0 -0
  129. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/gifs/distill.gif +0 -0
  130. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/gifs/doctor.gif +0 -0
  131. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/gifs/explain.gif +0 -0
  132. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/gifs/hooks.gif +0 -0
  133. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/gifs/install.gif +0 -0
  134. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/gifs/pulse.gif +0 -0
  135. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/gifs/search.gif +0 -0
  136. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/gifs/tap.gif +0 -0
  137. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/tapes/distill.tape +0 -0
  138. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/tapes/doctor.tape +0 -0
  139. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/tapes/explain.tape +0 -0
  140. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/tapes/hooks.tape +0 -0
  141. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/tapes/install.tape +0 -0
  142. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/tapes/pulse.tape +0 -0
  143. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/tapes/search.tape +0 -0
  144. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel/tapes/tap.tape +0 -0
  145. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/carousel.html +0 -0
  146. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/chat.html +0 -0
  147. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/commands.html +0 -0
  148. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/demo-index.json +0 -0
  149. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/demo.gif +0 -0
  150. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/demo.html +0 -0
  151. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/demo.tape +0 -0
  152. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/design-roadmap.html +0 -0
  153. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/eval-latest.json +0 -0
  154. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/eval.html +0 -0
  155. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/index.html +0 -0
  156. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/langchain.html +0 -0
  157. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/mcp-hub.html +0 -0
  158. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/rag-architecture.md +0 -0
  159. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D01.md +0 -0
  160. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D02.md +0 -0
  161. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D03.md +0 -0
  162. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D04.md +0 -0
  163. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D05.md +0 -0
  164. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D06.md +0 -0
  165. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D07.md +0 -0
  166. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D08.md +0 -0
  167. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D09.md +0 -0
  168. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D10.md +0 -0
  169. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D11.md +0 -0
  170. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D12.md +0 -0
  171. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D13.md +0 -0
  172. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D14.md +0 -0
  173. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D15.md +0 -0
  174. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D16.md +0 -0
  175. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D17.md +0 -0
  176. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D18.md +0 -0
  177. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D19.md +0 -0
  178. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D20.md +0 -0
  179. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D21.md +0 -0
  180. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D22.md +0 -0
  181. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D23.md +0 -0
  182. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D24.md +0 -0
  183. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D25.md +0 -0
  184. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/BOOST-D26.md +0 -0
  185. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  186. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  187. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  188. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  189. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  190. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  191. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  192. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  193. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  194. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  195. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  196. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  197. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  198. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/boost-first-rule.md +0 -0
  199. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  200. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  201. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  202. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  203. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  204. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  205. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  206. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  207. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  208. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  209. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  210. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  211. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  212. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  213. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  214. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  215. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  216. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  217. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  218. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/command-carousel-page.md +0 -0
  219. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  220. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  221. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  222. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  223. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  224. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  225. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  226. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  227. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  228. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  229. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  230. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  231. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  232. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  233. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  234. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  235. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  236. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  237. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  238. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  239. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  240. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  241. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  242. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  243. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  244. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  245. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  246. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  247. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  248. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  249. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  250. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  251. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  252. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  253. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  254. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  255. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  256. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  257. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  258. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  259. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  260. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  261. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  262. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  263. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  264. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  265. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  266. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/github-community-health-files.md +0 -0
  267. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  268. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  269. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  270. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  271. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  272. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  273. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  274. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  275. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  276. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  277. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  278. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  279. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  280. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  281. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  282. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  283. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  284. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  285. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  286. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  287. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  288. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  289. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  290. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  291. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  292. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  293. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  294. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  295. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  296. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  297. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  298. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  299. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  300. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  301. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  302. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  303. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  304. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  305. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  306. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  307. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  308. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  309. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  310. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  311. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  312. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  313. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  314. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  315. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  316. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  317. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  318. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  319. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  320. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  321. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  322. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  323. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  324. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  325. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  326. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  327. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  328. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  329. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  330. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  331. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  332. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  333. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  334. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  335. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  336. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  337. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  338. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  339. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  340. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  341. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  342. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  343. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  344. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  345. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  346. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  347. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  348. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  349. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  350. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  351. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  352. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  353. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  354. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  355. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  356. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  357. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  358. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  359. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  360. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  361. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  362. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  363. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  364. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  365. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  366. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  367. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  368. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  369. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  370. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  371. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  372. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  373. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  374. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  375. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  376. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  377. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  378. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  379. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  380. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  381. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  382. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  383. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  384. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  385. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  386. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  387. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  388. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  389. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  390. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  391. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  392. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  393. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  394. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  395. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  396. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  397. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  398. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  399. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  400. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  401. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  402. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  403. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  404. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  405. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  406. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  407. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  408. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  409. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  410. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  411. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  412. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  413. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  414. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  415. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  416. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  417. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  418. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  419. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  420. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  421. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  422. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  423. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  424. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  425. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  426. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  427. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  428. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  429. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  430. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  431. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  432. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  433. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  434. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  435. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  436. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  437. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  438. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  439. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  440. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  441. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  442. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  443. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  444. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  445. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/workspace-scope-install.md +0 -0
  446. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/zip-strict-audit.md +0 -0
  447. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  448. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  449. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  450. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/eslint.config.mjs +0 -0
  451. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/README.md +0 -0
  452. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/__init__.py +0 -0
  453. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/baseline.json +0 -0
  454. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/faithfulness.py +0 -0
  455. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/golden_set.json +0 -0
  456. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/make_corpus.py +0 -0
  457. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/make_golden.py +0 -0
  458. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/metrics.py +0 -0
  459. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/publish_golden_dataset.py +0 -0
  460. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/evals/run_evals.py +0 -0
  461. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/examples/README.md +0 -0
  462. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/examples/adapt-demo.sh +0 -0
  463. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/examples/boost-run-prototype.sh +0 -0
  464. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/index.html +0 -0
  465. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/noxfile.py +0 -0
  466. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/pyproject.toml +0 -0
  467. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/coverage-tools.in +0 -0
  468. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/coverage-tools.txt +0 -0
  469. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/lint-tools.in +0 -0
  470. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/lint-tools.txt +0 -0
  471. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/mutation-tools.in +0 -0
  472. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/mutation-tools.txt +0 -0
  473. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/platform-pins.lock +0 -0
  474. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/release-tools.in +0 -0
  475. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/release-tools.txt +0 -0
  476. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/test-tools.in +0 -0
  477. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/requirements/test-tools.txt +0 -0
  478. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/a11y_check.py +0 -0
  479. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/bench_cli.sh +0 -0
  480. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/build_command_reference.py +0 -0
  481. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/build_demo_index.py +0 -0
  482. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/build_registries.py +0 -0
  483. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/build_roadmap.py +0 -0
  484. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/build_scale_corpus.py +0 -0
  485. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/check_anchors.py +0 -0
  486. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/check_licenses.py +0 -0
  487. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/check_required_checks.py +0 -0
  488. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/ensure_eval_corpus.sh +0 -0
  489. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/eval_corpus.py +0 -0
  490. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/eval_explain.py +0 -0
  491. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/eval_gate.py +0 -0
  492. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/eval_recommend.py +0 -0
  493. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/eval_retrieval.py +0 -0
  494. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/eval_stats_summary.py +0 -0
  495. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/import_budget.py +0 -0
  496. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/lock_toolchain.py +0 -0
  497. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/measure_registry.py +0 -0
  498. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/mutation_gate.py +0 -0
  499. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/mutation_shards.py +0 -0
  500. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/mutation_weights.json +0 -0
  501. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/page_budget.py +0 -0
  502. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/perf_gate.py +0 -0
  503. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/post_deploy_smoke.py +0 -0
  504. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/publish_eval_json.py +0 -0
  505. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/release_guard.py +0 -0
  506. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/release_preflight.py +0 -0
  507. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/scripts/serve_docs.py +0 -0
  508. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/setup.cfg +0 -0
  509. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/sonar-project.properties +0 -0
  510. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/style/README.md +0 -0
  511. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/style/boost.css +0 -0
  512. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/style/boost.js +0 -0
  513. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/style/demo.html +0 -0
  514. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/adapt.feature +0 -0
  515. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/browse.feature +0 -0
  516. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/count.feature +0 -0
  517. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/discover.feature +0 -0
  518. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/doctor.feature +0 -0
  519. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/environment.py +0 -0
  520. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/explain.feature +0 -0
  521. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/index.feature +0 -0
  522. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/install.feature +0 -0
  523. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/list.feature +0 -0
  524. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/mcp.feature +0 -0
  525. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/search.feature +0 -0
  526. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/steps/cli_steps.py +0 -0
  527. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/steps/discovery_steps.py +0 -0
  528. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/steps/mcp_steps.py +0 -0
  529. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/bdd/features/steps/quality_steps.py +0 -0
  530. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/conftest.py +0 -0
  531. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/eval/baseline.json +0 -0
  532. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/eval/explain.jsonl +0 -0
  533. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/eval/golden-natural.jsonl +0 -0
  534. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/eval/golden.jsonl +0 -0
  535. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/eval/recommend.jsonl +0 -0
  536. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/eval/taps-scale.txt +0 -0
  537. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/eval/taps.txt +0 -0
  538. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_capabilities_policy.py +0 -0
  539. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_adapt.py +0 -0
  540. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_bmad.py +0 -0
  541. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_catalog.py +0 -0
  542. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_chat.py +0 -0
  543. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_configuration.py +0 -0
  544. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_discovery.py +0 -0
  545. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_hooks.py +0 -0
  546. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_info.py +0 -0
  547. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_intelligence.py +0 -0
  548. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_pkg.py +0 -0
  549. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_quality.py +0 -0
  550. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_cli_taps.py +0 -0
  551. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_everyday_loop.py +0 -0
  552. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_integrity_enforce.py +0 -0
  553. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_kind_conformance.py +0 -0
  554. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_property_parsers.py +0 -0
  555. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_run.py +0 -0
  556. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_tap_signing.py +0 -0
  557. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/functional/test_workspace_scope.py +0 -0
  558. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/README.md +0 -0
  559. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  560. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  561. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  562. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  563. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  564. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  565. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  566. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  567. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  568. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  569. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  570. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  571. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  572. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  573. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  574. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  575. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  576. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  577. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  578. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  579. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  580. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  581. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  582. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/fuzz_frontmatter.py +0 -0
  583. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/fuzz/fuzz_registry.py +0 -0
  584. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/langchain/conftest.py +0 -0
  585. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/langchain/test_graph.py +0 -0
  586. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/langchain/test_loader.py +0 -0
  587. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/langchain/test_retriever.py +0 -0
  588. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/make_fixture.py +0 -0
  589. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/perf/test_benchmarks.py +0 -0
  590. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/smoke.sh +0 -0
  591. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_a11y_check.py +0 -0
  592. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_action_pin_lockstep.py +0 -0
  593. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_adapters.py +0 -0
  594. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_adapters_multi.py +0 -0
  595. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_adapters_runner.py +0 -0
  596. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_agents.py +0 -0
  597. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_ai.py +0 -0
  598. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_bmad_core.py +0 -0
  599. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_boost_first_offer.py +0 -0
  600. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_bootstrap.py +0 -0
  601. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_browse.py +0 -0
  602. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_builtin.py +0 -0
  603. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_capabilities.py +0 -0
  604. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_catalog.py +0 -0
  605. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_catalogbundle.py +0 -0
  606. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_chat.py +0 -0
  607. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_check_anchors.py +0 -0
  608. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_check_licenses.py +0 -0
  609. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_claude_settings.py +0 -0
  610. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_clean_internal_cache.py +0 -0
  611. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_cliparse.py +0 -0
  612. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_codeql_analysis_key.py +0 -0
  613. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_command_reference_fresh.py +0 -0
  614. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_community_health_files.py +0 -0
  615. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_compact.py +0 -0
  616. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_complete.py +0 -0
  617. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_complete_rc_block.py +0 -0
  618. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_config.py +0 -0
  619. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_content_dedupe.py +0 -0
  620. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_content_identity.py +0 -0
  621. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_crash_redaction.py +0 -0
  622. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dedup_trust.py +0 -0
  623. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_demo_index.py +0 -0
  624. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense.py +0 -0
  625. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_embed_dedupe.py +0 -0
  626. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_fallback.py +0 -0
  627. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_fix_hint.py +0 -0
  628. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_quantized.py +0 -0
  629. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_ready_order.py +0 -0
  630. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_shard_real_schema.py +0 -0
  631. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  632. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_shards.py +0 -0
  633. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_status.py +0 -0
  634. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dense_status_cheap.py +0 -0
  635. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_dependabot_config.py +0 -0
  636. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_docs_pages_linked.py +0 -0
  637. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_docsite_chrome.py +0 -0
  638. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_ed25519.py +0 -0
  639. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_embed.py +0 -0
  640. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_embed_local.py +0 -0
  641. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_embed_truncated_response.py +0 -0
  642. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_entry_key.py +0 -0
  643. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_eval_baseline.py +0 -0
  644. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_eval_corpus.py +0 -0
  645. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_eval_faithfulness.py +0 -0
  646. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_eval_gate.py +0 -0
  647. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_eval_grading.py +0 -0
  648. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_eval_metrics.py +0 -0
  649. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_eval_stats_summary.py +0 -0
  650. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  651. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_faithfulness.py +0 -0
  652. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_frontmatter.py +0 -0
  653. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_fuzz_targets.py +0 -0
  654. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  655. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_gitleaks_config.py +0 -0
  656. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_gitutil.py +0 -0
  657. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_gitutil_lfs.py +0 -0
  658. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_gitutil_sparse.py +0 -0
  659. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_imperative.py +0 -0
  660. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_import_budget.py +0 -0
  661. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_injectscan.py +0 -0
  662. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_install_permission_error.py +0 -0
  663. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_installscan.py +0 -0
  664. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_integrity.py +0 -0
  665. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_journal.py +0 -0
  666. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_langchain_packaging.py +0 -0
  667. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_link_ownership.py +0 -0
  668. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_localembed.py +0 -0
  669. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_localembed_e2e.py +0 -0
  670. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_lockfile.py +0 -0
  671. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_logs.py +0 -0
  672. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_marketing_counts.py +0 -0
  673. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_mcp.py +0 -0
  674. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_mcp_install_scan.py +0 -0
  675. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_mcpdecl.py +0 -0
  676. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_mcphost.py +0 -0
  677. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_measure_registry.py +0 -0
  678. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_minisign.py +0 -0
  679. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_mutation_hardening.py +0 -0
  680. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_mutation_shards.py +0 -0
  681. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_mutation_subfile_shards.py +0 -0
  682. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_mutmut_source_paths.py +0 -0
  683. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_nethttp.py +0 -0
  684. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_page_budget.py +0 -0
  685. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_paths.py +0 -0
  686. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_perf_gate.py +0 -0
  687. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_pkg_confusions.py +0 -0
  688. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_pkg_injection.py +0 -0
  689. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_pkg_secrets.py +0 -0
  690. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_platform_pins.py +0 -0
  691. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_policy.py +0 -0
  692. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_post_deploy_smoke.py +0 -0
  693. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_project_mcp_sidecar.py +0 -0
  694. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_projectlock.py +0 -0
  695. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_provenance.py +0 -0
  696. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_publish_golden_dataset.py +0 -0
  697. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_rag.py +0 -0
  698. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_rag_fastpath.py +0 -0
  699. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_rag_fusion.py +0 -0
  700. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_registries_fresh.py +0 -0
  701. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_registry.py +0 -0
  702. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_registry_categories.py +0 -0
  703. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_registry_control_chars.py +0 -0
  704. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_release_guard.py +0 -0
  705. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_release_preflight.py +0 -0
  706. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_required_checks.py +0 -0
  707. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_rerank_cache.py +0 -0
  708. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_resolve.py +0 -0
  709. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_roadmap_fresh.py +0 -0
  710. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_rules.py +0 -0
  711. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_scale_corpus.py +0 -0
  712. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_scopes.py +0 -0
  713. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_secretscan.py +0 -0
  714. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_selfupdate.py +0 -0
  715. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_serve.py +0 -0
  716. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_serve_docs.py +0 -0
  717. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_shards_matrix.py +0 -0
  718. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_smoke_covers_every_command.py +0 -0
  719. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_spin.py +0 -0
  720. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_stackprobe.py +0 -0
  721. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_staleness.py +0 -0
  722. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_store.py +0 -0
  723. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_store_materialize.py +0 -0
  724. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_sync_blocked_links.py +0 -0
  725. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  726. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_token_parity.py +0 -0
  727. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_toolchain_lock.py +0 -0
  728. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_trustaudit.py +0 -0
  729. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_typosquat.py +0 -0
  730. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_updatediff.py +0 -0
  731. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_util.py +0 -0
  732. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_version.py +0 -0
  733. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_visual_harness_flags.py +0 -0
  734. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_workflow_concurrency.py +0 -0
  735. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  736. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  737. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_workflow_timeouts.py +0 -0
  738. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_workflows.py +0 -0
  739. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  740. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/visual/a11y_check.mjs +0 -0
  741. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/visual/console_check.mjs +0 -0
  742. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/visual/package-lock.json +0 -0
  743. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/visual/package.json +0 -0
  744. {boost_skill_cli-1.2.19 → boost_skill_cli-1.2.20}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.19
3
+ Version: 1.2.20
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.19'
22
- __version_tuple__ = version_tuple = (1, 2, 19)
21
+ __version__ = version = '1.2.20'
22
+ __version_tuple__ = version_tuple = (1, 2, 20)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -155,20 +155,50 @@ _GROUP_HUES = ("cyan", "violet", "pink", "green", "yellow")
155
155
 
156
156
 
157
157
  def print_help() -> None:
158
- print(out.gradient(PRODUCT) + " — Homebrew for AI coding skills"
159
- + out.c(" (%s · v%s)" % (TAGLINE, __version__), out.DIM))
158
+ """The command index, fitted to the pane.
159
+
160
+ Every other screen in the CLI adapts — `search` drops the tap column and
161
+ truncates at 60 columns — while this one emitted a fixed 105-column banner
162
+ at every width and wrapped mid-word for anyone not running a wide
163
+ terminal. Names are never clipped, because the help's whole job is to be
164
+ an index you can copy a command out of; summaries are.
165
+ """
166
+ cols = out.term_width()
167
+
168
+ title_line = out.gradient(PRODUCT) + " — Homebrew for AI coding skills"
169
+ stamp = "%s · v%s" % (TAGLINE, __version__)
170
+ if out.visible_len(title_line) + out.visible_len(stamp) + 4 <= cols:
171
+ print(title_line + out.c(" (%s)" % stamp, out.DIM))
172
+ else:
173
+ print(title_line)
174
+ # The tagline is the first thing to go; the version never is, because
175
+ # it is what a bug report needs.
176
+ print(out.c(stamp if out.visible_len(stamp) <= cols
177
+ else "v%s" % __version__, out.DIM))
160
178
  print()
161
- print(out.c("Usage:", out.BOLD) + " boost <command> [args] "
162
- + out.c("boost help <command> for details", out.DIM))
179
+
180
+ usage = out.c("Usage:", out.BOLD) + " boost <command> [args]"
181
+ detail = out.c("boost help <command> for details", out.DIM)
182
+ if out.visible_len(usage) + out.visible_len(detail) + 3 <= cols:
183
+ print(usage + " " + detail)
184
+ else:
185
+ print(usage)
186
+ print(" " + detail)
187
+
163
188
  width = max(len(n) for n, _, _, _ in COMMANDS)
164
189
  for idx, (gkey, (_icon, title, desc)) in enumerate(GROUPS.items()):
165
190
  cmds = [(n, s) for n, g, _m, s in COMMANDS if g == gkey]
166
191
  bullet = out.aurora("●", _GROUP_HUES[idx % len(_GROUP_HUES)])
167
192
  print()
168
- print(bullet + " " + out.c(title, out.BOLD)
169
- + out.c(" — %s" % desc, out.DIM))
193
+ head = bullet + " " + out.c(title, out.BOLD)
194
+ room = cols - len(title) - 6 # "● " + title + " — "
195
+ if room >= 8:
196
+ print(head + out.c(" — %s" % out.truncate(desc, room), out.DIM))
197
+ else:
198
+ print(head)
170
199
  for n, s in cmds:
171
- print(" " + out.c(n.ljust(width + 2), out.CYAN) + s)
200
+ print(" " + out.c(n.ljust(width + 2), out.CYAN)
201
+ + out.truncate(s, max(0, cols - width - 4)))
172
202
  print()
173
203
  print(out.c("%d commands · %d groups" % (len(COMMANDS), len(GROUPS)), out.DIM))
174
204
 
@@ -69,7 +69,7 @@ def cmd_cohort(argv) -> int:
69
69
  p = cliparse.parser(
70
70
  prog="boost cohort",
71
71
  description="Controlled skill rollouts & team A/B testing",
72
- epilog="Membership is a deterministic hash of user+cohort, so a 50%% "
72
+ epilog="Membership is a deterministic hash of user+cohort, so a 50% "
73
73
  "rollout lands on the same half of the team every time. "
74
74
  "This machine evaluates its own membership locally.")
75
75
  p.add_argument("action", nargs="?", default="list",
@@ -177,7 +177,7 @@ def cmd_cohort(argv) -> int:
177
177
  return 0
178
178
  out.table(rows, headers=("COHORT", "SKILLS", "ROLLOUT", "YOU"))
179
179
  print()
180
- out.dim("membership = sha256(user:cohort) %% 100 < rollout · apply with `boost cohort apply`")
180
+ out.dim("membership = sha256(user:cohort) % 100 < rollout · apply with `boost cohort apply`")
181
181
  return 0
182
182
 
183
183
 
@@ -317,9 +317,20 @@ def panel(lines, title: str | None = None, hue: str = "cyan") -> str:
317
317
  """
318
318
  if isinstance(lines, str):
319
319
  lines = [lines]
320
+ # The border costs four columns — "\u2502 " on the left, " \u2502" on the right —
321
+ # so that is what the content may not exceed. Without this the box sized
322
+ # itself to its content and sailed past the pane: `boost count` drew 108
323
+ # columns into an 80-column terminal, and a box whose border wraps is the
324
+ # worst-looking overflow the CLI has, because the shape itself breaks.
325
+ room = term_width() - 4
326
+ if title:
327
+ title = _clip_visible(title, room - 2)
328
+ lines = [_clip_visible(x, room) for x in lines]
320
329
  widths = [visible_len(x) for x in lines]
321
330
  tw = visible_len(title) if title else 0
322
- inner = max([*widths, tw + 2]) # a titled rule needs a space each side
331
+ # A titled rule needs a space each side, hence the +2 / -2. Clipping above
332
+ # already bounds every width by `room`, so no second clamp is needed here.
333
+ inner = max([*widths, tw + 2])
323
334
 
324
335
  def b(s: str) -> str:
325
336
  return aurora(s, hue)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.19
3
+ Version: 1.2.20
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -191,6 +191,7 @@ docs/roadmap/items/ambiguous-tap-short-name-resolution.md
191
191
  docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md
192
192
  docs/roadmap/items/atomic-skill-install-temp-dir-swap.md
193
193
  docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md
194
+ docs/roadmap/items/bm25-has-no-stemming.md
194
195
  docs/roadmap/items/bm25-index-is-one-json-blob.md
195
196
  docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md
196
197
  docs/roadmap/items/boost-first-carried-the-losing-trigger.md
@@ -211,6 +212,7 @@ docs/roadmap/items/ci-job-timeout-minutes.md
211
212
  docs/roadmap/items/ci-summary-step-fails-itself.md
212
213
  docs/roadmap/items/ci-time-is-now-runner-queueing.md
213
214
  docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md
215
+ docs/roadmap/items/cli-output-ignored-the-terminal.md
214
216
  docs/roadmap/items/code-scanning-rule-can-be-restored.md
215
217
  docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md
216
218
  docs/roadmap/items/cold-search-reads-the-whole-catalogue.md
@@ -296,6 +298,7 @@ docs/roadmap/items/localize-the-stored-bm25-snippet.md
296
298
  docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md
297
299
  docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md
298
300
  docs/roadmap/items/log-timestamps-mislabeled-utc.md
301
+ docs/roadmap/items/long-hints-overflow-narrow-panes.md
299
302
  docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md
300
303
  docs/roadmap/items/main-has-no-branch-protection.md
301
304
  docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md
@@ -0,0 +1,50 @@
1
+ ---
2
+ id: bm25-has-no-stemming
3
+ board: code
4
+ section: pipeline
5
+ status: next
6
+ category: Search · Retrieval
7
+ complexity: M
8
+ impact: High
9
+ wow: 4
10
+ note: boost search brainstorm finds nothing while brainstorming finds it; 15.7% of catalog names are unreachable by their own stem
11
+ order: 127
12
+ owner:
13
+ pr:
14
+ title: <code>boost search brainstorm</code> finds nothing, and <code>brainstorming</code> finds it
15
+ ---
16
+ <b>The symptom, in two commands against the same five-skill tap.</b>
17
+ <code>boost search brainstorming</code> returns the skill.
18
+ <code>boost search brainstorm</code> returns <b>zero</b> matches and sends the user to
19
+ <code>boost discover</code> to search all of GitHub for something already sitting in their
20
+ catalogue. <code>boost chat "what helps me brainstorm"</code> has the same hole and answers with
21
+ two unrelated skills. <code>core/rag.tokenize</code> lowercases, splits on non-alphanumerics and
22
+ drops a small stopword list — there is no stemming and no prefix fallback, so
23
+ <code>brainstorm</code> and <code>brainstorming</code> are simply different terms.
24
+
25
+ <b>Measured on the 461 tap caches on this machine: 29,607 distinct item names, 9,739 distinct
26
+ name tokens.</b> <b>4,663 of those names (15.7%)</b> carry a token whose stem finds nothing —
27
+ counting only stems that appear at least five times elsewhere in the corpus, so each is
28
+ demonstrably a word people type rather than an artefact of naive suffix stripping. The worst are
29
+ not exotic: <code>pattern</code> misses <b>474</b> names ending <code>-patterns</code>,
30
+ <code>skill</code> misses <b>252</b> ending <code>-skills</code>, <code>implement</code> misses
31
+ 161, <code>event</code> 115, <code>error</code> 112, <code>webhook</code> 109,
32
+ <code>agent</code> 83, <code>market</code> 81 named <code>-marketing</code>. A user searching
33
+ this catalogue for <code>skill</code> cannot reach a quarter of a thousand items named for it.
34
+
35
+ <b>It is invisible from a developer install, which is why it survived.</b> This machine has the
36
+ <code>[rag]</code> extra and a built dense store, so search reports <code>hybrid RRF (BM25 +
37
+ dense)</code> and the embeddings absorb the morphology: <code>webhook</code> returns 51 matches
38
+ and <code>webhooks</code> returns 47. The gap is only visible on the always-on, zero-dependency
39
+ BM25 path — which is what every user without the extra runs, what
40
+ <code>search</code> prints <code>semantic search is off</code> for, and what the required
41
+ <code>eval</code> gate floors. There is no <code>--engine</code> flag, so a maintainer cannot
42
+ easily reproduce a plain user's result.
43
+
44
+ <b>Two fixes, and they are not the same size.</b> A <b>zero-match prefix fallback</b> — on 0
45
+ hits, retry against vocabulary tokens by prefix — touches no index format, needs no baseline
46
+ regeneration, and fires only where BM25 currently returns nothing, so it cannot move a single
47
+ eval metric; it fixes the exact observed symptom in both <code>search</code> and
48
+ <code>chat</code>. A <b>real stemmer</b> is the better answer and costs an index-format bump plus
49
+ a regenerated <code>tests/eval/baseline.json</code>, and would move all four floored metrics.
50
+ Either lands in <code>core/rag.py</code>, so the tests must kill mutants, not merely cover lines.
@@ -0,0 +1,56 @@
1
+ ---
2
+ id: cli-output-ignored-the-terminal
3
+ board: code
4
+ section: dx
5
+ status: inflight
6
+ category: CLI · Output
7
+ complexity: S
8
+ impact: Med
9
+ wow: 3
10
+ note: an 80-command sweep found a box that drew wider than the pane, a help screen that never measured it, and a literal %% on screen
11
+ order: 125
12
+ owner: loop/cli-output-defects
13
+ pr: 552
14
+ title: The box drew 108 columns into an 80-column pane, and <code>--help</code> never asked how wide the pane was
15
+ ---
16
+ <b>Every one of the 80 commands was run, not just read.</b> All 80 answered
17
+ <code>--help</code> with exit 0 and no traceback; ~73 were then driven for their real effect
18
+ against a disposable <code>HOME</code> — install, link, quarantine, focus, snapshot, replay,
19
+ cohort, hooks and the rest, checking the filesystem after each rather than trusting the success
20
+ line. <code>boost focus tdd-workflow</code> was confirmed by listing
21
+ <code>~/.claude/skills</code> and finding the other two skills genuinely unlinked with the
22
+ canonical store intact, and <code>focus --clear</code> by finding all three back. Seven commands
23
+ could not run here and are recorded as blocked rather than passed: <code>serve</code> (the
24
+ sandbox denies <code>socket.bind</code>), <code>discover</code> and <code>index</code> (no
25
+ <code>gh</code> auth), <code>run</code> live (no Agents SDK — <code>--print</code> was verified
26
+ instead), plus the interactive halves of <code>browse</code>, <code>chat</code> and
27
+ <code>edit</code>, each of which degraded with a correct hint.
28
+
29
+ <b>A literal <code>%%</code> was reaching the terminal.</b>
30
+ <code>boost cohort</code> printed <code>sha256(user:cohort) %% 100 &lt; rollout</code> and its
31
+ <code>--help</code> epilog offered <code>a 50%% rollout</code>. Both strings carry printf
32
+ escaping and neither is ever <code>%</code>-formatted, so the escape survived to the screen. The
33
+ existing test asserted <code>"membership = sha256(user:cohort)" in r.out</code> — it stops one
34
+ character short of the defect, which is exactly how it survived. Four other <code>%%</code> in
35
+ the same file are correct: they sit inside real <code>%</code>-format calls, including the
36
+ <code>Exec=%s %%u</code> that a <code>.desktop</code> file requires.
37
+
38
+ <b><code>panel()</code> sized itself to its content and never asked the terminal.</b> Measured:
39
+ <code>boost count</code> drew <b>108 columns into an 80-column pane</b>. A box is the worst
40
+ thing to overflow, because the border wraps and the shape itself breaks. It now clamps to
41
+ <code>term_width() - 4</code> — the four columns the border costs — and clips over-long content,
42
+ so every row stays the same width at any pane size.
43
+
44
+ <b>The help screen was the one screen that never measured the pane.</b>
45
+ <code>search</code> already adapts, dropping the tap column and truncating at 60 columns —
46
+ <code>term_width()</code> existed and <code>discovery.py</code> was its only caller. Meanwhile
47
+ <code>boost --help</code>, the first thing a new user sees, emitted a fixed <b>102-column</b>
48
+ banner at every width. It now fits exactly at 60, 80 and 100. Command <em>names</em> are never
49
+ clipped, because the help's whole job is to be an index you can copy a command out of; summaries
50
+ and the tagline are. The version never is — it is what a bug report needs.
51
+
52
+ <b>Two findings were measured and deliberately left for their own items.</b> Eleven commands
53
+ still overflow 80 columns, but the remainder are prose hints, and the worst of them is one shared
54
+ string that six test files and a BDD feature pin by substring — wrapping it is a cross-cutting
55
+ output change, not a rider on this one. See <code>long-hints-overflow-narrow-panes</code> and
56
+ <code>bm25-has-no-stemming</code>.
@@ -0,0 +1,38 @@
1
+ ---
2
+ id: long-hints-overflow-narrow-panes
3
+ board: code
4
+ section: dx
5
+ status: next
6
+ category: CLI · Output
7
+ complexity: M
8
+ impact: Low
9
+ wow: 2
10
+ note: 11 commands still emit prose hints past 80 columns; the worst is one string pinned by six test files
11
+ order: 126
12
+ owner:
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 emit 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 <code>explain</code>, <code>impact</code> and
20
+ <code>simulate</code>; <code>protocol</code>'s URL forms at 100; <code>changelog</code>'s
21
+ unshallow hint at 93; <code>who</code>'s footer at 87; <code>search</code>'s extra hint at 82;
22
+ <code>replay</code>'s footer at 81.
23
+
24
+ <b>Two of the eleven must be left alone.</b> <code>pulse</code>'s <code>source=</code> paths and
25
+ <code>fingerprint</code>'s hash are data, not chrome — clipping them destroys the information the
26
+ line exists to carry. So a blanket "no line exceeds <code>term_width()</code>" assertion is the
27
+ wrong gate: it would false-positive on exactly the lines that should be long. Pin the composed
28
+ sites individually.
29
+
30
+ <b>Why this is not a quick wrap.</b> The 101-column offender contains
31
+ <code>using the heuristic fallback</code>, which is asserted by <b>six</b> test files plus
32
+ <code>tests/bdd/features/explain.feature</code>. Wrapping inserts a newline mid-sentence and
33
+ breaks every one of them; and under pytest <code>term_width()</code> falls back to 80, so the
34
+ wrap fires in the suite rather than only on a narrow terminal. The change is a
35
+ <code>wrap()</code> helper in <code>core/output.py</code> — mutation-gated, so boundary-width
36
+ tests, not coverage — plus re-pinning those assertions. Shortening the strings instead is a
37
+ smaller diff but a voice decision, and the substring pinned by the tests would have to survive
38
+ either way.
@@ -133,7 +133,7 @@
133
133
  <div class="stat"><b>16</b><span>Shipped</span></div>
134
134
  <div class="stat"><b>1</b><span>Next up</span></div>
135
135
  <div class="stat"><b>7</b><span>Planned</span></div>
136
- <div class="stat"><b>264</b><span>Loop finds</span></div>
136
+ <div class="stat"><b>267</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -7053,6 +7053,52 @@ state where that line is the advice.</p>
7053
7053
  <span class="m">0.94 s cold search at 71.6k entries — ~0.5 s spent materialising data the top hits never use</span>
7054
7054
  </div>
7055
7055
  </article>
7056
+
7057
+ <article class="cap rcard" id="bm25-has-no-stemming">
7058
+ <div class="head"><span class="pill next">Next</span><span class="cat">Search · Retrieval</span></div>
7059
+ <h3><code>boost search brainstorm</code> finds nothing, and <code>brainstorming</code> finds it</h3>
7060
+ <p><b>The symptom, in two commands against the same five-skill tap.</b>
7061
+ <code>boost search brainstorming</code> returns the skill.
7062
+ <code>boost search brainstorm</code> returns <b>zero</b> matches and sends the user to
7063
+ <code>boost discover</code> to search all of GitHub for something already sitting in their
7064
+ catalogue. <code>boost chat "what helps me brainstorm"</code> has the same hole and answers with
7065
+ two unrelated skills. <code>core/rag.tokenize</code> lowercases, splits on non-alphanumerics and
7066
+ drops a small stopword list — there is no stemming and no prefix fallback, so
7067
+ <code>brainstorm</code> and <code>brainstorming</code> are simply different terms.
7068
+
7069
+ <b>Measured on the 461 tap caches on this machine: 29,607 distinct item names, 9,739 distinct
7070
+ name tokens.</b> <b>4,663 of those names (15.7%)</b> carry a token whose stem finds nothing —
7071
+ counting only stems that appear at least five times elsewhere in the corpus, so each is
7072
+ demonstrably a word people type rather than an artefact of naive suffix stripping. The worst are
7073
+ not exotic: <code>pattern</code> misses <b>474</b> names ending <code>-patterns</code>,
7074
+ <code>skill</code> misses <b>252</b> ending <code>-skills</code>, <code>implement</code> misses
7075
+ 161, <code>event</code> 115, <code>error</code> 112, <code>webhook</code> 109,
7076
+ <code>agent</code> 83, <code>market</code> 81 named <code>-marketing</code>. A user searching
7077
+ this catalogue for <code>skill</code> cannot reach a quarter of a thousand items named for it.
7078
+
7079
+ <b>It is invisible from a developer install, which is why it survived.</b> This machine has the
7080
+ <code>[rag]</code> extra and a built dense store, so search reports <code>hybrid RRF (BM25 +
7081
+ dense)</code> and the embeddings absorb the morphology: <code>webhook</code> returns 51 matches
7082
+ and <code>webhooks</code> returns 47. The gap is only visible on the always-on, zero-dependency
7083
+ BM25 path — which is what every user without the extra runs, what
7084
+ <code>search</code> prints <code>semantic search is off</code> for, and what the required
7085
+ <code>eval</code> gate floors. There is no <code>--engine</code> flag, so a maintainer cannot
7086
+ easily reproduce a plain user's result.
7087
+
7088
+ <b>Two fixes, and they are not the same size.</b> A <b>zero-match prefix fallback</b> — on 0
7089
+ hits, retry against vocabulary tokens by prefix — touches no index format, needs no baseline
7090
+ regeneration, and fires only where BM25 currently returns nothing, so it cannot move a single
7091
+ eval metric; it fixes the exact observed symptom in both <code>search</code> and
7092
+ <code>chat</code>. A <b>real stemmer</b> is the better answer and costs an index-format bump plus
7093
+ a regenerated <code>tests/eval/baseline.json</code>, and would move all four floored metrics.
7094
+ Either lands in <code>core/rag.py</code>, so the tests must kill mutants, not merely cover lines.</p>
7095
+ <div class="meta">
7096
+ <span class="m">Complexity <b>M</b></span>
7097
+ <span class="m hi">Impact <b>High</b></span>
7098
+ <span class="m">Wow <b class="wow">★★★★</b></span>
7099
+ <span class="m">boost search brainstorm finds nothing while brainstorming finds it; 15.7% of catalog names are unreachable by their own stem</span>
7100
+ </div>
7101
+ </article>
7056
7102
  <!-- /ROADMAP:cards -->
7057
7103
 
7058
7104
  </div>
@@ -9009,6 +9055,92 @@ the same search from 0.94 s to 0.49 s.</p>
9009
9055
  <span class="m">MCP boost_search measured 11.7-17 s per call — every call, even a repeat of the last one</span>
9010
9056
  </div>
9011
9057
  </article>
9058
+
9059
+ <article class="cap rcard" id="cli-output-ignored-the-terminal">
9060
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">CLI · Output</span></div>
9061
+ <h3>The box drew 108 columns into an 80-column pane, and <code>--help</code> never asked how wide the pane was</h3>
9062
+ <p><b>Every one of the 80 commands was run, not just read.</b> All 80 answered
9063
+ <code>--help</code> with exit 0 and no traceback; ~73 were then driven for their real effect
9064
+ against a disposable <code>HOME</code> — install, link, quarantine, focus, snapshot, replay,
9065
+ cohort, hooks and the rest, checking the filesystem after each rather than trusting the success
9066
+ line. <code>boost focus tdd-workflow</code> was confirmed by listing
9067
+ <code>~/.claude/skills</code> and finding the other two skills genuinely unlinked with the
9068
+ canonical store intact, and <code>focus --clear</code> by finding all three back. Seven commands
9069
+ could not run here and are recorded as blocked rather than passed: <code>serve</code> (the
9070
+ sandbox denies <code>socket.bind</code>), <code>discover</code> and <code>index</code> (no
9071
+ <code>gh</code> auth), <code>run</code> live (no Agents SDK — <code>--print</code> was verified
9072
+ instead), plus the interactive halves of <code>browse</code>, <code>chat</code> and
9073
+ <code>edit</code>, each of which degraded with a correct hint.
9074
+
9075
+ <b>A literal <code>%%</code> was reaching the terminal.</b>
9076
+ <code>boost cohort</code> printed <code>sha256(user:cohort) %% 100 &lt; rollout</code> and its
9077
+ <code>--help</code> epilog offered <code>a 50%% rollout</code>. Both strings carry printf
9078
+ escaping and neither is ever <code>%</code>-formatted, so the escape survived to the screen. The
9079
+ existing test asserted <code>"membership = sha256(user:cohort)" in r.out</code> — it stops one
9080
+ character short of the defect, which is exactly how it survived. Four other <code>%%</code> in
9081
+ the same file are correct: they sit inside real <code>%</code>-format calls, including the
9082
+ <code>Exec=%s %%u</code> that a <code>.desktop</code> file requires.
9083
+
9084
+ <b><code>panel()</code> sized itself to its content and never asked the terminal.</b> Measured:
9085
+ <code>boost count</code> drew <b>108 columns into an 80-column pane</b>. A box is the worst
9086
+ thing to overflow, because the border wraps and the shape itself breaks. It now clamps to
9087
+ <code>term_width() - 4</code> — the four columns the border costs — and clips over-long content,
9088
+ so every row stays the same width at any pane size.
9089
+
9090
+ <b>The help screen was the one screen that never measured the pane.</b>
9091
+ <code>search</code> already adapts, dropping the tap column and truncating at 60 columns —
9092
+ <code>term_width()</code> existed and <code>discovery.py</code> was its only caller. Meanwhile
9093
+ <code>boost --help</code>, the first thing a new user sees, emitted a fixed <b>102-column</b>
9094
+ banner at every width. It now fits exactly at 60, 80 and 100. Command <em>names</em> are never
9095
+ clipped, because the help's whole job is to be an index you can copy a command out of; summaries
9096
+ and the tagline are. The version never is — it is what a bug report needs.
9097
+
9098
+ <b>Two findings were measured and deliberately left for their own items.</b> Eleven commands
9099
+ still overflow 80 columns, but the remainder are prose hints, and the worst of them is one shared
9100
+ string that six test files and a BDD feature pin by substring — wrapping it is a cross-cutting
9101
+ output change, not a rider on this one. See <code>long-hints-overflow-narrow-panes</code> and
9102
+ <code>bm25-has-no-stemming</code>.</p>
9103
+ <div class="meta">
9104
+ <span class="m">Complexity <b>S</b></span>
9105
+ <span class="m">Impact <b>Med</b></span>
9106
+ <span class="m">Wow <b class="wow">★★★</b></span>
9107
+ <span class="m">an 80-command sweep found a box that drew wider than the pane, a help screen that never measured it, and a literal %% on screen</span>
9108
+ </div>
9109
+ </article>
9110
+
9111
+ <article class="cap rcard" id="long-hints-overflow-narrow-panes">
9112
+ <div class="head"><span class="pill next">Next</span><span class="cat">CLI · Output</span></div>
9113
+ <h3>The hints still run past the pane, and the worst one is pinned by six test files</h3>
9114
+ <p><b>Measured, at <code>COLUMNS=80</code>, over 46 commands.</b> After the box and the help screen
9115
+ were fitted, <b>11</b> still emit a line past 80 columns. Ranked:
9116
+ <code>doctor</code>'s semantic-search hint at <b>127</b>; the AI-fallback notice at <b>101</b>,
9117
+ which is one shared string surfacing in <code>explain</code>, <code>impact</code> and
9118
+ <code>simulate</code>; <code>protocol</code>'s URL forms at 100; <code>changelog</code>'s
9119
+ unshallow hint at 93; <code>who</code>'s footer at 87; <code>search</code>'s extra hint at 82;
9120
+ <code>replay</code>'s footer at 81.
9121
+
9122
+ <b>Two of the eleven must be left alone.</b> <code>pulse</code>'s <code>source=</code> paths and
9123
+ <code>fingerprint</code>'s hash are data, not chrome — clipping them destroys the information the
9124
+ line exists to carry. So a blanket "no line exceeds <code>term_width()</code>" assertion is the
9125
+ wrong gate: it would false-positive on exactly the lines that should be long. Pin the composed
9126
+ sites individually.
9127
+
9128
+ <b>Why this is not a quick wrap.</b> The 101-column offender contains
9129
+ <code>using the heuristic fallback</code>, which is asserted by <b>six</b> test files plus
9130
+ <code>tests/bdd/features/explain.feature</code>. Wrapping inserts a newline mid-sentence and
9131
+ breaks every one of them; and under pytest <code>term_width()</code> falls back to 80, so the
9132
+ wrap fires in the suite rather than only on a narrow terminal. The change is a
9133
+ <code>wrap()</code> helper in <code>core/output.py</code> — mutation-gated, so boundary-width
9134
+ tests, not coverage — plus re-pinning those assertions. Shortening the strings instead is a
9135
+ smaller diff but a voice decision, and the substring pinned by the tests would have to survive
9136
+ either way.</p>
9137
+ <div class="meta">
9138
+ <span class="m">Complexity <b>M</b></span>
9139
+ <span class="m">Impact <b>Low</b></span>
9140
+ <span class="m">Wow <b class="wow">★★</b></span>
9141
+ <span class="m">11 commands still emit prose hints past 80 columns; the worst is one string pinned by six test files</span>
9142
+ </div>
9143
+ </article>
9012
9144
  <!-- /ROADMAP:cards -->
9013
9145
 
9014
9146
  </div>
@@ -89,6 +89,22 @@ class TestCohort:
89
89
  assert data[0]["member"] == _member("pilot", 100)
90
90
  assert data[1]["member"] == _member("zero", 0)
91
91
 
92
+ def test_no_literal_double_percent_reaches_the_terminal(self, boost, tapped):
93
+ """`%%` is printf escaping, and neither of these two strings is ever
94
+ %-formatted — so both reached the terminal verbatim as `%%`. The
95
+ membership assertion above stops one character short of the listing's
96
+ occurrence, which is how it survived.
97
+ """
98
+ boost("cohort", "create", "pilot", "--skills", "brainstorming",
99
+ "--percent", "50")
100
+ listing = boost("cohort", "list")
101
+ assert "%%" not in listing.out
102
+ assert "sha256(user:cohort) % 100 < rollout" in listing.out
103
+
104
+ helptext = boost("cohort", "--help")
105
+ assert "%%" not in helptext.out
106
+ assert "a 50% rollout" in helptext.out
107
+
92
108
  def test_zero_percent_creates_out_and_apply_skips(self, boost, tapped):
93
109
  r = boost("cohort", "create", "zero", "--skills", "brainstorming",
94
110
  "--percent", "0")
@@ -137,6 +137,42 @@ class TestMainDispatch:
137
137
  for _icon, title, _desc in cli.GROUPS.values():
138
138
  assert title in out
139
139
 
140
+ @pytest.mark.parametrize("cols", [60, 80, 100, 120])
141
+ def test_help_never_overflows_the_terminal(self, sandbox, capsys,
142
+ monkeypatch, cols):
143
+ """The top-level help was the one screen in the CLI that ignored the
144
+ terminal: `search` drops columns and truncates at 60, while `boost
145
+ --help` emitted a 105-column banner at every width, wrapping mid-word
146
+ for anyone not running a wide pane.
147
+ """
148
+ monkeypatch.setenv("NO_COLOR", "1")
149
+ monkeypatch.setattr(cli.out, "term_width", lambda: cols)
150
+ assert cli.main(["--help"]) == 0
151
+ for line in capsys.readouterr().out.splitlines():
152
+ assert cli.out.visible_len(line) <= cols, line
153
+
154
+ def test_help_keeps_the_product_name_and_version_at_60_columns(
155
+ self, sandbox, capsys, monkeypatch):
156
+ """Fitting the banner must not cost the two facts it carries."""
157
+ monkeypatch.setenv("NO_COLOR", "1")
158
+ monkeypatch.setattr(cli.out, "term_width", lambda: 60)
159
+ assert cli.main(["--help"]) == 0
160
+ out = capsys.readouterr().out
161
+ assert "Homebrew for AI coding skills" in out
162
+ assert cli.__version__ in out
163
+ assert "80 commands · 8 groups" in out
164
+
165
+ def test_help_still_names_every_command_when_narrow(self, sandbox, capsys,
166
+ monkeypatch):
167
+ """Summaries may be clipped to fit; command names never are, or the
168
+ help stops being usable as an index."""
169
+ monkeypatch.setenv("NO_COLOR", "1")
170
+ monkeypatch.setattr(cli.out, "term_width", lambda: 60)
171
+ assert cli.main(["--help"]) == 0
172
+ out = capsys.readouterr().out
173
+ for name, _g, _m, _s in cli.COMMANDS:
174
+ assert "\n %s" % name in out, name
175
+
140
176
  def test_help_word(self, sandbox, capsys):
141
177
  assert cli.main(["help"]) == 0
142
178
  assert "80 commands · 8 groups" in capsys.readouterr().out
@@ -457,6 +457,56 @@ class TestPanel:
457
457
  assert "\033[1minventory\033[0m" in output.panel("x", title="inventory")
458
458
 
459
459
 
460
+ class TestPanelFitsTerminal:
461
+ """`panel()` sized itself to its content and ignored the terminal, so a
462
+ long line produced a box wider than the pane — and a broken box is the
463
+ ugliest overflow there is, because the border wraps into the next row.
464
+ Measured: `boost count` drew 108 columns into an 80-column terminal.
465
+ """
466
+
467
+ def _rows(self, monkeypatch, cols, lines, **kw):
468
+ monkeypatch.setenv("NO_COLOR", "1")
469
+ monkeypatch.setattr(output, "term_width", lambda: cols)
470
+ return output.panel(lines, **kw).split("\n")
471
+
472
+ def test_untouched_when_it_already_fits(self, monkeypatch):
473
+ rows = self._rows(monkeypatch, 40, "x" * 36)
474
+ assert [output.visible_len(r) for r in rows] == [40, 40, 40]
475
+ assert "…" not in rows[1]
476
+
477
+ def test_exactly_at_the_limit_is_not_clipped(self, monkeypatch):
478
+ # inner 36 + "│ " + " │" == 40 == the full width: the boundary case a
479
+ # mutant flipping <= to < would break.
480
+ rows = self._rows(monkeypatch, 40, "y" * 36)
481
+ assert rows[1] == "│ " + "y" * 36 + " │"
482
+
483
+ def test_one_column_over_is_clipped(self, monkeypatch):
484
+ rows = self._rows(monkeypatch, 40, "z" * 37)
485
+ assert [output.visible_len(r) for r in rows] == [40, 40, 40]
486
+ assert rows[1].endswith("… │")
487
+
488
+ def test_every_row_is_the_same_width_after_clipping(self, monkeypatch):
489
+ rows = self._rows(monkeypatch, 30, ["short", "w" * 90, "mid" * 4])
490
+ assert len({output.visible_len(r) for r in rows}) == 1
491
+ assert output.visible_len(rows[0]) <= 30
492
+
493
+ def test_title_is_clipped_too(self, monkeypatch):
494
+ rows = self._rows(monkeypatch, 24, "a" * 50, title="t" * 40)
495
+ assert all(output.visible_len(r) <= 24 for r in rows)
496
+ assert len({output.visible_len(r) for r in rows}) == 1
497
+
498
+ def test_a_narrow_pane_still_yields_a_box(self, monkeypatch):
499
+ rows = self._rows(monkeypatch, 8, "content that is far too long")
500
+ assert len(rows) == 3
501
+ assert rows[0].startswith("╭") and rows[-1].endswith("╯")
502
+ assert all(output.visible_len(r) <= 8 for r in rows)
503
+
504
+ def test_a_zero_width_pane_does_not_crash_or_go_negative(self, monkeypatch):
505
+ rows = self._rows(monkeypatch, 0, "anything")
506
+ assert len(rows) == 3
507
+ assert all(output.visible_len(r) >= 0 for r in rows)
508
+
509
+
460
510
  class TestEmptyState:
461
511
  def test_message_only_plain(self, monkeypatch):
462
512
  monkeypatch.setenv("NO_COLOR", "1")