boost-skill-cli 1.0.349__tar.gz → 1.0.351__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 (595) hide show
  1. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/cli.py +20 -0
  4. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/configuration.py +6 -23
  5. boost_skill_cli-1.0.351/boost_cli/core/complete.py +199 -0
  6. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  7. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  8. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/completions-complete-only-command-names.md +39 -2
  9. boost_skill_cli-1.0.351/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +47 -0
  10. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +46 -1
  11. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap.html +130 -6
  12. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/pyproject.toml +3 -5
  13. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_configuration.py +56 -25
  14. boost_skill_cli-1.0.351/tests/unit/test_complete.py +231 -0
  15. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.gitattributes +0 -0
  16. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.gitignore +0 -0
  17. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.gitleaks.toml +0 -0
  18. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.htmlvalidate.json +0 -0
  19. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.lighthouserc.json +0 -0
  20. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.lycheeignore +0 -0
  21. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.markdownlint-cli2.jsonc +0 -0
  22. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.pre-commit-config.yaml +0 -0
  23. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.stylelintrc.json +0 -0
  24. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.vale/styles/boost/Terminology.yml +0 -0
  25. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  26. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/.vale.ini +0 -0
  27. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/CLAUDE.md +0 -0
  28. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/CODE_OF_CONDUCT.md +0 -0
  29. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/CONTRIBUTING.md +0 -0
  30. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/LICENSE +0 -0
  31. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/MANIFEST.in +0 -0
  32. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/Makefile +0 -0
  33. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/README.md +0 -0
  34. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/SECURITY.md +0 -0
  35. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost +0 -0
  36. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/__init__.py +0 -0
  37. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/__main__.py +0 -0
  38. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/cliparse.py +0 -0
  39. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/__init__.py +0 -0
  40. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/_common.py +0 -0
  41. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/bmad.py +0 -0
  42. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/discovery.py +0 -0
  43. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/hooks.py +0 -0
  44. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/info.py +0 -0
  45. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/intelligence.py +0 -0
  46. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/pkg.py +0 -0
  47. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/quality.py +0 -0
  48. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/run.py +0 -0
  49. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/safety.py +0 -0
  50. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/taps.py +0 -0
  51. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/commands/team.py +0 -0
  52. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/__init__.py +0 -0
  53. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/adapters.py +0 -0
  54. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/agents.py +0 -0
  55. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/ai.py +0 -0
  56. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/capabilities.py +0 -0
  57. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/catalog.py +0 -0
  58. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/chat.py +0 -0
  59. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/claude_settings.py +0 -0
  60. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/config.py +0 -0
  61. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/dense.py +0 -0
  62. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/ed25519.py +0 -0
  63. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/embed.py +0 -0
  64. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/faithfulness.py +0 -0
  65. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/frontmatter.py +0 -0
  66. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/gitutil.py +0 -0
  67. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/imperative.py +0 -0
  68. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/injectscan.py +0 -0
  69. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/installscan.py +0 -0
  70. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/integrity.py +0 -0
  71. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/journal.py +0 -0
  72. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/localembed.py +0 -0
  73. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/lockfile.py +0 -0
  74. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/logs.py +0 -0
  75. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/mcp.py +0 -0
  76. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/mcpdecl.py +0 -0
  77. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/mcphost.py +0 -0
  78. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/minisign.py +0 -0
  79. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/nethttp.py +0 -0
  80. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/output.py +0 -0
  81. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/paths.py +0 -0
  82. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/policy.py +0 -0
  83. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/projectlock.py +0 -0
  84. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/provenance.py +0 -0
  85. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/rag.py +0 -0
  86. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/registry.py +0 -0
  87. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/resolve.py +0 -0
  88. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/rules.py +0 -0
  89. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/scopes.py +0 -0
  90. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/secretscan.py +0 -0
  91. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/selfupdate.py +0 -0
  92. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/serve.py +0 -0
  93. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/stackprobe.py +0 -0
  94. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/staleness.py +0 -0
  95. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/store.py +0 -0
  96. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/trustaudit.py +0 -0
  97. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/typosquat.py +0 -0
  98. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/updatediff.py +0 -0
  99. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/util.py +0 -0
  100. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/core/workflows.py +0 -0
  101. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/data/registries.json +0 -0
  102. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/errors.py +0 -0
  103. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_cli/spin.py +0 -0
  104. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  105. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  106. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/requires.txt +0 -0
  107. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/boost_skill_cli.egg-info/top_level.txt +0 -0
  108. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/codecov.yml +0 -0
  109. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/.claude/settings.local.json +0 -0
  110. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/DEBUGGING.md +0 -0
  111. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/adapters.html +0 -0
  112. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/README.md +0 -0
  113. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/c4-components-core.md +0 -0
  114. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/c4-containers.md +0 -0
  115. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/c4-context.md +0 -0
  116. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/architecture/c4-dynamic-install.md +0 -0
  117. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/distill.gif +0 -0
  118. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/doctor.gif +0 -0
  119. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/explain.gif +0 -0
  120. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/hooks.gif +0 -0
  121. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/install.gif +0 -0
  122. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/pulse.gif +0 -0
  123. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/search.gif +0 -0
  124. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/gifs/tap.gif +0 -0
  125. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/distill.tape +0 -0
  126. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/doctor.tape +0 -0
  127. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/explain.tape +0 -0
  128. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/hooks.tape +0 -0
  129. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/install.tape +0 -0
  130. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/pulse.tape +0 -0
  131. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/search.tape +0 -0
  132. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel/tapes/tap.tape +0 -0
  133. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/carousel.html +0 -0
  134. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/chat.html +0 -0
  135. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/commands.html +0 -0
  136. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/demo-index.json +0 -0
  137. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/demo.gif +0 -0
  138. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/demo.html +0 -0
  139. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/demo.tape +0 -0
  140. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/design-roadmap.html +0 -0
  141. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/eval.html +0 -0
  142. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/index.html +0 -0
  143. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/mcp-hub.html +0 -0
  144. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/rag-architecture.md +0 -0
  145. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D01.md +0 -0
  146. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D02.md +0 -0
  147. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D03.md +0 -0
  148. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D04.md +0 -0
  149. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D05.md +0 -0
  150. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D06.md +0 -0
  151. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D07.md +0 -0
  152. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D08.md +0 -0
  153. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D09.md +0 -0
  154. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D10.md +0 -0
  155. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D11.md +0 -0
  156. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D12.md +0 -0
  157. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D13.md +0 -0
  158. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D14.md +0 -0
  159. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D15.md +0 -0
  160. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D16.md +0 -0
  161. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D17.md +0 -0
  162. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D18.md +0 -0
  163. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D19.md +0 -0
  164. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D20.md +0 -0
  165. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D21.md +0 -0
  166. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D22.md +0 -0
  167. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D23.md +0 -0
  168. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D24.md +0 -0
  169. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D25.md +0 -0
  170. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/BOOST-D26.md +0 -0
  171. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  172. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  173. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  174. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  175. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  176. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  177. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  178. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  179. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  180. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  181. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  182. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  183. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  184. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  185. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  186. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  187. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  188. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  189. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  190. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  191. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  192. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  193. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  194. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  195. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/command-carousel-page.md +0 -0
  196. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  197. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  198. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  199. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  200. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  201. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  202. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  203. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  204. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  205. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  206. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  207. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  208. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  209. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  210. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  211. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  212. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  213. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  214. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  215. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  216. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  217. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  218. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  219. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  220. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  221. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  222. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  223. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  224. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  225. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/github-community-health-files.md +0 -0
  226. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  227. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  228. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  229. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  230. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  231. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  232. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  233. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  234. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  235. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  236. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  237. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  238. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  239. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  240. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  241. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  242. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  243. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  244. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  245. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  246. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  247. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  248. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  249. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  250. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  251. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  252. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  253. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  254. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  255. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  256. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  257. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  258. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  259. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  260. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  261. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  262. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  263. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  264. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  265. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  266. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  267. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  268. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  269. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  270. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  271. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  272. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  273. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  274. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  275. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  276. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  277. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  278. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  279. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  280. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  281. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  282. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  283. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  284. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  285. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  286. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  287. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  288. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  289. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  290. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  291. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  292. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  293. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  294. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  295. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  296. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  297. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  298. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  299. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  300. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  301. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  302. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  303. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  304. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  305. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  306. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  307. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  308. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  309. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  310. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  311. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  312. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  313. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  314. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  315. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  316. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  317. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  318. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  319. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  320. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  321. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  322. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  323. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  324. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  325. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  326. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  327. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  328. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  329. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  330. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  331. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  332. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  333. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  334. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  335. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  336. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  337. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  338. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  339. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  340. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  341. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  342. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  343. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  344. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  345. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  346. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  347. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  348. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  349. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  350. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  351. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  352. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  353. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  354. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  355. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  356. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  357. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  358. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  359. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  360. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  361. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/workspace-scope-install.md +0 -0
  362. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  363. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/eslint.config.mjs +0 -0
  364. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/README.md +0 -0
  365. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/__init__.py +0 -0
  366. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/baseline.json +0 -0
  367. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/faithfulness.py +0 -0
  368. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/golden_set.json +0 -0
  369. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/make_corpus.py +0 -0
  370. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/make_golden.py +0 -0
  371. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/metrics.py +0 -0
  372. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/evals/run_evals.py +0 -0
  373. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/examples/README.md +0 -0
  374. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/examples/adapt-demo.sh +0 -0
  375. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/examples/boost-run-prototype.sh +0 -0
  376. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/index.html +0 -0
  377. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/noxfile.py +0 -0
  378. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/coverage-tools.in +0 -0
  379. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/coverage-tools.txt +0 -0
  380. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/lint-tools.in +0 -0
  381. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/lint-tools.txt +0 -0
  382. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/mutation-tools.in +0 -0
  383. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/mutation-tools.txt +0 -0
  384. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/platform-pins.lock +0 -0
  385. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/release-tools.in +0 -0
  386. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/release-tools.txt +0 -0
  387. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/test-tools.in +0 -0
  388. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/requirements/test-tools.txt +0 -0
  389. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/a11y_check.py +0 -0
  390. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/bench_cli.sh +0 -0
  391. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/build_command_reference.py +0 -0
  392. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/build_demo_index.py +0 -0
  393. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/build_registries.py +0 -0
  394. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/build_roadmap.py +0 -0
  395. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/check_anchors.py +0 -0
  396. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/check_licenses.py +0 -0
  397. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/check_required_checks.py +0 -0
  398. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/ensure_eval_corpus.sh +0 -0
  399. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_explain.py +0 -0
  400. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_gate.py +0 -0
  401. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_recommend.py +0 -0
  402. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_retrieval.py +0 -0
  403. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/eval_stats_summary.py +0 -0
  404. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/import_budget.py +0 -0
  405. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/lock_toolchain.py +0 -0
  406. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/mutation_gate.py +0 -0
  407. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/mutation_shards.py +0 -0
  408. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/mutation_weights.json +0 -0
  409. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/perf_gate.py +0 -0
  410. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/post_deploy_smoke.py +0 -0
  411. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/release_guard.py +0 -0
  412. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/scripts/release_preflight.py +0 -0
  413. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/setup.cfg +0 -0
  414. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/sonar-project.properties +0 -0
  415. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/style/README.md +0 -0
  416. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/style/boost.css +0 -0
  417. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/style/boost.js +0 -0
  418. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/style/demo.html +0 -0
  419. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/adapt.feature +0 -0
  420. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/browse.feature +0 -0
  421. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/count.feature +0 -0
  422. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/discover.feature +0 -0
  423. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/doctor.feature +0 -0
  424. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/environment.py +0 -0
  425. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/explain.feature +0 -0
  426. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/index.feature +0 -0
  427. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/install.feature +0 -0
  428. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/list.feature +0 -0
  429. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/mcp.feature +0 -0
  430. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/search.feature +0 -0
  431. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/steps/cli_steps.py +0 -0
  432. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/steps/discovery_steps.py +0 -0
  433. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/steps/mcp_steps.py +0 -0
  434. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/bdd/features/steps/quality_steps.py +0 -0
  435. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/conftest.py +0 -0
  436. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/baseline.json +0 -0
  437. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/explain.jsonl +0 -0
  438. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/golden-natural.jsonl +0 -0
  439. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/golden.jsonl +0 -0
  440. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/recommend.jsonl +0 -0
  441. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/eval/taps.txt +0 -0
  442. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_capabilities_policy.py +0 -0
  443. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_adapt.py +0 -0
  444. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_bmad.py +0 -0
  445. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_chat.py +0 -0
  446. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_discovery.py +0 -0
  447. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_hooks.py +0 -0
  448. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_info.py +0 -0
  449. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_intelligence.py +0 -0
  450. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_pkg.py +0 -0
  451. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_quality.py +0 -0
  452. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_taps.py +0 -0
  453. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_cli_team.py +0 -0
  454. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_everyday_loop.py +0 -0
  455. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_integrity_enforce.py +0 -0
  456. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_property_parsers.py +0 -0
  457. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_run.py +0 -0
  458. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_tap_signing.py +0 -0
  459. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/functional/test_workspace_scope.py +0 -0
  460. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/README.md +0 -0
  461. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  462. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  463. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  464. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  465. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  466. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  467. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  468. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  469. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  470. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  471. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  472. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  473. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  474. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  475. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  476. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  477. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  478. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  479. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  480. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  481. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/fuzz_frontmatter.py +0 -0
  482. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/fuzz/fuzz_registry.py +0 -0
  483. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/make_fixture.py +0 -0
  484. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/perf/test_benchmarks.py +0 -0
  485. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/smoke.sh +0 -0
  486. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_a11y_check.py +0 -0
  487. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_adapters.py +0 -0
  488. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_adapters_multi.py +0 -0
  489. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_adapters_runner.py +0 -0
  490. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_agents.py +0 -0
  491. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_ai.py +0 -0
  492. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_capabilities.py +0 -0
  493. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_catalog.py +0 -0
  494. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_chat.py +0 -0
  495. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_check_anchors.py +0 -0
  496. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_check_licenses.py +0 -0
  497. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_claude_settings.py +0 -0
  498. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_cliparse.py +0 -0
  499. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_codeql_analysis_key.py +0 -0
  500. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_command_reference_fresh.py +0 -0
  501. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_community_health_files.py +0 -0
  502. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_config.py +0 -0
  503. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_content_dedupe.py +0 -0
  504. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dedup_trust.py +0 -0
  505. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_demo_index.py +0 -0
  506. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense.py +0 -0
  507. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense_fallback.py +0 -0
  508. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense_fix_hint.py +0 -0
  509. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense_shards.py +0 -0
  510. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dense_status.py +0 -0
  511. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_dependabot_config.py +0 -0
  512. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_docs_pages_linked.py +0 -0
  513. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_docsite_chrome.py +0 -0
  514. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_ed25519.py +0 -0
  515. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_embed.py +0 -0
  516. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_embed_local.py +0 -0
  517. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_entry_key.py +0 -0
  518. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_errors_and_cli_table.py +0 -0
  519. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_baseline.py +0 -0
  520. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_faithfulness.py +0 -0
  521. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_gate.py +0 -0
  522. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_metrics.py +0 -0
  523. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_eval_stats_summary.py +0 -0
  524. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_faithfulness.py +0 -0
  525. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_frontmatter.py +0 -0
  526. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_fuzz_targets.py +0 -0
  527. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_gitleaks_config.py +0 -0
  528. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_gitutil.py +0 -0
  529. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_imperative.py +0 -0
  530. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_import_budget.py +0 -0
  531. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_injectscan.py +0 -0
  532. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_installscan.py +0 -0
  533. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_integrity.py +0 -0
  534. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_journal.py +0 -0
  535. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_localembed.py +0 -0
  536. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_localembed_e2e.py +0 -0
  537. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_lockfile.py +0 -0
  538. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_logs.py +0 -0
  539. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_marketing_counts.py +0 -0
  540. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mcp.py +0 -0
  541. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mcp_install_scan.py +0 -0
  542. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mcpdecl.py +0 -0
  543. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mcphost.py +0 -0
  544. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_minisign.py +0 -0
  545. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mutation_hardening.py +0 -0
  546. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mutation_shards.py +0 -0
  547. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mutation_subfile_shards.py +0 -0
  548. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_mutmut_source_paths.py +0 -0
  549. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_nethttp.py +0 -0
  550. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_output.py +0 -0
  551. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_paths.py +0 -0
  552. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_perf_gate.py +0 -0
  553. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_pkg_confusions.py +0 -0
  554. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_pkg_injection.py +0 -0
  555. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_pkg_secrets.py +0 -0
  556. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_platform_pins.py +0 -0
  557. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_policy.py +0 -0
  558. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_post_deploy_smoke.py +0 -0
  559. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_project_mcp_sidecar.py +0 -0
  560. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_projectlock.py +0 -0
  561. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_provenance.py +0 -0
  562. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_rag.py +0 -0
  563. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_rag_fusion.py +0 -0
  564. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_registries_fresh.py +0 -0
  565. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_registry.py +0 -0
  566. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_registry_categories.py +0 -0
  567. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_release_guard.py +0 -0
  568. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_release_preflight.py +0 -0
  569. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_required_checks.py +0 -0
  570. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_resolve.py +0 -0
  571. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_roadmap_fresh.py +0 -0
  572. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_rules.py +0 -0
  573. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_scopes.py +0 -0
  574. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_secretscan.py +0 -0
  575. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_selfupdate.py +0 -0
  576. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_serve.py +0 -0
  577. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_spin.py +0 -0
  578. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_stackprobe.py +0 -0
  579. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_staleness.py +0 -0
  580. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_store.py +0 -0
  581. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_token_parity.py +0 -0
  582. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_toolchain_lock.py +0 -0
  583. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_trustaudit.py +0 -0
  584. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_typosquat.py +0 -0
  585. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_updatediff.py +0 -0
  586. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_util.py +0 -0
  587. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_version.py +0 -0
  588. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_workflow_concurrency.py +0 -0
  589. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_workflow_timeouts.py +0 -0
  590. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/unit/test_workflows.py +0 -0
  591. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/visual/a11y_check.mjs +0 -0
  592. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/visual/console_check.mjs +0 -0
  593. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/visual/package-lock.json +0 -0
  594. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/tests/visual/package.json +0 -0
  595. {boost_skill_cli-1.0.349 → boost_skill_cli-1.0.351}/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.349
