boost-skill-cli 1.2.10__tar.gz → 1.2.12__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 (733) hide show
  1. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.vale/styles/config/vocabularies/boost/accept.txt +5 -4
  2. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/PKG-INFO +15 -7
  3. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/README.md +14 -6
  4. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/_version.py +2 -2
  5. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/discovery.py +155 -134
  6. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/browse.py +156 -1
  7. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/output.py +121 -0
  8. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_skill_cli.egg-info/PKG-INFO +15 -7
  9. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  10. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/index.html +4 -3
  11. boost_skill_cli-1.2.12/docs/roadmap/items/search-and-browse-visual-refresh.md +63 -0
  12. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap.html +60 -1
  13. boost_skill_cli-1.2.12/tests/eval/taps-scale.txt +214 -0
  14. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_discovery.py +75 -16
  15. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_browse.py +371 -4
  16. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_output.py +284 -0
  17. boost_skill_cli-1.2.10/tests/eval/taps-scale.txt +0 -214
  18. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.gitattributes +0 -0
  19. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.gitignore +0 -0
  20. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.gitleaks.toml +0 -0
  21. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.htmlvalidate.json +0 -0
  22. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.lighthouserc.json +0 -0
  23. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.lycheeignore +0 -0
  24. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.markdownlint-cli2.jsonc +0 -0
  25. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.pre-commit-config.yaml +0 -0
  26. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.stylelintrc.json +0 -0
  27. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.vale/styles/boost/Terminology.yml +0 -0
  28. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/.vale.ini +0 -0
  29. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/CLAUDE.md +0 -0
  30. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/CODE_OF_CONDUCT.md +0 -0
  31. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/CONTRIBUTING.md +0 -0
  32. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/LICENSE +0 -0
  33. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/MANIFEST.in +0 -0
  34. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/Makefile +0 -0
  35. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/SECURITY.md +0 -0
  36. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost +0 -0
  37. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/__init__.py +0 -0
  38. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/__main__.py +0 -0
  39. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/cli.py +0 -0
  40. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/cliparse.py +0 -0
  41. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/__init__.py +0 -0
  42. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/_common.py +0 -0
  43. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/bmad.py +0 -0
  44. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/configuration.py +0 -0
  45. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/hooks.py +0 -0
  46. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/info.py +0 -0
  47. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/intelligence.py +0 -0
  48. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/pkg.py +0 -0
  49. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/quality.py +0 -0
  50. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/run.py +0 -0
  51. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/safety.py +0 -0
  52. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/taps.py +0 -0
  53. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/commands/team.py +0 -0
  54. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/__init__.py +0 -0
  55. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/adapters.py +0 -0
  56. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/agents.py +0 -0
  57. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/ai.py +0 -0
  58. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/bmad.py +0 -0
  59. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/bootstrap.py +0 -0
  60. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/builtin.py +0 -0
  61. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/capabilities.py +0 -0
  62. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/catalog.py +0 -0
  63. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/catalogbundle.py +0 -0
  64. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/chat.py +0 -0
  65. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/claude_settings.py +0 -0
  66. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/complete.py +0 -0
  67. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/config.py +0 -0
  68. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/dense.py +0 -0
  69. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/ed25519.py +0 -0
  70. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/embed.py +0 -0
  71. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/faithfulness.py +0 -0
  72. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/frontmatter.py +0 -0
  73. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/gitutil.py +0 -0
  74. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/imperative.py +0 -0
  75. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/injectscan.py +0 -0
  76. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/installscan.py +0 -0
  77. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/integrity.py +0 -0
  78. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/journal.py +0 -0
  79. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/localembed.py +0 -0
  80. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/lockfile.py +0 -0
  81. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/logs.py +0 -0
  82. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/mcp.py +0 -0
  83. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/mcpdecl.py +0 -0
  84. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/mcphost.py +0 -0
  85. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/minisign.py +0 -0
  86. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/nethttp.py +0 -0
  87. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/paths.py +0 -0
  88. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/policy.py +0 -0
  89. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/projectlock.py +0 -0
  90. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/provenance.py +0 -0
  91. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/rag.py +0 -0
  92. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/registry.py +0 -0
  93. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/resolve.py +0 -0
  94. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/rules.py +0 -0
  95. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/scopes.py +0 -0
  96. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/secretscan.py +0 -0
  97. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/selfupdate.py +0 -0
  98. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/serve.py +0 -0
  99. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/stackprobe.py +0 -0
  100. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/staleness.py +0 -0
  101. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/store.py +0 -0
  102. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/trustaudit.py +0 -0
  103. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/typosquat.py +0 -0
  104. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/updatediff.py +0 -0
  105. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/util.py +0 -0
  106. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/core/workflows.py +0 -0
  107. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/data/registries.json +0 -0
  108. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/data/rules/boost-first.mdc +0 -0
  109. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/errors.py +0 -0
  110. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_cli/spin.py +0 -0
  111. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_langchain/__init__.py +0 -0
  112. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_langchain/_compat.py +0 -0
  113. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_langchain/graph.py +0 -0
  114. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_langchain/loader.py +0 -0
  115. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_langchain/py.typed +0 -0
  116. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_langchain/retriever.py +0 -0
  117. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  118. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  119. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_skill_cli.egg-info/requires.txt +0 -0
  120. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/boost_skill_cli.egg-info/top_level.txt +0 -0
  121. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/codecov.yml +0 -0
  122. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/.claude/settings.local.json +0 -0
  123. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/DEBUGGING.md +0 -0
  124. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/adapters.html +0 -0
  125. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/architecture/README.md +0 -0
  126. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/architecture/c4-components-core.md +0 -0
  127. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/architecture/c4-containers.md +0 -0
  128. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/architecture/c4-context.md +0 -0
  129. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/architecture/c4-dynamic-install.md +0 -0
  130. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/gifs/distill.gif +0 -0
  131. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/gifs/doctor.gif +0 -0
  132. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/gifs/explain.gif +0 -0
  133. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/gifs/hooks.gif +0 -0
  134. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/gifs/install.gif +0 -0
  135. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/gifs/pulse.gif +0 -0
  136. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/gifs/search.gif +0 -0
  137. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/gifs/tap.gif +0 -0
  138. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/tapes/distill.tape +0 -0
  139. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/tapes/doctor.tape +0 -0
  140. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/tapes/explain.tape +0 -0
  141. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/tapes/hooks.tape +0 -0
  142. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/tapes/install.tape +0 -0
  143. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/tapes/pulse.tape +0 -0
  144. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/tapes/search.tape +0 -0
  145. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel/tapes/tap.tape +0 -0
  146. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/carousel.html +0 -0
  147. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/chat.html +0 -0
  148. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/commands.html +0 -0
  149. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/demo-index.json +0 -0
  150. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/demo.gif +0 -0
  151. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/demo.html +0 -0
  152. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/demo.tape +0 -0
  153. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/design-roadmap.html +0 -0
  154. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/eval-latest.json +0 -0
  155. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/eval.html +0 -0
  156. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/langchain.html +0 -0
  157. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/mcp-hub.html +0 -0
  158. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/rag-architecture.md +0 -0
  159. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D01.md +0 -0
  160. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D02.md +0 -0
  161. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D03.md +0 -0
  162. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D04.md +0 -0
  163. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D05.md +0 -0
  164. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D06.md +0 -0
  165. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D07.md +0 -0
  166. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D08.md +0 -0
  167. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D09.md +0 -0
  168. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D10.md +0 -0
  169. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D11.md +0 -0
  170. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D12.md +0 -0
  171. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D13.md +0 -0
  172. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D14.md +0 -0
  173. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D15.md +0 -0
  174. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D16.md +0 -0
  175. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D17.md +0 -0
  176. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D18.md +0 -0
  177. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D19.md +0 -0
  178. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D20.md +0 -0
  179. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D21.md +0 -0
  180. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D22.md +0 -0
  181. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D23.md +0 -0
  182. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D24.md +0 -0
  183. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D25.md +0 -0
  184. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/BOOST-D26.md +0 -0
  185. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  186. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  187. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  188. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  189. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  190. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  191. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  192. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  193. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  194. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  195. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  196. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  197. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  198. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/boost-first-rule.md +0 -0
  199. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  200. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  201. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  202. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  203. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  204. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  205. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  206. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  207. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  208. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  209. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  210. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  211. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  212. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  213. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  214. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  215. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  216. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  217. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/command-carousel-page.md +0 -0
  218. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  219. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  220. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  221. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  222. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  223. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  224. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  225. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  226. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  227. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  228. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  229. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  230. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  231. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  232. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  233. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  234. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  235. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  236. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  237. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  238. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  239. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  240. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  241. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  242. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  243. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  244. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  245. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  246. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  247. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  248. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  249. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  250. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  251. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  252. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  253. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  254. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  255. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  256. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  257. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  258. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  259. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  260. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  261. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  262. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  263. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  264. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/github-community-health-files.md +0 -0
  265. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  266. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  267. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  268. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  269. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  270. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  271. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  272. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  273. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  274. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  275. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  276. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  277. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  278. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  279. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  280. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  281. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  282. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  283. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  284. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  285. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  286. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  287. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  288. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  289. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  290. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  291. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  292. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  293. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  294. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  295. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  296. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  297. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  298. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  299. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  300. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  301. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  302. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  303. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  304. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  305. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  306. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  307. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  308. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  309. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  310. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  311. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  312. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  313. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  314. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  315. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  316. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  317. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  318. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  319. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  320. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  321. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  322. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  323. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  324. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  325. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  326. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  327. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  328. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  329. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  330. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  331. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  332. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  333. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  334. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  335. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  336. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  337. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  338. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  339. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  340. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  341. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  342. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  343. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  344. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  345. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  346. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  347. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  348. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  349. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  350. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  351. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  352. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  353. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  354. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  355. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  356. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  357. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  358. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  359. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  360. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  361. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  362. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  363. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  364. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  365. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  366. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  367. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  368. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  369. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  370. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  371. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  372. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  373. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  374. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  375. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  376. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  377. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  378. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  379. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  380. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  381. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  382. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  383. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  384. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  385. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  386. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  387. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  388. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  389. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  390. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  391. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  392. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  393. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  394. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  395. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  396. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  397. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  398. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  399. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  400. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  401. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  402. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  403. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  404. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  405. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  406. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  407. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  408. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  409. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  410. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  411. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  412. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  413. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  414. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  415. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  416. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  417. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  418. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  419. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  420. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  421. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  422. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  423. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  424. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  425. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  426. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  427. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  428. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  429. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  430. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  431. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  432. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  433. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  434. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  435. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  436. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  437. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  438. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  439. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  440. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/workspace-scope-install.md +0 -0
  441. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/zip-strict-audit.md +0 -0
  442. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  443. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  444. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  445. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/eslint.config.mjs +0 -0
  446. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/README.md +0 -0
  447. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/__init__.py +0 -0
  448. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/baseline.json +0 -0
  449. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/faithfulness.py +0 -0
  450. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/golden_set.json +0 -0
  451. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/make_corpus.py +0 -0
  452. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/make_golden.py +0 -0
  453. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/metrics.py +0 -0
  454. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/publish_golden_dataset.py +0 -0
  455. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/evals/run_evals.py +0 -0
  456. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/examples/README.md +0 -0
  457. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/examples/adapt-demo.sh +0 -0
  458. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/examples/boost-run-prototype.sh +0 -0
  459. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/index.html +0 -0
  460. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/noxfile.py +0 -0
  461. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/pyproject.toml +0 -0
  462. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/coverage-tools.in +0 -0
  463. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/coverage-tools.txt +0 -0
  464. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/lint-tools.in +0 -0
  465. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/lint-tools.txt +0 -0
  466. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/mutation-tools.in +0 -0
  467. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/mutation-tools.txt +0 -0
  468. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/platform-pins.lock +0 -0
  469. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/release-tools.in +0 -0
  470. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/release-tools.txt +0 -0
  471. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/test-tools.in +0 -0
  472. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/requirements/test-tools.txt +0 -0
  473. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/a11y_check.py +0 -0
  474. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/bench_cli.sh +0 -0
  475. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/build_command_reference.py +0 -0
  476. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/build_demo_index.py +0 -0
  477. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/build_registries.py +0 -0
  478. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/build_roadmap.py +0 -0
  479. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/build_scale_corpus.py +0 -0
  480. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/check_anchors.py +0 -0
  481. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/check_licenses.py +0 -0
  482. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/check_required_checks.py +0 -0
  483. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/ensure_eval_corpus.sh +0 -0
  484. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/eval_corpus.py +0 -0
  485. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/eval_explain.py +0 -0
  486. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/eval_gate.py +0 -0
  487. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/eval_recommend.py +0 -0
  488. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/eval_retrieval.py +0 -0
  489. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/eval_stats_summary.py +0 -0
  490. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/import_budget.py +0 -0
  491. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/lock_toolchain.py +0 -0
  492. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/measure_registry.py +0 -0
  493. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/mutation_gate.py +0 -0
  494. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/mutation_shards.py +0 -0
  495. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/mutation_weights.json +0 -0
  496. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/page_budget.py +0 -0
  497. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/perf_gate.py +0 -0
  498. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/post_deploy_smoke.py +0 -0
  499. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/publish_eval_json.py +0 -0
  500. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/release_guard.py +0 -0
  501. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/release_preflight.py +0 -0
  502. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/scripts/serve_docs.py +0 -0
  503. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/setup.cfg +0 -0
  504. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/sonar-project.properties +0 -0
  505. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/style/README.md +0 -0
  506. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/style/boost.css +0 -0
  507. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/style/boost.js +0 -0
  508. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/style/demo.html +0 -0
  509. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/adapt.feature +0 -0
  510. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/browse.feature +0 -0
  511. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/count.feature +0 -0
  512. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/discover.feature +0 -0
  513. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/doctor.feature +0 -0
  514. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/environment.py +0 -0
  515. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/explain.feature +0 -0
  516. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/index.feature +0 -0
  517. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/install.feature +0 -0
  518. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/list.feature +0 -0
  519. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/mcp.feature +0 -0
  520. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/search.feature +0 -0
  521. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/steps/cli_steps.py +0 -0
  522. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/steps/discovery_steps.py +0 -0
  523. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/steps/mcp_steps.py +0 -0
  524. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/bdd/features/steps/quality_steps.py +0 -0
  525. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/conftest.py +0 -0
  526. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/eval/baseline.json +0 -0
  527. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/eval/explain.jsonl +0 -0
  528. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/eval/golden-natural.jsonl +0 -0
  529. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/eval/golden.jsonl +0 -0
  530. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/eval/recommend.jsonl +0 -0
  531. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/eval/taps.txt +0 -0
  532. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_capabilities_policy.py +0 -0
  533. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_adapt.py +0 -0
  534. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_bmad.py +0 -0
  535. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_catalog.py +0 -0
  536. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_chat.py +0 -0
  537. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_configuration.py +0 -0
  538. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_hooks.py +0 -0
  539. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_info.py +0 -0
  540. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_intelligence.py +0 -0
  541. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_pkg.py +0 -0
  542. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_quality.py +0 -0
  543. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_taps.py +0 -0
  544. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_cli_team.py +0 -0
  545. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_everyday_loop.py +0 -0
  546. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_integrity_enforce.py +0 -0
  547. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_kind_conformance.py +0 -0
  548. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_property_parsers.py +0 -0
  549. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_run.py +0 -0
  550. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_tap_signing.py +0 -0
  551. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/functional/test_workspace_scope.py +0 -0
  552. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/README.md +0 -0
  553. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  554. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  555. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  556. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  557. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  558. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  559. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  560. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  561. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  562. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  563. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  564. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  565. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  566. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  567. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  568. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  569. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  570. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  571. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  572. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  573. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  574. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  575. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  576. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/fuzz_frontmatter.py +0 -0
  577. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/fuzz/fuzz_registry.py +0 -0
  578. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/langchain/conftest.py +0 -0
  579. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/langchain/test_graph.py +0 -0
  580. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/langchain/test_loader.py +0 -0
  581. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/langchain/test_retriever.py +0 -0
  582. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/make_fixture.py +0 -0
  583. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/perf/test_benchmarks.py +0 -0
  584. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/smoke.sh +0 -0
  585. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_a11y_check.py +0 -0
  586. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_action_pin_lockstep.py +0 -0
  587. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_adapters.py +0 -0
  588. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_adapters_multi.py +0 -0
  589. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_adapters_runner.py +0 -0
  590. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_agents.py +0 -0
  591. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_ai.py +0 -0
  592. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_bmad_core.py +0 -0
  593. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_boost_first_offer.py +0 -0
  594. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_bootstrap.py +0 -0
  595. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_builtin.py +0 -0
  596. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_capabilities.py +0 -0
  597. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_catalog.py +0 -0
  598. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_catalogbundle.py +0 -0
  599. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_chat.py +0 -0
  600. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_check_anchors.py +0 -0
  601. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_check_licenses.py +0 -0
  602. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_claude_settings.py +0 -0
  603. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_clean_internal_cache.py +0 -0
  604. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_cliparse.py +0 -0
  605. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_codeql_analysis_key.py +0 -0
  606. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_command_reference_fresh.py +0 -0
  607. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_community_health_files.py +0 -0
  608. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_compact.py +0 -0
  609. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_complete.py +0 -0
  610. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_complete_rc_block.py +0 -0
  611. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_config.py +0 -0
  612. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_content_dedupe.py +0 -0
  613. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_content_identity.py +0 -0
  614. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_crash_redaction.py +0 -0
  615. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dedup_trust.py +0 -0
  616. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_demo_index.py +0 -0
  617. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dense.py +0 -0
  618. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dense_embed_dedupe.py +0 -0
  619. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dense_fallback.py +0 -0
  620. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dense_fix_hint.py +0 -0
  621. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dense_shard_real_schema.py +0 -0
  622. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  623. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dense_shards.py +0 -0
  624. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dense_status.py +0 -0
  625. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_dependabot_config.py +0 -0
  626. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_docs_pages_linked.py +0 -0
  627. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_docsite_chrome.py +0 -0
  628. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_ed25519.py +0 -0
  629. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_embed.py +0 -0
  630. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_embed_local.py +0 -0
  631. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_embed_truncated_response.py +0 -0
  632. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_entry_key.py +0 -0
  633. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_errors_and_cli_table.py +0 -0
  634. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_eval_baseline.py +0 -0
  635. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_eval_corpus.py +0 -0
  636. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_eval_faithfulness.py +0 -0
  637. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_eval_gate.py +0 -0
  638. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_eval_grading.py +0 -0
  639. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_eval_metrics.py +0 -0
  640. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_eval_stats_summary.py +0 -0
  641. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  642. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_faithfulness.py +0 -0
  643. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_frontmatter.py +0 -0
  644. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_fuzz_targets.py +0 -0
  645. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  646. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_gitleaks_config.py +0 -0
  647. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_gitutil.py +0 -0
  648. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_gitutil_lfs.py +0 -0
  649. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_gitutil_sparse.py +0 -0
  650. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_imperative.py +0 -0
  651. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_import_budget.py +0 -0
  652. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_injectscan.py +0 -0
  653. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_install_permission_error.py +0 -0
  654. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_installscan.py +0 -0
  655. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_integrity.py +0 -0
  656. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_journal.py +0 -0
  657. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_langchain_packaging.py +0 -0
  658. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_link_ownership.py +0 -0
  659. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_localembed.py +0 -0
  660. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_localembed_e2e.py +0 -0
  661. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_lockfile.py +0 -0
  662. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_logs.py +0 -0
  663. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_marketing_counts.py +0 -0
  664. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_mcp.py +0 -0
  665. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_mcp_install_scan.py +0 -0
  666. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_mcpdecl.py +0 -0
  667. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_mcphost.py +0 -0
  668. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_measure_registry.py +0 -0
  669. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_minisign.py +0 -0
  670. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_mutation_hardening.py +0 -0
  671. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_mutation_shards.py +0 -0
  672. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_mutation_subfile_shards.py +0 -0
  673. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_mutmut_source_paths.py +0 -0
  674. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_nethttp.py +0 -0
  675. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_page_budget.py +0 -0
  676. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_paths.py +0 -0
  677. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_perf_gate.py +0 -0
  678. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_pkg_confusions.py +0 -0
  679. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_pkg_injection.py +0 -0
  680. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_pkg_secrets.py +0 -0
  681. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_platform_pins.py +0 -0
  682. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_policy.py +0 -0
  683. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_post_deploy_smoke.py +0 -0
  684. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_project_mcp_sidecar.py +0 -0
  685. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_projectlock.py +0 -0
  686. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_provenance.py +0 -0
  687. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_publish_golden_dataset.py +0 -0
  688. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_rag.py +0 -0
  689. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_rag_fusion.py +0 -0
  690. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_registries_fresh.py +0 -0
  691. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_registry.py +0 -0
  692. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_registry_categories.py +0 -0
  693. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_registry_control_chars.py +0 -0
  694. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_release_guard.py +0 -0
  695. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_release_preflight.py +0 -0
  696. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_required_checks.py +0 -0
  697. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_resolve.py +0 -0
  698. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_roadmap_fresh.py +0 -0
  699. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_rules.py +0 -0
  700. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_scale_corpus.py +0 -0
  701. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_scopes.py +0 -0
  702. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_secretscan.py +0 -0
  703. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_selfupdate.py +0 -0
  704. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_serve.py +0 -0
  705. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_serve_docs.py +0 -0
  706. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_shards_matrix.py +0 -0
  707. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_smoke_covers_every_command.py +0 -0
  708. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_spin.py +0 -0
  709. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_stackprobe.py +0 -0
  710. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_staleness.py +0 -0
  711. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_store.py +0 -0
  712. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_store_materialize.py +0 -0
  713. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_sync_blocked_links.py +0 -0
  714. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  715. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_token_parity.py +0 -0
  716. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_toolchain_lock.py +0 -0
  717. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_trustaudit.py +0 -0
  718. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_typosquat.py +0 -0
  719. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_updatediff.py +0 -0
  720. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_util.py +0 -0
  721. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_version.py +0 -0
  722. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_visual_harness_flags.py +0 -0
  723. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_workflow_concurrency.py +0 -0
  724. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  725. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  726. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_workflow_timeouts.py +0 -0
  727. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_workflows.py +0 -0
  728. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  729. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/visual/a11y_check.mjs +0 -0
  730. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/visual/console_check.mjs +0 -0
  731. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/visual/package-lock.json +0 -0
  732. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/visual/package.json +0 -0
  733. {boost_skill_cli-1.2.10 → boost_skill_cli-1.2.12}/tests/visual/visual_check.mjs +0 -0
