boost-skill-cli 1.0.370__tar.gz → 1.0.372__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 (609) hide show
  1. {boost_skill_cli-1.0.370/boost_skill_cli.egg-info → boost_skill_cli-1.0.372}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/configuration.py +26 -4
  4. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/pkg.py +6 -0
  5. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/quality.py +4 -0
  6. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/taps.py +5 -0
  7. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/team.py +11 -1
  8. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/complete.py +123 -10
  9. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  10. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/commands.html +9 -3
  11. boost_skill_cli-1.0.372/docs/demo.gif +0 -0
  12. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_configuration.py +54 -0
  13. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_pkg.py +25 -0
  14. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_quality.py +15 -0
  15. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_taps.py +25 -0
  16. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_team.py +14 -0
  17. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_complete.py +111 -0
  18. boost_skill_cli-1.0.370/docs/demo.gif +0 -0
  19. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.gitattributes +0 -0
  20. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.gitignore +0 -0
  21. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.gitleaks.toml +0 -0
  22. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.htmlvalidate.json +0 -0
  23. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.lighthouserc.json +0 -0
  24. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.lycheeignore +0 -0
  25. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.markdownlint-cli2.jsonc +0 -0
  26. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.pre-commit-config.yaml +0 -0
  27. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.stylelintrc.json +0 -0
  28. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.vale/styles/boost/Terminology.yml +0 -0
  29. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  30. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/.vale.ini +0 -0
  31. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/CLAUDE.md +0 -0
  32. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/CODE_OF_CONDUCT.md +0 -0
  33. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/CONTRIBUTING.md +0 -0
  34. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/LICENSE +0 -0
  35. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/MANIFEST.in +0 -0
  36. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/Makefile +0 -0
  37. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/README.md +0 -0
  38. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/SECURITY.md +0 -0
  39. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost +0 -0
  40. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/__init__.py +0 -0
  41. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/__main__.py +0 -0
  42. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/cli.py +0 -0
  43. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/cliparse.py +0 -0
  44. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/__init__.py +0 -0
  45. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/_common.py +0 -0
  46. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/bmad.py +0 -0
  47. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/discovery.py +0 -0
  48. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/hooks.py +0 -0
  49. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/info.py +0 -0
  50. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/intelligence.py +0 -0
  51. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/run.py +0 -0
  52. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/commands/safety.py +0 -0
  53. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/__init__.py +0 -0
  54. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/adapters.py +0 -0
  55. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/agents.py +0 -0
  56. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/ai.py +0 -0
  57. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/capabilities.py +0 -0
  58. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/catalog.py +0 -0
  59. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/chat.py +0 -0
  60. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/claude_settings.py +0 -0
  61. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/config.py +0 -0
  62. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/dense.py +0 -0
  63. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/ed25519.py +0 -0
  64. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/embed.py +0 -0
  65. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/faithfulness.py +0 -0
  66. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/frontmatter.py +0 -0
  67. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/gitutil.py +0 -0
  68. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/imperative.py +0 -0
  69. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/injectscan.py +0 -0
  70. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/installscan.py +0 -0
  71. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/integrity.py +0 -0
  72. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/journal.py +0 -0
  73. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/localembed.py +0 -0
  74. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/lockfile.py +0 -0
  75. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/logs.py +0 -0
  76. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/mcp.py +0 -0
  77. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/mcpdecl.py +0 -0
  78. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/mcphost.py +0 -0
  79. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/minisign.py +0 -0
  80. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/nethttp.py +0 -0
  81. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/output.py +0 -0
  82. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/paths.py +0 -0
  83. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/policy.py +0 -0
  84. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/projectlock.py +0 -0
  85. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/provenance.py +0 -0
  86. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/rag.py +0 -0
  87. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/registry.py +0 -0
  88. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/resolve.py +0 -0
  89. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/rules.py +0 -0
  90. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/scopes.py +0 -0
  91. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/secretscan.py +0 -0
  92. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/selfupdate.py +0 -0
  93. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/serve.py +0 -0
  94. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/stackprobe.py +0 -0
  95. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/staleness.py +0 -0
  96. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/store.py +0 -0
  97. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/trustaudit.py +0 -0
  98. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/typosquat.py +0 -0
  99. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/updatediff.py +0 -0
  100. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/util.py +0 -0
  101. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/core/workflows.py +0 -0
  102. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/data/registries.json +0 -0
  103. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/errors.py +0 -0
  104. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_cli/spin.py +0 -0
  105. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  106. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  107. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  108. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/requires.txt +0 -0
  109. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/boost_skill_cli.egg-info/top_level.txt +0 -0
  110. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/codecov.yml +0 -0
  111. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/.claude/settings.local.json +0 -0
  112. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/DEBUGGING.md +0 -0
  113. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/adapters.html +0 -0
  114. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/README.md +0 -0
  115. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/c4-components-core.md +0 -0
  116. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/c4-containers.md +0 -0
  117. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/c4-context.md +0 -0
  118. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/architecture/c4-dynamic-install.md +0 -0
  119. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/distill.gif +0 -0
  120. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/doctor.gif +0 -0
  121. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/explain.gif +0 -0
  122. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/hooks.gif +0 -0
  123. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/install.gif +0 -0
  124. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/pulse.gif +0 -0
  125. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/search.gif +0 -0
  126. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/gifs/tap.gif +0 -0
  127. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/distill.tape +0 -0
  128. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/doctor.tape +0 -0
  129. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/explain.tape +0 -0
  130. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/hooks.tape +0 -0
  131. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/install.tape +0 -0
  132. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/pulse.tape +0 -0
  133. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/search.tape +0 -0
  134. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel/tapes/tap.tape +0 -0
  135. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/carousel.html +0 -0
  136. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/chat.html +0 -0
  137. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/demo-index.json +0 -0
  138. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/demo.html +0 -0
  139. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/demo.tape +0 -0
  140. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/design-roadmap.html +0 -0
  141. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/eval-latest.json +0 -0
  142. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/eval.html +0 -0
  143. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/index.html +0 -0
  144. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/mcp-hub.html +0 -0
  145. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/rag-architecture.md +0 -0
  146. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D01.md +0 -0
  147. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D02.md +0 -0
  148. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D03.md +0 -0
  149. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D04.md +0 -0
  150. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D05.md +0 -0
  151. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D06.md +0 -0
  152. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D07.md +0 -0
  153. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D08.md +0 -0
  154. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D09.md +0 -0
  155. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D10.md +0 -0
  156. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D11.md +0 -0
  157. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D12.md +0 -0
  158. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D13.md +0 -0
  159. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D14.md +0 -0
  160. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D15.md +0 -0
  161. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D16.md +0 -0
  162. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D17.md +0 -0
  163. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D18.md +0 -0
  164. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D19.md +0 -0
  165. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D20.md +0 -0
  166. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D21.md +0 -0
  167. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D22.md +0 -0
  168. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D23.md +0 -0
  169. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D24.md +0 -0
  170. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D25.md +0 -0
  171. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/BOOST-D26.md +0 -0
  172. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  173. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  174. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  175. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  176. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  177. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  178. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  179. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  180. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  181. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  182. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  183. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  184. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  185. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  186. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  187. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  188. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  189. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  190. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  191. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  192. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  193. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  194. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  195. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  196. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  197. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/command-carousel-page.md +0 -0
  198. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  199. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  200. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  201. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  202. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  203. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  204. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  205. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  206. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  207. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  208. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  209. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  210. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  211. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  212. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  213. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  214. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  215. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  216. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  217. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  218. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  219. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  220. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  221. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  222. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  223. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  224. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  225. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  226. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  227. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  228. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  229. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  230. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  231. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  232. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  233. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/github-community-health-files.md +0 -0
  234. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  235. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  236. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  237. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  238. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  239. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  240. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  241. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  242. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  243. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  244. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  245. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  246. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  247. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  248. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  249. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  250. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  251. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  252. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  253. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  254. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  255. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  256. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  257. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  258. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  259. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  260. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  261. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  262. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  263. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  264. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  265. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  266. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  267. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  268. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  269. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  270. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  271. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  272. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  273. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  274. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  275. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  276. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  277. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  278. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  279. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  280. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  281. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  282. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  283. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  284. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  285. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  286. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  287. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  288. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  289. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  290. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  291. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  292. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  293. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  294. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  295. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  296. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  297. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  298. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  299. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  300. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  301. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  302. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  303. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  304. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  305. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  306. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  307. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  308. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  309. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  310. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  311. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  312. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  313. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  314. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  315. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  316. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  317. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  318. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  319. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  320. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  321. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  322. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  323. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  324. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  325. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  326. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  327. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  328. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  329. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  330. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  331. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  332. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  333. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  334. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  335. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  336. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  337. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  338. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  339. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  340. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  341. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  342. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  343. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  344. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  345. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  346. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  347. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  348. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  349. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  350. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  351. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  352. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  353. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  354. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  355. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  356. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  357. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  358. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  359. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  360. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  361. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  362. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  363. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  364. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  365. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  366. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  367. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  368. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  369. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  370. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  371. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  372. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  373. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/workspace-scope-install.md +0 -0
  374. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  375. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/docs/roadmap.html +0 -0
  376. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/eslint.config.mjs +0 -0
  377. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/README.md +0 -0
  378. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/__init__.py +0 -0
  379. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/baseline.json +0 -0
  380. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/faithfulness.py +0 -0
  381. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/golden_set.json +0 -0
  382. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/make_corpus.py +0 -0
  383. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/make_golden.py +0 -0
  384. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/metrics.py +0 -0
  385. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/evals/run_evals.py +0 -0
  386. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/examples/README.md +0 -0
  387. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/examples/adapt-demo.sh +0 -0
  388. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/examples/boost-run-prototype.sh +0 -0
  389. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/index.html +0 -0
  390. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/noxfile.py +0 -0
  391. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/pyproject.toml +0 -0
  392. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/coverage-tools.in +0 -0
  393. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/coverage-tools.txt +0 -0
  394. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/lint-tools.in +0 -0
  395. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/lint-tools.txt +0 -0
  396. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/mutation-tools.in +0 -0
  397. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/mutation-tools.txt +0 -0
  398. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/platform-pins.lock +0 -0
  399. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/release-tools.in +0 -0
  400. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/release-tools.txt +0 -0
  401. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/test-tools.in +0 -0
  402. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/requirements/test-tools.txt +0 -0
  403. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/a11y_check.py +0 -0
  404. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/bench_cli.sh +0 -0
  405. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/build_command_reference.py +0 -0
  406. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/build_demo_index.py +0 -0
  407. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/build_registries.py +0 -0
  408. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/build_roadmap.py +0 -0
  409. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/check_anchors.py +0 -0
  410. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/check_licenses.py +0 -0
  411. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/check_required_checks.py +0 -0
  412. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/ensure_eval_corpus.sh +0 -0
  413. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_corpus.py +0 -0
  414. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_explain.py +0 -0
  415. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_gate.py +0 -0
  416. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_recommend.py +0 -0
  417. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_retrieval.py +0 -0
  418. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/eval_stats_summary.py +0 -0
  419. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/import_budget.py +0 -0
  420. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/lock_toolchain.py +0 -0
  421. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/mutation_gate.py +0 -0
  422. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/mutation_shards.py +0 -0
  423. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/mutation_weights.json +0 -0
  424. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/perf_gate.py +0 -0
  425. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/post_deploy_smoke.py +0 -0
  426. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/publish_eval_json.py +0 -0
  427. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/release_guard.py +0 -0
  428. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/scripts/release_preflight.py +0 -0
  429. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/setup.cfg +0 -0
  430. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/sonar-project.properties +0 -0
  431. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/style/README.md +0 -0
  432. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/style/boost.css +0 -0
  433. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/style/boost.js +0 -0
  434. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/style/demo.html +0 -0
  435. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/adapt.feature +0 -0
  436. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/browse.feature +0 -0
  437. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/count.feature +0 -0
  438. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/discover.feature +0 -0
  439. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/doctor.feature +0 -0
  440. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/environment.py +0 -0
  441. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/explain.feature +0 -0
  442. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/index.feature +0 -0
  443. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/install.feature +0 -0
  444. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/list.feature +0 -0
  445. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/mcp.feature +0 -0
  446. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/search.feature +0 -0
  447. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/steps/cli_steps.py +0 -0
  448. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/steps/discovery_steps.py +0 -0
  449. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/steps/mcp_steps.py +0 -0
  450. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/bdd/features/steps/quality_steps.py +0 -0
  451. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/conftest.py +0 -0
  452. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/baseline.json +0 -0
  453. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/explain.jsonl +0 -0
  454. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/golden-natural.jsonl +0 -0
  455. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/golden.jsonl +0 -0
  456. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/recommend.jsonl +0 -0
  457. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/eval/taps.txt +0 -0
  458. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_capabilities_policy.py +0 -0
  459. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_adapt.py +0 -0
  460. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_bmad.py +0 -0
  461. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_chat.py +0 -0
  462. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_discovery.py +0 -0
  463. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_hooks.py +0 -0
  464. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_info.py +0 -0
  465. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_cli_intelligence.py +0 -0
  466. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_everyday_loop.py +0 -0
  467. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_integrity_enforce.py +0 -0
  468. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_property_parsers.py +0 -0
  469. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_run.py +0 -0
  470. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_tap_signing.py +0 -0
  471. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/functional/test_workspace_scope.py +0 -0
  472. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/README.md +0 -0
  473. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  474. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  475. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  476. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  477. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  478. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  479. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  480. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  481. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  482. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  483. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  484. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  485. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  486. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  487. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  488. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  489. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  490. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  491. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  492. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  493. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/fuzz_frontmatter.py +0 -0
  494. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/fuzz/fuzz_registry.py +0 -0
  495. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/make_fixture.py +0 -0
  496. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/perf/test_benchmarks.py +0 -0
  497. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/smoke.sh +0 -0
  498. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_a11y_check.py +0 -0
  499. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_adapters.py +0 -0
  500. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_adapters_multi.py +0 -0
  501. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_adapters_runner.py +0 -0
  502. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_agents.py +0 -0
  503. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_ai.py +0 -0
  504. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_capabilities.py +0 -0
  505. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_catalog.py +0 -0
  506. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_chat.py +0 -0
  507. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_check_anchors.py +0 -0
  508. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_check_licenses.py +0 -0
  509. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_claude_settings.py +0 -0
  510. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_cliparse.py +0 -0
  511. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_codeql_analysis_key.py +0 -0
  512. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_command_reference_fresh.py +0 -0
  513. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_community_health_files.py +0 -0
  514. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_config.py +0 -0
  515. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_content_dedupe.py +0 -0
  516. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dedup_trust.py +0 -0
  517. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_demo_index.py +0 -0
  518. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense.py +0 -0
  519. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense_fallback.py +0 -0
  520. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense_fix_hint.py +0 -0
  521. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense_shards.py +0 -0
  522. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dense_status.py +0 -0
  523. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_dependabot_config.py +0 -0
  524. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_docs_pages_linked.py +0 -0
  525. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_docsite_chrome.py +0 -0
  526. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_ed25519.py +0 -0
  527. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_embed.py +0 -0
  528. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_embed_local.py +0 -0
  529. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_entry_key.py +0 -0
  530. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_errors_and_cli_table.py +0 -0
  531. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_baseline.py +0 -0
  532. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_corpus.py +0 -0
  533. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_faithfulness.py +0 -0
  534. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_gate.py +0 -0
  535. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_grading.py +0 -0
  536. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_metrics.py +0 -0
  537. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_eval_stats_summary.py +0 -0
  538. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_faithfulness.py +0 -0
  539. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_frontmatter.py +0 -0
  540. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_fuzz_targets.py +0 -0
  541. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_gitleaks_config.py +0 -0
  542. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_gitutil.py +0 -0
  543. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_imperative.py +0 -0
  544. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_import_budget.py +0 -0
  545. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_injectscan.py +0 -0
  546. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_installscan.py +0 -0
  547. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_integrity.py +0 -0
  548. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_journal.py +0 -0
  549. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_localembed.py +0 -0
  550. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_localembed_e2e.py +0 -0
  551. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_lockfile.py +0 -0
  552. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_logs.py +0 -0
  553. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_marketing_counts.py +0 -0
  554. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mcp.py +0 -0
  555. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mcp_install_scan.py +0 -0
  556. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mcpdecl.py +0 -0
  557. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mcphost.py +0 -0
  558. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_minisign.py +0 -0
  559. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mutation_hardening.py +0 -0
  560. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mutation_shards.py +0 -0
  561. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mutation_subfile_shards.py +0 -0
  562. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_mutmut_source_paths.py +0 -0
  563. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_nethttp.py +0 -0
  564. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_output.py +0 -0
  565. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_paths.py +0 -0
  566. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_perf_gate.py +0 -0
  567. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_pkg_confusions.py +0 -0
  568. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_pkg_injection.py +0 -0
  569. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_pkg_secrets.py +0 -0
  570. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_platform_pins.py +0 -0
  571. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_policy.py +0 -0
  572. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_post_deploy_smoke.py +0 -0
  573. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_project_mcp_sidecar.py +0 -0
  574. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_projectlock.py +0 -0
  575. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_provenance.py +0 -0
  576. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_rag.py +0 -0
  577. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_rag_fusion.py +0 -0
  578. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_registries_fresh.py +0 -0
  579. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_registry.py +0 -0
  580. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_registry_categories.py +0 -0
  581. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_release_guard.py +0 -0
  582. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_release_preflight.py +0 -0
  583. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_required_checks.py +0 -0
  584. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_resolve.py +0 -0
  585. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_roadmap_fresh.py +0 -0
  586. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_rules.py +0 -0
  587. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_scopes.py +0 -0
  588. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_secretscan.py +0 -0
  589. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_selfupdate.py +0 -0
  590. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_serve.py +0 -0
  591. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_spin.py +0 -0
  592. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_stackprobe.py +0 -0
  593. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_staleness.py +0 -0
  594. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_store.py +0 -0
  595. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_token_parity.py +0 -0
  596. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_toolchain_lock.py +0 -0
  597. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_trustaudit.py +0 -0
  598. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_typosquat.py +0 -0
  599. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_updatediff.py +0 -0
  600. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_util.py +0 -0
  601. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_version.py +0 -0
  602. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_workflow_concurrency.py +0 -0
  603. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_workflow_timeouts.py +0 -0
  604. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/unit/test_workflows.py +0 -0
  605. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/a11y_check.mjs +0 -0
  606. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/console_check.mjs +0 -0
  607. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/package-lock.json +0 -0
  608. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/package.json +0 -0
  609. {boost_skill_cli-1.0.370 → boost_skill_cli-1.0.372}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.370