3
+ Version: 1.0.351
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.349'
22
- __version_tuple__ = version_tuple = (1, 0, 349)
21
+ __version__ = version = '1.0.351'
22
+ __version_tuple__ = version_tuple = (1, 0, 351)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -198,6 +198,21 @@ def _unknown(name: str) -> int:
198
198
  return 2
199
199
 
200
200
 
201
+ def _complete_candidates(argv: List[str]) -> int:
202
+ """`boost __complete <words…>` — one candidate per line, for a shell.
203
+
204
+ Runs on every TAB, so it never fails loudly: core.complete swallows its own
205
+ errors and a traceback here would land in the line the user is typing.
206
+ """
207
+ from .core import complete
208
+ for candidate in complete.candidates(argv.copy(), COMMANDS):
209
+ print(candidate)
210
+ return 0
211
+
212
+
213
+ _PLUMBING = {"__complete": _complete_candidates}
214
+
215
+
201
216
  def _dispatch(name: str, argv: List[str], soft: bool = False) -> int:
202
217
  _group, module, _summary = _BY_NAME[name]
203
218
  mod = importlib.import_module("boost_cli.commands.%s" % module)
@@ -248,6 +263,11 @@ def main(argv: List[str] | None = None) -> int:
248
263
  print_help()
249
264
  return 0