@@ -67,17 +67,18 @@ reindex
67
67
  repo
68
68
  repo's
69
69
  repos
70
- rescan
71
- rescanned
72
- rescans
73
70
  Rerank
74
71
  rerank
75
72
  reranking
73
+ rescan
74
+ rescanned
75
+ rescans
76
76
  ruleset
77
77
  Rulesets
78
78
  rulesets
79
79
  sandboxed
80
80
  sandboxing
81
+ scrollbar
81
82
  Shopify
82
83
  SonarCloud
83
84
  stderr
@@ -90,8 +91,8 @@ tappable
90
91
  teardown
91
92
  tempdir
92
93
  toggleable
93
- Tokenization
94
94
  tokenization
95
+ Tokenization
95
96
  toolchain
96
97
  toolkits
97
98
  traceback
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.10
3
+ Version: 1.2.12
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -999,8 +999,8 @@ list on the left, the selected item's full detail on the right.
999
999
  │ match (●) all ( ) name ( ) descr ( ) tap │ ──────────────────── │
1000
1000
  │ ↑↓ move ⇥ select → detail ^T scope ↵ install │ Review a pull … │
1001
1001
  ├───────────────────────────────────────────────────────┤ ● installed │
1002
- │ ★● code-review [skill] v1.0.0 [acme/quality] │ SOURCE · FRONTMATTER │
1003
- ╰───────────────────────────────────────────────────────┴──────────────────────╯
1002
+ │ ★● code-review [skill] v1.0.0 [acme/quality] │ SOURCE · FRONTMATTER │
1003
+ ╰─ ✓ 1 installed ───────────────────────────────────────┴──────────────────────╯
1004
1004
  ```
1005
1005
 
1006
1006
  | key | does |
@@ -1018,10 +1018,18 @@ The query splits on spaces and **every** token must match, so `code review`
1018
1018
  narrows where `code` alone would not. Selection lives on `⇥` rather than space
1019
1019
  for exactly that reason, and `q` stays a character so `quality` is searchable.
1020
1020
 
1021
- `↵` installs without dropping you back to the shell, and the detail pane
1022
- reports it — `◐ installing…`, then `● installed` with the destination, or
1023
- `✗` with the reason. Installs queue and run one at a time, because each one
1024
- rewrites the lock file.
1021
+ `↵` installs without dropping you back to the shell, and the whole surface
1022
+ reports it: the row's mark cycles `◐` → `●` (or `✗`), the detail pane narrates
1023
+ with the destination or the reason, and a chip in the bottom rule keeps the
1024
+ session tally (`✓ 2 installed`) visible even with the pane closed. Installs
1025
+ queue and run one at a time, because each one rewrites the lock file.
1026
+
1027
+ The list is honest at the edges too: badges sit in a right-aligned rail
1028
+ (dropping least-important-first when narrow, the `×N` copies count last), an
1029
+ overflowing list gets a scrollbar, a zero-match filter says
1030
+ `○ no matches for '…'` with the keys that widen it, and the detail pane's
1031
+ `installs` line states what `↵` will touch **before** it is pressed — for a
1032
+ rule that is each agent's context file, which is why it earns the line.
1025
1033
 
1026
1034
  **Duplicates are collapsed.** Registries render one skill into `.claude/`,
1027
1035
  `.cursor/`, `.gemini/` and a plugin root, so the same thing was listed four
@@ -281,8 +281,8 @@ list on the left, the selected item's full detail on the right.
281
281
  │ match (●) all ( ) name ( ) descr ( ) tap │ ──────────────────── │
282
282
  │ ↑↓ move ⇥ select → detail ^T scope ↵ install │ Review a pull … │
283
283
  ├───────────────────────────────────────────────────────┤ ● installed │
284
- │ ★● code-review [skill] v1.0.0 [acme/quality] │ SOURCE · FRONTMATTER │
285
- ╰───────────────────────────────────────────────────────┴──────────────────────╯
284
+ │ ★● code-review [skill] v1.0.0 [acme/quality] │ SOURCE · FRONTMATTER │
285
+ ╰─ ✓ 1 installed ───────────────────────────────────────┴──────────────────────╯
286
286
  ```