3
+ Version: 1.0.372
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.0.370'
22
- __version_tuple__ = version_tuple = (1, 0, 370)
21
+ __version__ = version = '1.0.372'
22
+ __version_tuple__ = version_tuple = (1, 0, 372)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -531,20 +531,42 @@ def _sq(s: str) -> str:
531
531
 
532
532
 
533
533
  def cmd_completions(argv) -> int:
534
- """boost completions [bash|zsh|fish]"""
534
+ """boost completions [bash|zsh|fish] [--install|--uninstall] [--eval]"""
535
535
  p = cliparse.parser(
536
536
  prog="boost completions",
537
537
  description="Generate shell tab-completion scripts")
538
538
  p.add_argument("shell", nargs="?", choices=("bash", "zsh", "fish"),
539
539
  default=None, help="target shell (default: from $SHELL)")
540
+ p.add_argument("--eval", action="store_true",
541
+ help="print the variant safe to `eval` directly "
542
+ "(what --install wires up)")
543
+ group = p.add_mutually_exclusive_group()
544
+ group.add_argument("--install", action="store_true",
545
+ help="wire completions into the shell's rc file "
546
+ "(bash/zsh — one-shot, no manual editing)")
547
+ group.add_argument("--uninstall", action="store_true",
548
+ help="remove what --install wired up")
540
549
  args = p.parse_args(argv)