250
265
  name, rest = argv[0], argv[1:]
266
+ if name in _PLUMBING:
267
+ # Before the _BY_NAME guard (it is not a command) and before
268
+ # log_invocation: this runs on every TAB, and logging a line per
269
+ # keystroke would bury the diagnostic log in completion noise.
270
+ return _PLUMBING[name](rest)
251
271
  if name not in _BY_NAME:
252
272
  return _unknown(name)
253
273
  logs.log_invocation([name, *rest])
@@ -17,6 +17,7 @@ from .. import __version__, cliparse
17
17
  from ..core import (
18
18
  agents,
19
19
  catalog,
20
+ complete,
20
21
  config,
21
22
  frontmatter,
22
23
  gitutil,
@@ -537,33 +538,15 @@ def cmd_completions(argv) -> int:
537
538
  p.add_argument("shell", nargs="?", choices=("bash", "zsh", "fish"),
538
539
  default=None, help="target shell (default: from $SHELL)")
539
540
  args = p.parse_args(argv)
540
- from ..cli import COMMANDS
541
541
 
542
542
  shell = args.shell or Path(os.environ.get("SHELL", "")).name
543
543
  if shell not in ("bash", "zsh", "fish"):
544
544
  shell = "bash"
545
-
546
- names = [n for n, _g, _m, _s in COMMANDS]
547
- if shell == "bash":
548
- lines = ["# boost bash completion",
549
- 'complete -W "%s" boost' % " ".join(names)]
550
- hint = "boost completions bash >> ~/.bashrc"
551
- elif shell == "zsh":
552
- lines = ["#compdef boost", "", "_boost() {", " local -a _boost_commands",
553
- " _boost_commands=("]
554
- lines += [" '%s:%s'" % (n, _sq(s)) for n, _g, _m, s in COMMANDS]
555
- lines += [" )", " if (( CURRENT == 2 )); then",
556
- " _describe -t commands 'boost command' _boost_commands",
557
- " else", " _files", " fi", "}", "", '_boost "$@"']
558
- hint = "boost completions zsh > ~/.zfunc/_boost (with fpath+=~/.zfunc before compinit)"
559
- else:
560
- lines = ["# boost fish completion"]
561
- lines += ["complete -c boost -n __fish_use_subcommand -a %s -d '%s'"
562
- % (n, s.replace("\\", "\\\\").replace("'", "\\'"))
563
- for n, _g, _m, s in COMMANDS]
564
- hint = "boost completions fish > ~/.config/fish/completions/boost.fish"
565
- print("\n".join(lines))
566
- out.dim("# install: " + hint)
545
+ # The script is a thin shim that calls `boost __complete`; the candidate
546
+ # rules live in core/complete.py so all three shells share one tested
547
+ # implementation instead of three hand-maintained static lists.
548
+ print(complete.script(shell).rstrip())
549
+ out.dim("# install: " + complete.INSTALL_HINT[shell])
567
550
  return 0
568
551
 
569
552
 
@@ -0,0 +1,199 @@
1
+ """What a shell offers at TAB, decided in Python rather than in shell.
2
+
3
+ WHY THIS EXISTS. `boost completions` used to emit a static list of command names
4
+ per shell and nothing else, so `boost install <TAB>` — the single most useful
5
+ completion a package manager has — re-offered command names in bash, offered
6
+ local *filenames* in zsh, and offered nothing in fish. Each failed structurally:
7
+ a bash `-W` wordlist is position-independent by definition, zsh guarded on
8
+ `(( CURRENT == 2 ))` and fell through to `_files`, and fish registered every
9
+ completion under `__fish_use_subcommand`.
10
+
11
+ The fix is one completer here and three thin shims that call it, so the context
12
+ rules are written once, in a language that can test them, instead of three times
13
+ in three shell dialects that cannot share a test.
14
+
15
+ TWO CONSTRAINTS SHAPE EVERYTHING BELOW.
16
+
17
+ *It runs on a keystroke.* `catalog.all_entries()` measured **423 ms** for 71,655
18
+ entries on a real install — four times over any reasonable TAB budget, before
19
+ interpreter start. So names come from a flat cache rebuilt from the tap caches:
20
+ the same question answered in **1.9 ms**, a 220x difference, which is what makes
21
+ argument completion affordable at all.
22
+
23
+ *It must never fail loudly.* A traceback printed into a live prompt is worse than
24
+ no completion, so every public entry point swallows exceptions and returns
25
+ nothing. Silence degrades; a stack trace corrupts the line the user is typing.
26
+ """
27
+ from __future__ import annotations
28
+
29
+ import re
30
+ from pathlib import Path
31
+ from typing import Callable, Dict, List, Optional, Sequence, Tuple
32
+
33
+ from . import catalog, paths, registry, store
34
+
35
+ # cli.COMMANDS rows: (name, group, module, summary). Typed here rather than
36
+ # imported so `core` stays the bottom layer.
37
+ Registry = Sequence[Tuple[str, str, str, str]]
38
+
39
+ # Commands whose first argument is a catalogue item, an installed item, or a tap.
40
+ # Anything absent completes nothing rather than guessing: a wrong candidate list
41
+ # actively teaches the wrong thing, which is worse than an empty one.
42
+ _CATALOG_ARG = ("install", "info", "cat", "preview", "explain", "why",
43
+ "distill", "adapt", "absorb")
44
+ _INSTALLED_ARG = ("uninstall", "reinstall", "pin", "unpin", "edit", "verify")
45
+ _TAP_ARG = ("untap",)
46
+
47
+ def names_file() -> Path:
48
+ """Flat newline-delimited catalogue names, one per line."""
49
+ return paths.cache_dir() / "_names.txt"
50
+
51
+
52
+ def _command_names(commands: Registry) -> List[str]:
53
+ # No hidden-name filter here: `__complete` is dispatched in cli.main()
54
+ # without a COMMANDS row precisely so it stays out of --help, the generated
55
+ # docs, the counts *and* this list. One mechanism, not two.
56
+ return [n for n, _g, _m, _s in commands]
57
+
58
+
59
+ def refresh_names() -> int:
60
+ """Rebuild the names cache from the tap caches. Returns the count written.
61
+
62
+ Called after anything that changes the catalogue (tap, untap, update), and
63
+ lazily by :func:`_cached_names` when the file is missing, so a user who
64
+ never runs those still gets completion on their first TAB.
65
+ """
66
+ names = sorted({str(e.get("name", "")) for e in catalog.all_entries()
67
+ if e.get("name")})
68
+ paths.ensure_dirs()
69
+ names_file().write_text("\n".join(names), encoding="utf-8")
70
+ return len(names)
71
+
72
+
73
+ def _cached_names() -> List[str]:
74
+ path = names_file()
75
+ if not path.exists():
76
+ refresh_names()
77
+ # errors="replace" rather than a raise: a cache corrupted by a half-written
78
+ # file must degrade to whatever is readable, not break the prompt.
79
+ text = path.read_text(encoding="utf-8", errors="replace")
80
+ return [line for line in text.split("\n") if line]
81
+
82
+
83
+ def _installed_names() -> List[str]:
84
+ return sorted(store.installed())
85
+
86
+
87
+ def _tap_names() -> List[str]:
88
+ return sorted(t.name for t in registry.list_taps())
89
+
90
+
91
+ # Long flags a command documents, read from its own parser rather than a shared
92
+ # list — a global flag list would offer flags the command rejects.
93
+ def _flags_for(command: str, commands: Registry) -> List[str]:
94
+ row = next((r for r in commands if r[0] == command), None)
95
+ if row is None:
96
+ return []
97
+ module = __import__("boost_cli.commands." + row[2], fromlist=["x"])
98
+ func = getattr(module, "cmd_" + command.replace("-", "_"), None)
99
+ if func is None:
100
+ return []
101
+ # The parser is built inside the command function, so there is no object to
102
+ # interrogate without running it. The docstring/source is the cheap,
103
+ # dependency-free source of truth for what it accepts.
104
+ import inspect
105
+ try:
106
+ src = inspect.getsource(func)
107
+ except (OSError, TypeError):
108
+ return []
109
+ return sorted(set(re.findall(r'"(--[a-z][a-z0-9-]*)"', src)))
110
+
111
+
112
+ def _source_for(command: str) -> Optional[Callable[[], List[str]]]:
113
+ table: Dict[str, Callable[[], List[str]]] = {}
114
+ for name in _CATALOG_ARG:
115
+ table[name] = _cached_names
116
+ for name in _INSTALLED_ARG:
117
+ table[name] = _installed_names
118
+ for name in _TAP_ARG:
119
+ table[name] = _tap_names
120
+ return table.get(command)
121
+
122
+
123
+ def candidates(words: List[str], commands: Registry) -> List[str]:
124
+ """Completions for ``words``, where the last element is the partial word.
125
+
126
+ ``words`` is the command line as the shell split it, including ``boost``
127
+ itself — so ``["boost", "install", "code"]`` is a user who has typed
128
+ ``boost install code<TAB>``.
129
+
130
+ ``commands`` is ``cli.COMMANDS``, passed in rather than imported: ``core``
131
+ is the bottom layer and must not reach up into ``cli`` (the import-linter
132
+ contract enforces it), so the registry arrives as data.
133
+ """
134
+ try:
135
+ if len(words) < 2:
136
+ return []
137
+ current = words[-1]
138
+ if len(words) == 2: # completing the command itself
139
+ return [c for c in _command_names(commands) if c.startswith(current)]
140
+ command = words[1]
141
+ if current.startswith("-"):
142
+ return [f for f in _flags_for(command, commands) if f.startswith(current)]
143
+ source = _source_for(command)
144
+ if source is None:
145
+ return []
146
+ return [c for c in source() if c.startswith(current)]
147
+ except Exception:
148
+ # Deliberately broad. Anything raised here would otherwise land in the
149
+ # middle of the line the user is typing.
150
+ return []
151
+
152
+
153
+ _BASH = """# boost bash completion — delegates to `boost __complete`, so the
154
+ # candidate rules live in Python and cannot drift from the CLI.
155
+ _boost_complete() {
156
+ local IFS=$'\\n'
157
+ COMPREPLY=( $(boost __complete "${COMP_WORDS[@]:0:$((COMP_CWORD+1))}" 2>/dev/null) )
158
+ }
159
+ complete -F _boost_complete boost
160
+ """
161
+
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() {
167
+ local -a reply
168
+ # "${(@)...}" preserves the EMPTY current word. Unquoted, zsh drops it,
169
+ # so `boost install <TAB>` arrives as two words and completes command
170
+ # names instead of skills — the exact bug this rewrite is fixing.
171
+ reply=( ${(f)"$(boost __complete "${(@)words[1,$CURRENT]}" 2>/dev/null)"} )
172
+ compadd -- $reply
173
+ }
174
+ _boost "$@"
175
+ """
176
+
177
+ _FISH = """# boost fish completion — delegates to `boost __complete`.
178
+ # `-f` disables fish's filename fallback, which is what it offered previously
179
+ # once the subcommand was typed.
180
+ function __boost_complete
181
+ boost __complete (commandline -opc) (commandline -ct) 2>/dev/null
182
+ end
183
+ complete -c boost -f -a '(__boost_complete)'
184
+ """
185
+
186
+ _SCRIPTS = {"bash": _BASH, "zsh": _ZSH, "fish": _FISH}
187
+
188
+
189
+ def script(shell: str) -> str:
190
+ """The completion script for ``shell``. Unknown shells get bash's."""
191
+ return _SCRIPTS.get(shell, _BASH)
192
+
193
+
194
+ INSTALL_HINT = {
195
+ "bash": "boost completions bash >> ~/.bashrc",
196
+ "zsh": "boost completions zsh > ~/.zfunc/_boost "
197
+ "(with fpath+=~/.zfunc before compinit)",
198
+ "fish": "boost completions fish > ~/.config/fish/completions/boost.fish",
199
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.349
3
+ Version: 1.0.351
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -55,6 +55,7 @@ boost_cli/core/capabilities.py
55
55
  boost_cli/core/catalog.py
56
56
  boost_cli/core/chat.py
57
57
  boost_cli/core/claude_settings.py
58
+ boost_cli/core/complete.py
58
59
  boost_cli/core/config.py
59
60
  boost_cli/core/dense.py
60
61
  boost_cli/core/ed25519.py
@@ -211,6 +212,7 @@ docs/roadmap/items/docstring-coverage-interrogate.md
211
212
  docs/roadmap/items/doctor-checks-rules-and-workflows.md
212
213
  docs/roadmap/items/end-of-options-guard-on-git-commands.md
213
214
  docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md
215
+ docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md
214
216
  docs/roadmap/items/extension-free-tests-core-dense-py.md
215
217
  docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md
216
218
  docs/roadmap/items/finish-mutation-hardening-across-core.md
@@ -495,6 +497,7 @@ tests/unit/test_cliparse.py
495
497
  tests/unit/test_codeql_analysis_key.py
496
498
  tests/unit/test_command_reference_fresh.py
497
499
  tests/unit/test_community_health_files.py
500
+ tests/unit/test_complete.py
498
501
  tests/unit/test_config.py
499
502
  tests/unit/test_content_dedupe.py
500
503
  tests/unit/test_dedup_trust.py
@@ -2,12 +2,12 @@
2
2
  id: completions-complete-only-command-names
3
3
  board: code
4
4
  section: dx
5
- status: planned
5
+ status: shipped
6
6
  category: CLI · DX
7
7
  complexity: M
8
8
  impact: High
9
9
  wow: 4
10
- note: 79 command names complete; 82 flags and every argument do not
10
+ note: arguments and flags now complete; verified in real bash and zsh, not just asserted
11
11
  order: 79
12
12
  owner:
13
13
  pr:
@@ -62,3 +62,40 @@ TAB, so the candidate path must not pay catalog-scan cost &mdash; it needs the c
62
62
  budget (target &lt;100&nbsp;ms) measured rather than assumed. And <code>__complete</code> must never
63
63
  fail loudly: a completer that prints a traceback into the user's prompt is worse than one that
64
64
  returns nothing, so it should exit 0 with empty output on any error.
65
+
66
+ <b>Shipped as <code>core/complete.py</code> plus a hidden <code>boost __complete</code>, with the
67
+ three shell scripts reduced to shims that call it.</b> Verified by driving <b>real bash and real
68
+ zsh</b> rather than by asserting on emitted text &mdash; which is precisely the gap that let this
69
+ survive: <code>boost install &lt;TAB&gt;</code> now offers the catalogue,
70
+ <code>boost uninstall &lt;TAB&gt;</code> offers what is installed, <code>boost untap &lt;TAB&gt;</code>
71
+ offers configured taps, and <code>boost search --&lt;TAB&gt;</code> offers that command's own flags
72
+ (previously <b>zero</b> in every shell).
73
+
74
+ <b>A measurement decided the architecture.</b> Completion fires on a keystroke, and
75
+ <code>catalog.all_entries()</code> costs <b>423&nbsp;ms</b> for 71,655 entries &mdash; four times
76
+ over the &lt;100&nbsp;ms budget this card set, before interpreter start. A flat names cache answers
77
+ the same question in <b>1.9&nbsp;ms</b>, a <b>220&times;</b> difference, and a test asserts the
78
+ completion path never calls <code>all_entries()</code> at all. Without that number the obvious
79
+ implementation would have shipped a TAB that visibly stalls.
80
+
81
+ <b>Driving a real shell found a bug that no unit test would have.</b> The zsh shim passed
82
+ <code>${words[1,$CURRENT]}</code> unquoted, and zsh <em>drops an empty trailing word</em> &mdash; so
83
+ <code>boost install &lt;TAB&gt;</code> arrived as two words and completed <em>command names</em>,
84
+ reproducing the exact defect this card exists to fix, in the new code. <code>"${(@)...}"</code>
85
+ preserves it. Bash never showed this because <code>"${COMP_WORDS[@]:0:…}"</code> already preserves
86
+ empty elements. A test now pins the quoting.
87
+
88
+ <b>The layering got stricter, not looser.</b> <code>completions</code> used to import
89
+ <code>COMMANDS</code> out of <code>cli.py</code> &mdash; the single upward edge the import-linter
90
+ contract allowlisted. The registry is now passed into <code>core.complete</code> as data, so the
91
+ allowlist entry is <b>gone</b> and <code>boost_cli</code> has no exceptions to its
92
+ <code>cli&nbsp;&rarr;&nbsp;commands&nbsp;&rarr;&nbsp;core</code> rule at all. <code>__complete</code>
93
+ is deliberately <em>not</em> a row in <code>COMMANDS</code>: that list generates
94
+ <code>docs/commands.html</code>, <code>--help</code> and the command counts, and plumbing belongs in
95
+ none of them &mdash; so the count stays 79.
96
+
97
+ <b>The old tests were replaced, not extended.</b> Four tests asserted that the bash wordlist equalled
98
+ <code>COMMANDS</code> and that zsh emitted 79 entries. All four passed for years while the feature
99
+ was broken, because each asked what the generator <em>printed</em> rather than what a shell would
100
+ <em>propose</em>. The replacements pin behaviour and the shim contract.
101
+
@@ -0,0 +1,47 @@
1
+ ---
2
+ id: eval-corpus-is-96x-smaller-than-a-real-install
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: Eval · Correctness
7
+ complexity: M
8
+ impact: High
9
+ wow: 4
10
+ note: BM25 hit@1 is 0.340 on the pinned corpus and 0.040 on a real one
11
+ order: 80
12
+ owner:
13
+ pr:
14
+ title: The eval corpus is 96&times; smaller than a real install, and the floors describe the small one
15
+ ---
16
+ <b>The required <code>eval</code> gate measures a catalogue almost nobody has.</b>
17
+ <code>tests/eval/taps.txt</code> pins 20 registries resolving to <b>743</b> entries. A real install
18
+ that has run <code>boost tap</code> a few times is far bigger &mdash; the machine this was measured
19
+ on carries <b>71,655</b> entries across 77 taps, <b>96&times;</b> larger.
20
+
21
+ <b>The gap changes the answer, not just the margin.</b> Over the same 50 natural-language golden
22
+ queries, BM25 scores <code>hit@1</code> <b>0.340</b> on the pinned corpus (published in
23
+ <code>#373</code>) and <b>0.040</b> on the 71,655-entry one. Both numbers are correct; they are
24
+ measurements of different things. The targets have not gone missing &mdash; all 50 are present, and
25
+ spot-checking puts them at rank <b>7</b>, <b>8</b>, <b>38</b> and <b>163</b> rather than rank 1.
26
+ What changed is the number of plausible distractors competing for the top slot.
27
+
28
+ <b>Why this matters more than a number moving.</b> The <code>eval</code> gate floors BM25 recall@k
29
+ at 0.85 and passes with wide margin, which reads as &ldquo;retrieval is healthy&rdquo;. It is
30
+ healthy <em>at 743 entries</em>. Every retrieval decision validated against that corpus &mdash;
31
+ blend weights, pool depths, whether a reranker earns its keep &mdash; is being validated at a scale
32
+ users leave behind after their third tap. The near-duplicate card predicted exactly this shape when
33
+ it warned the lift may <em>shrink</em> toward 50k rather than hold; this is that warning arriving
34
+ with a number attached.
35
+
36
+ <b>What is not being proposed.</b> Not lowering the floor, and not making the corpus enormous:
37
+ <code>ensure_eval_corpus.sh</code> already taps 20 repos over the network inside the
38
+ <code>lint</code> job, and a 77-tap corpus would make the required gate slow and flaky. The useful
39
+ shape is probably a <b>second, larger tier</b> &mdash; scheduled rather than required, floored on
40
+ its own baseline &mdash; so the small corpus keeps gating every PR cheaply while the large one
41
+ catches the scale effects the small one structurally cannot. Measuring <em>where</em> between 743
42
+ and 71,655 the metrics fall off would tell you how large that tier needs to be, and is a smaller
43
+ first step than building it.
44
+
45
+ <b>Provenance:</b> found while running the spike in
46
+ [[keyless-dense-tier-local-static-embeddings]], where the first sign was BM25 scoring 0.040 in a
47
+ harness that had to be checked for a bug before the number could be believed.
@@ -7,7 +7,7 @@ category: Search · Retrieval
7
7
  complexity: L
8
8
  impact: High
9
9
  wow: 5
10
- note: semantic search with no key, no billing, no deps
10
+ note: spike done: the perf claims were 6-22x conservative, but rerank added +0 at real scale
11
11
  order: 73
12
12
  owner:
13
13
  pr:
@@ -77,3 +77,48 @@ that holds it is a difference of more than an order of magnitude on the doc side
77
77
  the cost that makes prebuilt shards mandatory today. Worth measuring the model2vec path directly
78
78
  before committing &mdash; but the gap it claims to close is now a measured number rather than an
79
79
  estimate.
80
+
81
+ <b>Spike done &mdash; the prerequisites this card set have all shipped, so the measurement it asked
82
+ for was finally runnable.</b> It says &ldquo;do not ship before the eval and dedup items&rdquo;;
83
+ dedup landed in <code>#370</code>, the index format in <code>#367</code>/<code>#371</code>, the
84
+ published eval in <code>#373</code>. What follows is <code>potion-retrieval-32M</code> (MIT, 63,091
85
+ &times; 512 F32 lookup table &mdash; confirmed a single tensor, no transformer) driven by a
86
+ hand-written pure-stdlib loader: WordPiece &rarr; gather rows &rarr; mean-pool &rarr; L2, mmap'd,
87
+ no numpy.
88
+
89
+ <b>The two unverified performance claims were not just right, they were conservative.</b> Query
90
+ embedding measured <b>0.16&nbsp;ms</b> against the card's <code>~1&nbsp;ms</code>. Document
91
+ embedding measured <b>1.34&nbsp;ms</b> on a synthetic 105-token doc and <b>3.27&nbsp;ms</b> on 300
92
+ real catalogue entries (median 61 tokens), against the card's <code>~29&nbsp;ms</code>.
93
+
94
+ <b>That reverses one of this card's design arguments.</b> The doc-side cost was the reason prebuilt
95
+ artifacts looked mandatory: &ldquo;29&nbsp;ms/doc in pure Python is ~24&nbsp;min for 50k
96
+ single-core&rdquo;. At the measured 3.27&nbsp;ms it is <b>2.7&nbsp;min</b> &mdash; roughly the time
97
+ a first <code>boost tap --defaults</code> already takes. Local embedding is therefore viable on the
98
+ user's own machine, and shipped shards become a genuine optimisation rather than a requirement. (Not
99
+ to be confused with the ONNX <code>bge-small</code> path measured at ~1.2&nbsp;s/chunk in
100
+ <code>keyless-semantic-search-for-everyone</code>; that number stands, and the gap between them
101
+ <em>is</em> the case for the static model.)
102
+
103
+ <b>But reranking bought nothing at real scale, which is the result that matters.</b> Over the 50
104
+ natural-language golden queries against a real <b>71,655-entry</b> catalogue, reranking BM25's
105
+ top-200 by cosine scored <code>hit@1</code> <b>2/50</b> &mdash; identical to BM25's own
106
+ <b>2/50</b>, a net change of <b>+0 queries</b> where this card's own statistics note says 6 net
107
+ queries is the smallest win reaching p&lt;0.05. On two hand-checked pairs the ordering was right but
108
+ the margin was thin (related 0.154 vs unrelated 0.097).
109
+
110
+ <b>Stated limits, because this does not settle the question.</b> The document vector was built from
111
+ <code>name + description</code> truncated to 1,500 characters, not the full body the real dense path
112
+ indexes, so this measures a weaker representation than the one being proposed. No blend was tried
113
+ &mdash; pure rerank, no <code>w_dense</code> &mdash; and this card explicitly asks for a held-out
114
+ blend weight and McNemar. What it does establish is that the <em>cheap</em> version of the idea does
115
+ not pay for itself, so the remaining work is representation and blending, not inference speed.
116
+
117
+ <b>An unrelated finding fell out of it, and it is the more important one.</b> BM25 scored
118
+ <code>hit@1</code> <b>0.040</b> here against the <b>0.340</b> published in <code>#373</code>. Both
119
+ are correct: the published figure is measured over the pinned 6-tap eval corpus of <b>743</b>
120
+ entries, and this run used a real 77-tap install &mdash; <b>96&times; larger</b>. Golden targets are
121
+ all present and rank 7th, 8th, 38th, 163rd rather than 1st. The eval corpus is not a scale model of
122
+ a real install, and the gate's floors describe a catalogue two orders of magnitude smaller than the
123
+ one users have. Tracked separately in [[eval-corpus-is-96x-smaller-than-a-real-install]].
124
+