287
287
 
288
288
  | key | does |
@@ -300,10 +300,18 @@ The query splits on spaces and **every** token must match, so `code review`
300
300
  narrows where `code` alone would not. Selection lives on `⇥` rather than space
301
301
  for exactly that reason, and `q` stays a character so `quality` is searchable.
302
302
 
303
- `↵` installs without dropping you back to the shell, and the detail pane
304
- reports it — `◐ installing…`, then `● installed` with the destination, or
305
- `✗` with the reason. Installs queue and run one at a time, because each one
306
- rewrites the lock file.
303
+ `↵` installs without dropping you back to the shell, and the whole surface
304
+ reports it: the row's mark cycles `◐` → `●` (or `✗`), the detail pane narrates
305
+ with the destination or the reason, and a chip in the bottom rule keeps the
306
+ session tally (`✓ 2 installed`) visible even with the pane closed. Installs
307
+ queue and run one at a time, because each one rewrites the lock file.
308
+
309
+ The list is honest at the edges too: badges sit in a right-aligned rail
310
+ (dropping least-important-first when narrow, the `×N` copies count last), an
311
+ overflowing list gets a scrollbar, a zero-match filter says
312
+ `○ no matches for '…'` with the keys that widen it, and the detail pane's
313
+ `installs` line states what `↵` will touch **before** it is pressed — for a
314
+ rule that is each agent's context file, which is why it earns the line.
307
315
 