541
550
 
542
- shell = args.shell or Path(os.environ.get("SHELL", "")).name
543
- if shell not in ("bash", "zsh", "fish"):
544
- shell = "bash"
551
+ detected = args.shell or Path(os.environ.get("SHELL", "")).name
552
+
553
+ if args.install or args.uninstall:
554
+ rc = (complete.install if args.install else complete.uninstall)(detected)
555
+ out.ok("%s boost completions %s %s"
556
+ % ("wired" if args.install else "removed",
557
+ "into" if args.install else "from", _tilde(rc)))
558
+ if args.install:
559
+ out.dim(" restart your shell (or run `exec %s`) to pick it up"
560
+ % detected)
561
+ return 0
562
+
563
+ shell = detected if detected in ("bash", "zsh", "fish") else "bash"
545
564
  # The script is a thin shim that calls `boost __complete`; the candidate
546
565
  # rules live in core/complete.py so all three shells share one tested
547
566
  # implementation instead of three hand-maintained static lists.
567
+ if args.eval:
568
+ print(complete.eval_script(shell).rstrip())
569
+ return 0
548
570
  print(complete.script(shell).rstrip())
549
571
  out.dim("# install: " + complete.INSTALL_HINT[shell])
550
572
  return 0
@@ -19,6 +19,7 @@ from ..core import (
19
19
  adapters,
20
20
  agents,
21
21
  catalog,
22
+ complete,
22
23
  config,
23
24
  frontmatter,
24
25
  gitutil,
@@ -698,6 +699,9 @@ def cmd_update(argv: List[str]) -> int:
698
699
  for tname, summary in results.items():
699
700
  catalog.rebuild_tap(registry.get(tname))
700
701
  out.ok("%s: %s" % (tname, summary))
702
+ # A pulled tap can add, drop, or rename catalogue entries, so the
703
+ # completion name cache must not survive an update unrefreshed.
704
+ complete.refresh_names()
701
705
  journal.log("update", args.tap or "all")
702
706
  if args.taps_only:
703
707
  return 0
@@ -919,6 +923,8 @@ def _bundle_install(file: Optional[str]) -> int:
919
923
  else:
920
924
  out.warn("line %d: unrecognised: %s" % (lineno, line))
921
925
  failed += 1
926
+ if taps_added:
927
+ complete.refresh_names()
922
928
  journal.log("bundle-install", label, taps=taps_added, skills=installed_n)
923
929
  summary = "Installed %s" % _plural(installed_n, "skill")
924
930
  if taps_added:
@@ -22,6 +22,7 @@ from ..core import (
22
22
  agents,
23
23
  ai,
24
24
  catalog,
25
+ complete,
25
26
  frontmatter,
26
27
  gitutil,
27
28
  imperative,
@@ -717,6 +718,9 @@ def cmd_heal(argv):
717
718
  out.ok("rebuilt catalog cache for %s" % tap.name)
718
719
  actions.append("cache %s" % tap.name)
719
720
 
721
+ if not dry:
722
+ complete.refresh_names()
723
+
720
724
  if not journal.rotation_healthy():
721
725
  if dry:
722
726
  out.info("would rotate the journal")
@@ -8,6 +8,7 @@ from contextlib import suppress
8
8
  from .. import cliparse, spin
9
9
  from ..core import (
10
10
  catalog,
11
+ complete,
11
12
  config,
12
13
  gitutil,
13
14
  journal,
@@ -125,6 +126,9 @@ def cmd_tap(argv) -> int:
125
126
  entries = catalog.rebuild_tap(tap)
126
127
  journal.log("tap", tap.name)
127
128
  out.ok("Tapped %s (%d skills)" % (tap.name, len(entries)))
129
+ # Refresh the TAB-completion name cache so `boost install <TAB>` sees
130
+ # whatever this call just tapped instead of the pre-tap snapshot.
131
+ complete.refresh_names()
128
132
  return rc
129
133
 
130
134
 
@@ -151,6 +155,7 @@ def cmd_untap(argv) -> int:
151
155
  out.info("cancelled")
152
156
  return 1
153
157
  registry.remove(tap.name)
158
+ complete.refresh_names()
154
159
  journal.log("untap", tap.name)
155
160
  out.ok("untapped %s" % tap.name)
156
161
  return 0
@@ -9,7 +9,16 @@ import stat
9
9
  import urllib.parse
10
10
 
11
11
  from .. import cliparse
12
- from ..core import catalog, journal, lockfile, paths, registry, store, util
12
+ from ..core import (
13
+ catalog,
14
+ complete,
15
+ journal,
16
+ lockfile,
17
+ paths,
18
+ registry,
19
+ store,
20
+ util,
21
+ )
13
22
  from ..core import output as out
14
23
  from ..errors import BoostError
15
24
 
@@ -379,6 +388,7 @@ def cmd_protocol(argv) -> int:
379
388
  return 1
380
389
  tap = registry.add(arg)
381
390
  entries = catalog.rebuild_tap(tap)
391
+ complete.refresh_names()
382
392
  journal.log("tap", tap.name, via="protocol")
383
393
  out.ok("tapped %s (%d skills)" % (tap.name, len(entries)))
384
394
  return 0
@@ -26,10 +26,12 @@ nothing. Silence degrades; a stack trace corrupts the line the user is typing.
26
26
  """
27
27
  from __future__ import annotations
28
28
 
29
+ import os
29
30
  import re
30
31
  from pathlib import Path
31
32
  from typing import Callable, Dict, List, Optional, Sequence, Tuple
32
33
 
34
+ from ..errors import BoostError
33
35
  from . import catalog, paths, registry, store
34
36
 
35
37
  # cli.COMMANDS rows: (name, group, module, summary). Typed here rather than
@@ -159,20 +161,29 @@ _boost_complete() {
159
161
  complete -F _boost_complete boost
160
162
  """
161
163
 
162
- _ZSH = """#compdef boost
163
- # Delegates to `boost __complete` rather than embedding a static list, so
164
- # arguments complete too — the previous version fell through to _files, which
165
- # offered local filenames where a skill name belongs.
166
- _boost() {
164
+ # The function body is shared between two different trailers (see
165
+ # `eval_script` for why): one that self-invokes for zsh's fpath/autoload
166
+ # machinery, one that self-registers for a direct `eval` into a running shell.
167
+ _ZSH_FUNC = """_boost() {
167
168
  local -a reply
168
169
  # "${(@)...}" preserves the EMPTY current word. Unquoted, zsh drops it,
169
170
  # so `boost install <TAB>` arrives as two words and completes command
170
171
  # names instead of skills — the exact bug this rewrite is fixing.
171
172
  reply=( ${(f)"$(boost __complete "${(@)words[1,$CURRENT]}" 2>/dev/null)"} )
172
173
  compadd -- $reply
173
- }
174
+ }"""
175
+
176
+ _ZSH = """#compdef boost
177
+ # Delegates to `boost __complete` rather than embedding a static list, so
178
+ # arguments complete too — the previous version fell through to _files, which
179
+ # offered local filenames where a skill name belongs.
180
+ %s
174
181
  _boost "$@"
175
- """
182
+ """ % _ZSH_FUNC
183
+
184
+ _ZSH_EVAL = """%s
185
+ compdef _boost boost
186
+ """ % _ZSH_FUNC
176
187
 
177
188
  _FISH = """# boost fish completion — delegates to `boost __complete`.
178
189
  # `-f` disables fish's filename fallback, which is what it offered previously
@@ -191,9 +202,111 @@ def script(shell: str) -> str:
191
202
  return _SCRIPTS.get(shell, _BASH)
192
203
 
193
204
 
205
+ def eval_script(shell: str) -> str:
206
+ """The variant safe to ``eval`` directly into a *running* shell, e.g. from
207
+ an rc file — what ``boost completions --install`` wires up.
208
+
209
+ Bash's script is unconditional registration (``complete -F ... boost``),
210
+ so it behaves identically whether sourced from a file or eval'd inline —
211
+ the same script serves both, so this just returns :func:`script`.
212
+
213
+ zsh's shipped script instead *self-invokes* (``_boost "$@"``), which is
214
+ correct only when zsh's own fpath/autoload machinery is what calls it:
215
+ the first real TAB press is what swaps the autoload stub for this body,
216
+ so that trailing call answers *that* press. Eval'd inline at shell
217
+ startup there is no press to answer yet — it would fire once, uselessly,
218
+ against the shell's own startup arguments, and register nothing for
219
+ later. ``compdef _boost boost`` instead registers the function for zsh's
220
+ completion system to call on every subsequent TAB press.
221
+ """
222
+ return _ZSH_EVAL if shell == "zsh" else script(shell)
223
+
224
+
194
225
  INSTALL_HINT = {
195
- "bash": "boost completions bash >> ~/.bashrc",
196
- "zsh": "boost completions zsh > ~/.zfunc/_boost "
197
- "(with fpath+=~/.zfunc before compinit)",
226
+ "bash": "boost completions --install (or by hand: boost completions bash >> ~/.bashrc)",
227
+ "zsh": "boost completions --install (or by hand: boost completions zsh > ~/.zfunc/_boost, "
228
+ "with fpath+=~/.zfunc before compinit)",
198
229
  "fish": "boost completions fish > ~/.config/fish/completions/boost.fish",
199
230
  }
231
+
232
+ # Shells `--install`/`--uninstall` know how to wire up, and the rc file each
233
+ # writes to. Fish needs neither: `~/.config/fish/completions/*.fish` is
234
+ # auto-discovered, so `boost completions fish > that path` is already one
235
+ # shell command with nothing left to automate.
236
+ RC_FILE = {"bash": ".bashrc", "zsh": ".zshrc"}
237
+
238
+ # Shell-comment markers, not core.rules's HTML-comment ones: an rc file
239
+ # executes as shell code, so `<!-- ... -->` there is a syntax error, not a
240
+ # comment.
241
+ _RC_START = "# >>> boost completions >>>"
242
+ _RC_END = "# <<< boost completions <<<"
243
+
244
+
245
+ def _rc_block(shell: str) -> str:
246
+ # Calls back into `boost completions <shell> --eval` at every shell
247
+ # startup, rather than embedding a frozen copy of the script, so an
248
+ # installed hook never drifts from whatever boost version is on PATH.
249
+ return ("%s\ncommand -v boost >/dev/null 2>&1 && "
250
+ "eval \"$(boost completions %s --eval)\"\n%s"
251
+ % (_RC_START, shell, _RC_END))
252
+
253
+
254
+ def _merge_rc(text: str, block: str) -> str:
255
+ """Idempotently set ``block`` in ``text``: replace a prior boost block in
256
+ place, or append one after a single blank line. Mirrors
257
+ :func:`core.rules.merge_block`'s shape with rc-file-safe markers."""
258
+ i = text.find(_RC_START)
259
+ if i != -1:
260
+ j = text.find(_RC_END, i)
261
+ if j != -1:
262
+ j += len(_RC_END)
263
+ return (text[:i] + block + text[j:]).rstrip("\n") + "\n"
264
+ base = text.rstrip("\n")
265
+ return (base + "\n\n" + block + "\n") if base else block + "\n"
266
+
267
+
268
+ def _strip_rc(text: str) -> str:
269
+ """Inverse of :func:`_merge_rc`: remove the managed block, if present."""
270
+ i = text.find(_RC_START)
271
+ if i == -1:
272
+ return text
273
+ j = text.find(_RC_END, i)
274
+ if j == -1:
275
+ return text # no end marker: malformed, leave the file untouched
276
+ j += len(_RC_END)
277
+ before, after = text[:i].rstrip("\n"), text[j:].strip("\n")
278
+ parts = [p for p in (before, after) if p]
279
+ return "\n\n".join(parts) + "\n" if parts else ""
280
+
281
+
282
+ def _rc_path(shell: str) -> Path:
283
+ if shell not in RC_FILE:
284
+ raise BoostError(
285
+ "no one-shot install for %s yet" % shell,
286
+ hint="fish needs none: boost completions fish > "
287
+ "~/.config/fish/completions/boost.fish"
288
+ if shell == "fish" else "supported: %s" % ", ".join(RC_FILE))
289
+ return paths.expand("~/" + RC_FILE[shell])
290
+
291
+
292
+ def install(shell: str) -> Path:
293
+ """Idempotently wire ``shell``'s rc file to eval boost's completions on
294
+ every startup. Returns the rc file path. Raises :class:`BoostError` for
295
+ a shell with no rc-file install path (currently anything but bash/zsh)."""
296
+ rc = _rc_path(shell)
297
+ text = rc.read_text(encoding="utf-8") if rc.exists() else ""
298
+ rc.write_text(_merge_rc(text, _rc_block(shell)), encoding="utf-8")
299
+ return rc
300
+
301
+
302
+ def uninstall(shell: str) -> Path:
303
+ """Remove what :func:`install` wired up. A no-op if never installed."""
304
+ rc = _rc_path(shell)
305
+ if rc.exists():
306
+ rc.write_text(_strip_rc(rc.read_text(encoding="utf-8")), encoding="utf-8")
307
+ return rc
308
+
309
+
310
+ def detect_shell() -> str:
311
+ """The caller's shell from ``$SHELL``, basename only (e.g. "zsh")."""
312
+ return Path(os.environ.get("SHELL", "")).name
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.370
3
+ Version: 1.0.372
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -174,7 +174,7 @@
174
174
  <a class="cmd-link" href="#cmd-create" data-search="create scaffold a new skill from a template --description description --dir dir --install name">create</a>
175
175
  <a class="cmd-link" href="#cmd-policy" data-search="policy manage &amp; enforce skill governance policies --json {list,set,unset,check} key value">policy</a>
176
176
  <a class="cmd-link" href="#cmd-onboard" data-search="onboard add skill-tracker telemetry to a repo &amp; open a pr --repo repo --pr --dry-run -f, --force">onboard</a>
177
- <a class="cmd-link" href="#cmd-completions" data-search="completions generate shell tab-completion scripts {bash,zsh,fish}">completions</a>
177
+ <a class="cmd-link" href="#cmd-completions" data-search="completions generate shell tab-completion scripts --eval --install --uninstall {bash,zsh,fish}">completions</a>
178
178
  <a class="cmd-link" href="#cmd-schedule" data-search="schedule manage automatic skill-sync scheduling --interval {6h,12h,daily} --json {status,enable,disable}">schedule</a>
179
179
  <a class="cmd-link" href="#cmd-serve" data-search="serve serve the skill catalog over http (port 8787) --port port --host host">serve</a>
180
180
  <a class="cmd-link" href="#cmd-mcp" data-search="mcp register boost as an mcp server (claude code, gemini cli) register boost as an mcp server for your agent clis --host h --stdio {register,unregister}">mcp</a>
@@ -1013,14 +1013,20 @@
1013
1013
  <div class="arg"><code>-f, --force</code><span>overwrite existing files without confirming</span></div>
1014
1014
  </div>
1015
1015
  </section>
1016
- <section class="cmd" id="cmd-completions" data-search="completions generate shell tab-completion scripts {bash,zsh,fish}">
1016
+ <section class="cmd" id="cmd-completions" data-search="completions generate shell tab-completion scripts --eval --install --uninstall {bash,zsh,fish}">
1017
1017
  <h3><span class="cname">completions</span><span class="gtag">cfg</span></h3>
1018
1018
  <p class="summary">Generate shell tab-completion scripts</p>
1019
- <pre class="syn">boost completions [{bash,zsh,fish}]</pre>
1019
+ <pre class="syn">boost completions [--eval] [--install] [--uninstall] [{bash,zsh,fish}]</pre>
1020
1020
  <div class="args-h">Arguments</div>
1021
1021
  <div class="args">
1022
1022
  <div class="arg"><code>{bash,zsh,fish}</code><span>target shell (default: from $SHELL)</span></div>
1023
1023
  </div>
1024
+ <div class="args-h">Options</div>
1025
+ <div class="args">
1026
+ <div class="arg"><code>--eval</code><span>print the variant safe to `eval` directly (what --install wires up)</span></div>
1027
+ <div class="arg"><code>--install</code><span>wire completions into the shell&#x27;s rc file (bash/zsh — one-shot, no manual editing)</span></div>
1028
+ <div class="arg"><code>--uninstall</code><span>remove what --install wired up</span></div>
1029
+ </div>
1024
1030
  </section>
1025
1031
  <section class="cmd" id="cmd-schedule" data-search="schedule manage automatic skill-sync scheduling --interval {6h,12h,daily} --json {status,enable,disable}">
1026
1032
  <h3><span class="cname">schedule</span><span class="gtag">cfg</span></h3>
Binary file
@@ -547,6 +547,60 @@ class TestCompletions:
547
547
  monkeypatch.setenv("SHELL", "/bin/weirdsh")
548
548
  assert "_boost_complete" in boost("completions").out
549
549
 
550
+ def test_eval_flag_prints_the_eval_safe_variant(self, boost, sandbox):
551
+ r = boost("completions", "zsh", "--eval")
552
+ assert r.out.rstrip().endswith("compdef _boost boost")
553
+ assert '_boost "$@"' not in r.out
554
+ assert "boost __complete" in r.out
555
+
556
+
557
+ class TestCompletionsInstall:
558
+ """`boost completions --install` — the one-shot alternative to the
559
+ copy-paste-into-your-rc-file instructions `INSTALL_HINT` used to be.
560
+ """
561
+
562
+ def test_explicit_shell_wires_the_matching_rc_file(self, boost, sandbox):
563
+ r = boost("completions", "bash", "--install")
564
+ assert "wired boost completions into ~/.bashrc" in r.out
565
+ assert "restart your shell" in r.out
566
+ text = (sandbox / ".bashrc").read_text(encoding="utf-8")
567
+ assert 'eval "$(boost completions bash --eval)"' in text
568
+
569
+ def test_auto_detects_shell_from_env(self, boost, sandbox, monkeypatch):
570
+ monkeypatch.setenv("SHELL", "/usr/local/bin/zsh")
571
+ boost("completions", "--install")
572
+ assert (sandbox / ".zshrc").exists()
573
+ assert not (sandbox / ".bashrc").exists()
574
+
575
+ def test_running_install_twice_does_not_duplicate_the_block(self, boost,
576
+ sandbox):
577
+ boost("completions", "bash", "--install")
578
+ boost("completions", "bash", "--install")
579
+ text = (sandbox / ".bashrc").read_text(encoding="utf-8")
580
+ assert text.count("# >>> boost completions >>>") == 1
581
+
582
+ def test_preserves_the_users_existing_rc_content(self, boost, sandbox):
583
+ (sandbox / ".bashrc").write_text("export EDITOR=vim\n", encoding="utf-8")
584
+ boost("completions", "bash", "--install")
585
+ text = (sandbox / ".bashrc").read_text(encoding="utf-8")
586
+ assert text.startswith("export EDITOR=vim\n")
587
+
588
+ def test_uninstall_removes_exactly_what_install_added(self, boost, sandbox):
589
+ (sandbox / ".bashrc").write_text("export EDITOR=vim\n", encoding="utf-8")
590
+ boost("completions", "bash", "--install")
591
+ r = boost("completions", "bash", "--uninstall")
592
+ assert "removed boost completions from ~/.bashrc" in r.out
593
+ assert (sandbox / ".bashrc").read_text(encoding="utf-8") == "export EDITOR=vim\n"
594
+
595
+ def test_fish_has_no_one_shot_install_yet(self, boost, sandbox):
596
+ r = boost("completions", "fish", "--install", expect=1)
597
+ assert "no one-shot install for fish yet" in r.err
598
+ assert "boost completions fish" in r.err
599
+
600
+ def test_install_and_uninstall_are_mutually_exclusive(self, boost, sandbox):
601
+ r = boost("completions", "bash", "--install", "--uninstall", expect=2)
602
+ assert "not allowed with argument" in r.err
603
+
550
604
 
551
605
  class TestHiddenCompleter:
552
606
  def test_it_prints_one_candidate_per_line(self, boost, sandbox):
@@ -345,6 +345,19 @@ class TestUpdate:
345
345
  assert "upgraded" not in r.out
346
346
  assert _lock()["brainstorming"]["version"] == "1.4.0"
347
347
 
348
+ def test_refreshes_the_completion_cache(self, boost, fixture_tap_src,
349
+ tmp_path):
350
+ from boost_cli.core import complete
351
+ tap_dir = _copy_tap(fixture_tap_src, tmp_path / "growing-tap")
352
+ boost("tap", tap_dir)
353
+ complete.refresh_names()
354
+ assert "brand-new-skill" not in complete._cached_names()
355
+ _add_and_commit(tap_dir, "skills/brand-new-skill/SKILL.md",
356
+ "---\nname: brand-new-skill\ndescription: added upstream\n"
357
+ "version: 1.0.0\n---\n\n# New\n", "add brand-new-skill")
358
+ boost("update")
359
+ assert "brand-new-skill" in complete._cached_names()
360
+
348
361
  def test_refreshes_rule_when_source_changes(self, boost, fixture_tap_src,
349
362
  tmp_path):
350
363
  tap_dir = _copy_tap(fixture_tap_src, tmp_path / "rule-tap")
@@ -825,6 +838,18 @@ class TestBundleEdges:
825
838
  assert "installed brainstorming v1.4.0 (fixture-tap)" in r.out
826
839
  assert "Installed 1 skill, added 1 tap" in r.out
827
840
 
841
+ def test_readding_a_tap_refreshes_the_completion_cache(self, boost, installed,
842
+ tmp_path):
843
+ from boost_cli.core import complete
844
+ bf = tmp_path / "Boostfile"
845
+ boost("bundle", "dump", bf)
846
+ boost("uninstall", "brainstorming")
847
+ boost("untap", "fixture-tap", "--force")
848
+ complete.refresh_names()
849
+ assert "brainstorming" not in complete._cached_names()
850
+ boost("bundle", "install", bf)
851
+ assert "brainstorming" in complete._cached_names()
852
+
828
853
  def test_dump_local_comment_and_lost_tap_url(self, boost, installed,
829
854
  tmp_path):
830
855
  boost("import", _skill_dir(tmp_path, "local-thing"))
@@ -534,6 +534,21 @@ class TestHeal:
534
534
  assert (paths.store_dir() / "brainstorming" / "SKILL.md").is_file()
535
535
  assert _lock()["brainstorming"]["version"] == "1.4.0"
536
536
 
537
+ def test_refreshes_the_completion_cache(self, boost, tapped):
538
+ from boost_cli.core import complete
539
+ complete.refresh_names()
540
+ complete.names_file().write_text("", encoding="utf-8") # gone stale
541
+ assert "brainstorming" not in complete._cached_names()
542
+ boost("heal")
543
+ assert "brainstorming" in complete._cached_names()
544
+
545
+ def test_dry_run_does_not_touch_the_completion_cache(self, boost, tapped):
546
+ from boost_cli.core import complete
547
+ complete.refresh_names()
548
+ complete.names_file().write_text("", encoding="utf-8")
549
+ boost("heal", "--dry-run")
550
+ assert "brainstorming" not in complete._cached_names()
551
+
537
552
 
538
553
  # ── conflict ─────────────────────────────────────────────────────────────
539
554
 
@@ -286,3 +286,28 @@ class TestOutdated:
286
286
  r = boost("outdated")
287
287
  assert "source missing" in r.out
288
288
  assert "1 outdated" in r.out
289
+
290
+
291
+ # ── completion cache invalidation ───────────────────────────────────────
292
+
293
+ class TestCompletionCacheStaysFresh:
294
+ """core/complete.py's module docstring promises the TAB-completion name
295
+ cache is refreshed "after anything that changes the catalogue (tap,
296
+ untap, update)" — these pin that promise against the commands that make
297
+ it. Without the refresh call, `boost install <TAB>` silently drifts from
298
+ whatever `boost taps` actually reports.
299
+ """
300
+
301
+ def test_tap_refreshes_the_completion_cache(self, boost, fixture_tap_src):
302
+ from boost_cli.core import complete
303
+ complete.refresh_names() # snapshot before any tap: empty
304
+ assert "brainstorming" not in complete._cached_names()
305
+ boost("tap", fixture_tap_src)
306
+ assert "brainstorming" in complete._cached_names()
307
+
308
+ def test_untap_refreshes_the_completion_cache(self, boost, tapped):
309
+ from boost_cli.core import complete
310
+ complete.refresh_names()
311
+ assert "brainstorming" in complete._cached_names()
312
+ boost("untap", "fixture-tap", "--force")
313
+ assert "brainstorming" not in complete._cached_names()
@@ -9,6 +9,7 @@ from __future__ import annotations
9
9
  import getpass
10
10
  import hashlib
11
11
  import json
12
+ import shutil
12
13
  import stat
13
14
  import sys
14
15
 
@@ -252,6 +253,19 @@ class TestProtocol:
252
253
  r = boost("protocol", "open", "boost://tap/owner/repo", expect=1)
253
254
  assert "cancelled" in r.out
254
255
 
256
+ def test_open_tap_refreshes_the_completion_cache(self, boost, sandbox,
257
+ fixture_tap_src,
258
+ monkeypatch):
259
+ from boost_cli.core import complete
260
+ monkeypatch.setattr(
261
+ "boost_cli.core.gitutil.clone_shallow",
262
+ lambda url, dest: shutil.copytree(fixture_tap_src, dest))
263
+ complete.refresh_names()
264
+ assert "brainstorming" not in complete._cached_names()
265
+ r = boost("protocol", "open", "boost://tap/owner/repo")
266
+ assert "tapped owner/repo" in r.out
267
+ assert "brainstorming" in complete._cached_names()
268
+
255
269
  def test_register_unregister_darwin(self, boost, sandbox, monkeypatch):
256
270
  monkeypatch.setattr("boost_cli.commands.team.platform.system",
257
271
  lambda: "Darwin")