308
316
  **Duplicates are collapsed.** Registries render one skill into `.claude/`,
309
317
  `.cursor/`, `.gemini/` and a plugin root, so the same thing was listed four
@@ -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.10'
22
- __version_tuple__ = version_tuple = (1, 2, 10)
21
+ __version__ = version = '1.2.12'
22
+ __version_tuple__ = version_tuple = (1, 2, 12)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -32,6 +32,7 @@ from ..core import (
32
32
  paths,
33
33
  rag,
34
34
  registry,
35
+ rules,
35
36
  store,
36
37
  util,
37
38
  )
@@ -133,8 +134,11 @@ def cmd_search(argv):
133
134
  print(json.dumps([e | {"score": s} for e, s in scored[:args.limit]]))
134
135
  return 0
135
136
  if not scored:
136
- out.info("no matches for %r" % query)
137
- out.info(out.role("try `boost discover %s` to search all of GitHub" % query, "muted"))
137
+ # The standardized ○/→ empty state, so "nothing here" reads the same
138
+ # as every other command's; both wordings are pinned by tests.
139
+ print(out.empty_state(
140
+ "no matches for %r" % query,
141
+ "try `boost discover %s` to search all of GitHub" % query))
138
142
  _hint_semantic_search(engine)
139
143
  return 0
140
144
  # The CLI's long-standing wording for the BM25 engine differs from the label
@@ -150,22 +154,26 @@ def cmd_search(argv):
150
154
  else:
151
155
  out.warn(ai.fallback_note())
152
156
  shown = scored[:args.limit]
153
- # Cap the name column so one long name can't pad every row, and clip each
154
- # description to the remaining terminal width so results stay one line each.
155
- name_w = min(max(len(e["name"]) for e, _ in shown), 32)
157
+ # The dot marks "a skill by this name is installed" — a name match, with
158
+ # the known homonym caveat (13 real skills share `code-reviewer`). A lock
159
+ # problem must never take search down with it.
160
+ installed: set[str] = set()
161
+ with contextlib.suppress(Exception):
162
+ installed = set(store.installed())
156
163
  top = max((s for _e, s in shown), default=0) or 1
157
- cols = out.term_width()
164
+ # One column plan for the whole screen (name, kind, tap, description with
165
+ # a stated drop order), one assembler per row — both pure and unit-tested
166
+ # in core.output, so this loop only feeds and prints.
167
+ lay = out.search_layout(out.term_width(),
168
+ [e["name"] for e, _ in shown],
169
+ [str(e.get("kind") or "skill") for e, _ in shown],
170
+ [str(e.get("tap") or "") for e, _ in shown])
158
171
  for e, sc in shown:
159
- # A relevance meter makes the ranking visible; tint it by magnitude.
160
- frac = sc / top
161
- hue = "cyan" if frac >= 0.66 else "violet" if frac >= 0.33 else "pink"
162
- bar = out.aurora(out.meter(frac), hue)
163
- tag = " " + out.role("★ curated", "warn") if e.get("curated") else ""
164
- tag_w = len(" ★ curated") if e.get("curated") else 0
165
- desc_w = max(cols - 2 - 5 - name_w - 2 - tag_w, 8) # 5 = meter + space
166
- name_cell = out.role(out.truncate(e["name"], name_w).ljust(name_w), "accent")
167
- out.info(bar + " " + name_cell + " "
168
- + out.truncate(e["description"] or "", desc_w) + tag)
172
+ out.info(out.format_search_row(
173
+ e["name"], e.get("description") or "",
174
+ str(e.get("kind") or "skill"), str(e.get("tap") or ""), sc / top,
175
+ curated=bool(e.get("curated")),
176
+ installed=e["name"] in installed, lay=lay))
169
177
  out.info(out.role("%d match%s · ranked by %s"
170
178
  % (len(scored), "" if len(scored) == 1 else "es", ranker), "muted"))
171
179
  _hint_semantic_search(engine)
@@ -692,12 +700,6 @@ def cmd_recommend(argv):
692
700
  return 0
693
701
 
694
702
 
695
- def _subseq(needle: str, hay: str) -> bool:
696
- """True when needle is a subsequence of hay (fuzzy filter)."""
697
- it = iter(hay)
698
- return all(ch in it for ch in needle)
699
-
700
-
701
703
  def _browse_plain(entries, why: str):
702
704
  out.warn(why + " — showing the full catalog")
703
705
  out.table([(e["name"], "v" + e["version"], e["tap"],
@@ -729,7 +731,7 @@ def _row_badges(e: dict, categories: dict):
729
731
  and — when the tap is one of the curated registries — its category.
730
732
  Most-important-first, so a narrow terminal drops from the tail without
731
733
  losing the essentials (kind and version survive; category goes first)."""
732
- badges = [("[%s]" % e.get("kind", "skill"),
734
+ badges = [(out.kind_label(e.get("kind", "skill")),
733
735
  _kind_theme_key(e.get("kind", "skill"))),
734
736
  ("v" + e["version"], "version"),
735
737
  ("[%s]" % e["tap"], "tap")]
@@ -807,50 +809,22 @@ def _nearest_base(curses):
807
809
  "yellow": curses.COLOR_YELLOW}
808
810
 
809
811
 
810
- def _match_positions(needle, hay):
811
- """Indices in hay consumed by a left-to-right subsequence match of needle.
812
-
813
- Drives fuzzy-match highlighting; returns [] when needle isn't a
814
- subsequence of hay (so nothing is highlighted).
815
- """
816
- positions, i = [], 0
817
- for j, ch in enumerate(hay):
818
- if i < len(needle) and ch == needle[i]:
819
- positions.append(j)
820
- i += 1
821
- return positions if i == len(needle) else []
812
+ # Geometry that used to live here moved into core.browse, under the mutation
813
+ # gate; the thin aliases keep the draw code (and its pinned tests) reading the
814
+ # same while making "both panes share one implementation" provable by `is`.
815
+ _scrollbar = browse.scrollbar
816
+ _grad_segments = browse.rule_segments
822
817
 
823
818
 
824
- def _scrollbar(total, rows, top):
825
- """(thumb_start, thumb_len) for a rows-tall scrollbar; None when all fits."""
826
- if rows <= 0 or total <= rows:
827
- return None
828
- thumb = max(1, rows * rows // total)
829
- max_top = total - rows
830
- start = round((rows - thumb) * top / max_top) if max_top else 0
831
- return (start, thumb)
832
-
833
-
834
- def _grad_segments(width, n=3):
835
- """Split a width-wide rule into n near-equal [(start, length)] runs.
819
+ def _aurora_pairs(curses):
820
+ """Allocate Aurora curses colour pairs.
836
821
 
837
- Lets the browser paint a cyan -> violet -> pink gradient bar the same way
838
- out.gradient() lerps the wordmark.
822
+ Returns ``(pairs, custom)``: token-name -> attr int (0 if none), and
823
+ whether true custom colours were achieved — the theme needs to know,
824
+ because the gradient rule is only honest when its three stops are the
825
+ real Aurora hues (on the 8/16-colour fallback violet and pink both map to
826
+ magenta, and cyan/magenta/magenta reads as confetti, not a gradient).
839
827
  """
840
- if width <= 0:
841
- return []
842
- n = min(n, width)
843
- base, extra = divmod(width, n)
844
- segs, pos = [], 0
845
- for k in range(n):
846
- length = base + (1 if k < extra else 0)
847
- segs.append((pos, length))
848
- pos += length
849
- return segs
850
-
851
-
852
- def _aurora_pairs(curses):
853
- """Allocate Aurora curses colour pairs; token-name -> attr int (0 if none)."""
854
828
  names = ("cyan", "violet", "pink", "green", "yellow")
855
829
  try:
856
830
  custom = curses.can_change_color() and 16 + len(names) <= curses.COLORS
@@ -875,47 +849,7 @@ def _aurora_pairs(curses):
875
849
  pairs[nm] = curses.color_pair(i)
876
850
  except curses.error:
877
851
  pairs[nm] = 0
878
- return pairs
879
-
880
-
881
- def _aurora_theme(curses):
882
- """role -> curses attr. Monochrome baseline, upgraded to Aurora where able."""
883
- t = {"title": curses.A_BOLD, "prompt": curses.A_BOLD, "query": curses.A_BOLD,
884
- "count": curses.A_DIM, "help": curses.A_DIM, "star": curses.A_NORMAL,
885
- "name": curses.A_NORMAL, "sel_bar": curses.A_REVERSE,
886
- "sel_name": curses.A_BOLD, "match": curses.A_BOLD,
887
- "version": curses.A_DIM, "tap": curses.A_NORMAL,
888
- "rule": [curses.A_NORMAL, curses.A_NORMAL, curses.A_NORMAL],
889
- "scroll": curses.A_DIM, "detail_name": curses.A_BOLD,
890
- "detail_meta": curses.A_DIM, "detail_tag": curses.A_NORMAL,
891
- "dot_r": curses.A_NORMAL, "dot_y": curses.A_NORMAL,
892
- "dot_g": curses.A_NORMAL, "check": curses.A_BOLD,
893
- "badge_skill": curses.A_NORMAL, "badge_rule": curses.A_NORMAL,
894
- "badge_workflow": curses.A_NORMAL, "badge_category": curses.A_NORMAL,
895
- "desc": curses.A_DIM}
896
- if not hasattr(curses, "start_color"):
897
- return t
898
- try:
899
- curses.start_color()
900
- curses.use_default_colors()
901
- except curses.error:
902
- return t
903
- p = _aurora_pairs(curses)
904
-
905
- def P(nm, bold=False):
906
- a = p.get(nm, 0)
907
- return (a | curses.A_BOLD) if bold else a
908
-
909
- t.update({"title": P("cyan", True), "prompt": P("cyan", True),
910
- "star": P("yellow"), "sel_bar": P("cyan", True),
911
- "sel_name": P("cyan", True), "match": P("pink", True),
912
- "tap": P("violet"), "rule": [P("cyan"), P("violet"), P("pink")],
913
- "scroll": P("cyan"), "detail_name": P("cyan", True),
914
- "detail_tag": P("pink"), "dot_r": P("red"), "dot_y": P("yellow"),
915
- "dot_g": P("green"), "check": P("green", True),
916
- "badge_skill": P("cyan"), "badge_rule": P("violet"),
917
- "badge_workflow": P("pink"), "badge_category": P("yellow")})
918
- return t
852
+ return pairs, custom
919
853
 
920
854
 
921
855
  _NAME_X = 4 # column the name (and everything under it) starts at
@@ -969,7 +903,7 @@ def _browse_theme(curses):
969
903
  curses.use_default_colors()
970
904
  except curses.error:
971
905
  return t
972
- p = _aurora_pairs(curses)
906
+ p, custom = _aurora_pairs(curses)
973
907
 
974
908
  def P(nm, bold=False):
975
909
  a = p.get(nm, 0)
@@ -989,7 +923,13 @@ def _browse_theme(curses):
989
923
  "head": P("cyan", True), "busy": P("cyan", True),
990
924
  "ok_line": P("green", True), "failed": P("yellow", True),
991
925
  "dot_r": P("red"), "dot_y": P("yellow"), "dot_g": P("green"),
992
- "rule": [P("cyan"), P("cyan"), P("cyan")],
926
+ # The browser's one gradient moment: the top rule runs cyan → violet
927
+ # → pink, but only when the terminal can render the real Aurora hues.
928
+ # The 8/16-colour fallback keeps a single-hue rule (mirroring
929
+ # out.gradient's basic-level behaviour) rather than the cyan/magenta/
930
+ # magenta confetti the base palette would produce.
931
+ "rule": ([P("cyan"), P("violet"), P("pink")] if custom
932
+ else [P("cyan")] * 3),
993
933
  })
994
934
  return t
995
935
 
@@ -1026,6 +966,21 @@ def _browse_tui(curses, entries, install=None):
1026
966
  workers: list = []
1027
967
  queue: list = []
1028
968
  queue_lock = threading.Lock()
969
+ # What Enter will touch, by kind — stated in the detail pane before it is
970
+ # pressed (a rule edits a file the user reads every session, which is the
971
+ # highest-stakes of the three). Built once: the paths cannot change
972
+ # mid-session, and browse.install_target stays pure by receiving them.
973
+ link_names = ", ".join(agents.display_name(a)
974
+ for a in agents.linking_agents()) or "no agents"
975
+ context_files = " · ".join(sorted(
976
+ _tilde(d / rules.CONTEXT_FILES[a][0])
977
+ for a, d in agents.enabled_agents().items()
978
+ if a in rules.CONTEXT_FILES))
979
+ targets = {
980
+ "skill": "%s · linked to %s" % (_tilde(paths.store_dir()), link_names),
981
+ "rule": context_files or "each agent's rules directory",
982
+ "workflow": "each agent's commands dir (TOML for gemini)",
983
+ }
1029
984
 
1030
985
  def start_install(entry):
1031
986
  """Queue an install. Installs run one at a time, in a single worker.
@@ -1123,16 +1078,22 @@ def _browse_tui(curses, entries, install=None):
1123
1078
  lay = browse.layout(_w, _h, detail=detail)
1124
1079
  try:
1125
1080
  scr.erase()
1126
- _draw_frame(put, th, lay, focus)
1081
+ # status.copy(): the worker thread owns the mapping; a shallow
1082
+ # copy keeps the fold safe from a mid-iteration mutation.
1083
+ _draw_frame(put, th, lay, focus,
1084
+ browse.session_summary(status.copy()))
1127
1085
  _draw_query(put, th, lay, filt, focus, len(found), len(pool),
1128
1086
  len(selected), hidden if collapse else 0)
1129
1087
  _draw_scopes(put, th, lay, scope, focus)
1130
1088
  rows = _draw_rows(put, th, lay, found, sel, selected, filt,
1131
1089
  focus, describe, categories, installed_names,
1132
- copies if collapse else None)
1090
+ copies if collapse else None, status,
1091
+ scope, hidden if collapse else 0)
1133
1092
  if lay.has_detail and found:
1134
- dscroll = _draw_detail(put, th, lay, found[sel], dscroll,
1135
- focus, installed_names, status)
1093
+ dscroll = _draw_detail(
1094
+ put, th, lay, found[sel], dscroll, focus,
1095
+ installed_names, status,
1096
+ browse.install_target(found[sel], targets))
1136
1097
  scr.refresh()
1137
1098
  except curses.error:
1138
1099
  pass # terminal too small mid-draw; retry on next key
@@ -1213,8 +1174,14 @@ def _browse_tui(curses, entries, install=None):
1213
1174
  return done or state["picks"]
1214
1175
 
1215
1176
 
1216
- def _draw_frame(put, th, lay, focus):
1217
- """Outer box, column divider, and the title sitting in the top rule."""
1177
+ def _draw_frame(put, th, lay, focus, summary=None):
1178
+ """Outer box, column divider, and the title sitting in the top rule.
1179
+
1180
+ ``summary`` is the session's install chip from
1181
+ :func:`browse.session_summary` — set into the bottom rule when present,
1182
+ so what happened this session is visible even with the detail pane
1183
+ closed or parked elsewhere.
1184
+ """
1218
1185
  w, h = lay.w, lay.h
1219
1186
  if w < 4 or h < 6:
1220
1187
  return
@@ -1226,7 +1193,20 @@ def _draw_frame(put, th, lay, focus):
1226
1193
  put(0, 3, "●", th["dot_r"])
1227
1194
  put(0, 4, "●", th["dot_y"])
1228
1195
  put(0, 5, "●", th["dot_g"])
1229
- put(0, 6, " boost browse ", th["title"])
1196
+ title = " boost browse "
1197
+ put(0, 6, title, th["title"])
1198
+ # The one gradient moment: the rest of the top rule runs cyan → violet →
1199
+ # pink (glyphs unchanged — repainted in place, so monochrome loses
1200
+ # nothing). The theme decides whether the stops are real Aurora hues or
1201
+ # collapse to a single accent; see _browse_theme.
1202
+ grad_x = 6 + len(title)
1203
+ # Tolerate a theme without the stop list (the draw loop never raises on a
1204
+ # frame): anything short falls back to the plain border attr.
1205
+ stops = th["rule"] if isinstance(th["rule"], (list, tuple)) else ()
1206
+ for i, (start, length) in enumerate(browse.rule_segments(
1207
+ max(0, w - 1 - grad_x))):
1208
+ put(0, grad_x + start, "─" * length,
1209
+ stops[i] if i < len(stops) else th["border"])
1230
1210
  # Item 1: the focused pane is obvious. Its border brightens and it gets a
1231
1211
  # caption in the divider — a scrollable pane with no focus affordance is a
1232
1212
  # pane the user cannot tell they are driving.
@@ -1251,6 +1231,16 @@ def _draw_frame(put, th, lay, focus):
1251
1231
  put(h - 1, 0, "╰" + "─" * inner + "╯", th["border"])
1252
1232
  if lay.has_detail:
1253
1233
  put(h - 1, lay.detail_x - 1, "┴", th["border"])
1234
+ if summary:
1235
+ # Clipped to end before the divider tee (or the corner), so the frame
1236
+ # glyphs survive any message length. Absent, the idle rule is
1237
+ # byte-identical to a summary-less frame.
1238
+ role, text = summary
1239
+ boundary = lay.detail_x - 1 if lay.has_detail else w - 1
1240
+ room = boundary - 3
1241
+ if room > 4:
1242
+ put(h - 1, 2, (" " + text + " ")[:room],
1243
+ th.get(role) or th.get("ok") or 0)
1254
1244
  # The hint used to live in the bottom rule, where the column divider's
1255
1245
  # tee landed on top of it and turned "esc quit" into "┴sc quit". It has
1256
1246
  # its own row now, above the rule that separates chrome from body.
@@ -1278,9 +1268,7 @@ def _draw_query(put, th, lay, filt, focus, n_found, n_all, n_sel, hidden=0):
1278
1268
  th["query"] if filt else th["help"])
1279
1269
  if active:
1280
1270
  put(1, 4 + len(filt), "▏", th["prompt"])
1281
- tail = "%s%d/%d%s" % ("%d selected · " % n_sel if n_sel else "",
1282
- n_found, n_all,
1283
- " (%d dupes hidden)" % hidden if hidden else "")
1271
+ tail = browse.count_tail(n_found, n_all, n_sel, hidden)
1284
1272
  put(1, max(4 + len(filt) + 2, lay.w - 2 - len(tail)), tail, th["count"])
1285
1273
 
1286
1274
 
@@ -1313,14 +1301,29 @@ def _draw_scopes(put, th, lay, scope, focus):
1313
1301
 
1314
1302
 
1315
1303
  def _draw_rows(put, th, lay, found, sel, selected, filt, focus,
1316
- describe, categories, installed_names, copies=None):
1304
+ describe, categories, installed_names, copies=None,
1305
+ status=None, scope="all", hidden=0):
1317
1306
  """The result list. Returns how many rows fit, for page-up/down."""
1318
1307
  rows = max(1, lay.body_h // 2)
1308
+ lw = lay.list_w
1309
+ if not found:
1310
+ # A silent void is indistinguishable from a hung draw; the pane says
1311
+ # what happened and which keys widen the net (see browse.empty_lines).
1312
+ for i, (role, text) in enumerate(browse.empty_lines(filt, scope,
1313
+ hidden)):
1314
+ y = lay.body_y + 1 + i
1315
+ if y >= lay.h - 1:
1316
+ break
1317
+ put(y, lay.list_x + 2, text[:max(0, lw - 4)], th[role])
1318
+ return rows
1319
1319
  top = max(0, min(sel - rows + 1, max(0, len(found) - rows)))
1320
1320
  if sel < top:
1321
1321
  top = sel
1322
1322
  view = found[top:top + rows]
1323
- lw = lay.list_w
1323
+ has_bar = len(found) > rows
1324
+ # The rail keeps a one-column gutter to the pane edge, plus the scrollbar
1325
+ # column when the list overflows.
1326
+ railw = lw - (2 if has_bar else 1)
1324
1327
  for i, e in enumerate(view):
1325
1328
  y = lay.body_y + i * 2
1326
1329
  if y + 1 >= lay.h - 1:
@@ -1336,8 +1339,11 @@ def _draw_rows(put, th, lay, found, sel, selected, filt, focus,
1336
1339
  put(y, x, "✓" if _desc_key(e) in selected else " ",
1337
1340
  row_attr or th["check"])
1338
1341
  put(y, x + 1, "★" if e.get("curated") else " ", row_attr or th["star"])
1339
- put(y, x + 2, "●" if e["name"] in installed_names else " ",
1340
- row_attr or th["state"])
1342
+ # The third mark carries the whole install lifecycle (◐ / ✗ / ●),
1343
+ # from the same glyph table the detail pane reports with.
1344
+ st = (status or {}).get(e["name"], (None, ""))[0]
1345
+ glyph, role = browse.state_glyph(st, e["name"] in installed_names)
1346
+ put(y, x + 2, glyph, row_attr or th[role])
1341
1347
  nx = x + 4
1342
1348
  namew = max(4, min(len(e["name"]), lw - 6))
1343
1349
  nm = out.truncate(e["name"], namew)
@@ -1346,33 +1352,48 @@ def _draw_rows(put, th, lay, found, sel, selected, filt, focus,
1346
1352
  for pos in browse.highlight_positions(filt, nm):
1347
1353
  if pos < len(nm):
1348
1354
  put(y, nx + pos, nm[pos], th["match"])
1349
- bx = nx + len(nm) + 2
1350
- # A collapsed row says how many it stands for, so the copies are
1351
- # accounted for rather than disappeared.
1355
+ # The badge rail right-aligns to the pane edge so kind/version/tap
1356
+ # stop wandering with every name length. A collapsed row's ×N count
1357
+ # leads the rail and is the last badge to drop — copies are accounted
1358
+ # for, never disappeared.
1359
+ rail = []
1352
1360
  n_copies = (copies or {}).get(id(e), 1)
1353
1361
  if n_copies > 1:
1354
- tag = "×%d" % n_copies
1355
- put(y, bx, tag, row_attr or th["accent_dim"])
1356
- bx += len(tag) + 1
1357
- for text, tkey in _row_badges(e, categories):
1358
- if bx + len(text) > lay.list_x + lw - 1:
1359
- break
1360
- put(y, bx, text, row_attr or th[tkey])
1361
- bx += len(text) + 1
1362
- put(y + 1, nx, out.truncate(describe(e), max(4, lw - 6)),
1362
+ rail.append(("×%d" % n_copies, "accent_dim"))
1363
+ rail += _row_badges(e, categories)
1364
+ name_end = (nx - lay.list_x) + len(nm) + 2
1365
+ for bx, text, tkey in browse.badge_positions(name_end, rail, railw):
1366
+ put(y, lay.list_x + bx, text, row_attr or th[tkey])
1367
+ put(y + 1, nx, out.truncate(describe(e),
1368
+ max(4, lw - (7 if has_bar else 6))),
1363
1369
  row_attr or th["desc"])
1370
+ if has_bar:
1371
+ # The detail pane always had one; a 70,000-row list deserves to know
1372
+ # where it is too. Same track/thumb vocabulary as the detail edge.
1373
+ bar = browse.scrollbar(len(found), rows, top)
1374
+ if bar:
1375
+ bstart, blen = bar
1376
+ attr = th["border_focus"] if focus == "list" else th["border"]
1377
+ bx = lay.list_x + lw - 1
1378
+ for j in range(rows):
1379
+ thumb = bstart <= j < bstart + blen
1380
+ for dy in (0, 1):
1381
+ y = lay.body_y + j * 2 + dy
1382
+ if y >= lay.h - 1:
1383
+ break
1384
+ put(y, bx, "█" if thumb else "│", attr)
1364
1385
  return rows
1365
1386
 
1366
1387
 
1367
1388
  def _draw_detail(put, th, lay, entry, dscroll, focus, installed_names,
1368
- status=None):
1389
+ status=None, install_to=None):
1369
1390
  """The right-hand panel. Returns the clamped scroll offset."""
1370
1391
  st, msg = (status or {}).get(entry["name"], (None, ""))
1371
1392
  # -3, not -2: one column of left padding, and one on the right reserved for
1372
1393
  # the scrollbar. At -2 a wrapped sentence ran into the thumb.
1373
1394
  lines = browse.detail_lines(entry, width=max(8, lay.detail_w - 3),
1374
1395
  installed=entry["name"] in installed_names,
1375
- state=st, message=msg)
1396
+ state=st, message=msg, install_to=install_to)
1376
1397
  visible = max(0, lay.body_h)
1377
1398
  dscroll = browse.clamp_scroll(dscroll, len(lines), visible)
1378
1399
  active = focus == "detail"