boost-skill-cli 1.0.332__tar.gz → 1.0.334__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 (578) hide show
  1. {boost_skill_cli-1.0.332/boost_skill_cli.egg-info → boost_skill_cli-1.0.334}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/discovery.py +42 -1
  4. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/dense.py +111 -0
  5. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/rag.py +20 -4
  6. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  7. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  8. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/commands.html +6 -4
  9. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +28 -0
  10. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +25 -0
  11. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap.html +55 -2
  12. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_discovery.py +60 -0
  13. boost_skill_cli-1.0.334/tests/unit/test_dense_shards.py +242 -0
  14. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.gitattributes +0 -0
  15. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.gitignore +0 -0
  16. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.gitleaks.toml +0 -0
  17. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.htmlvalidate.json +0 -0
  18. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.lighthouserc.json +0 -0
  19. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.lycheeignore +0 -0
  20. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.markdownlint-cli2.jsonc +0 -0
  21. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.pre-commit-config.yaml +0 -0
  22. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.stylelintrc.json +0 -0
  23. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.vale/styles/boost/Terminology.yml +0 -0
  24. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  25. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/.vale.ini +0 -0
  26. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/CLAUDE.md +0 -0
  27. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/CODE_OF_CONDUCT.md +0 -0
  28. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/CONTRIBUTING.md +0 -0
  29. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/LICENSE +0 -0
  30. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/MANIFEST.in +0 -0
  31. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/Makefile +0 -0
  32. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/README.md +0 -0
  33. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/SECURITY.md +0 -0
  34. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost +0 -0
  35. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/__init__.py +0 -0
  36. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/__main__.py +0 -0
  37. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/cli.py +0 -0
  38. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/cliparse.py +0 -0
  39. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/__init__.py +0 -0
  40. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/_common.py +0 -0
  41. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/bmad.py +0 -0
  42. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/configuration.py +0 -0
  43. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/hooks.py +0 -0
  44. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/info.py +0 -0
  45. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/intelligence.py +0 -0
  46. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/pkg.py +0 -0
  47. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/quality.py +0 -0
  48. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/run.py +0 -0
  49. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/safety.py +0 -0
  50. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/taps.py +0 -0
  51. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/commands/team.py +0 -0
  52. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/__init__.py +0 -0
  53. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/adapters.py +0 -0
  54. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/agents.py +0 -0
  55. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/ai.py +0 -0
  56. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/capabilities.py +0 -0
  57. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/catalog.py +0 -0
  58. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/claude_settings.py +0 -0
  59. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/config.py +0 -0
  60. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/ed25519.py +0 -0
  61. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/embed.py +0 -0
  62. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/faithfulness.py +0 -0
  63. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/frontmatter.py +0 -0
  64. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/gitutil.py +0 -0
  65. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/imperative.py +0 -0
  66. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/injectscan.py +0 -0
  67. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/installscan.py +0 -0
  68. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/integrity.py +0 -0
  69. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/journal.py +0 -0
  70. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/localembed.py +0 -0
  71. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/lockfile.py +0 -0
  72. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/logs.py +0 -0
  73. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/mcp.py +0 -0
  74. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/mcpdecl.py +0 -0
  75. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/mcphost.py +0 -0
  76. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/minisign.py +0 -0
  77. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/nethttp.py +0 -0
  78. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/output.py +0 -0
  79. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/paths.py +0 -0
  80. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/policy.py +0 -0
  81. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/projectlock.py +0 -0
  82. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/provenance.py +0 -0
  83. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/registry.py +0 -0
  84. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/resolve.py +0 -0
  85. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/rules.py +0 -0
  86. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/scopes.py +0 -0
  87. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/secretscan.py +0 -0
  88. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/selfupdate.py +0 -0
  89. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/serve.py +0 -0
  90. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/stackprobe.py +0 -0
  91. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/staleness.py +0 -0
  92. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/store.py +0 -0
  93. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/trustaudit.py +0 -0
  94. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/typosquat.py +0 -0
  95. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/updatediff.py +0 -0
  96. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/util.py +0 -0
  97. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/core/workflows.py +0 -0
  98. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/data/registries.json +0 -0
  99. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/errors.py +0 -0
  100. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_cli/spin.py +0 -0
  101. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  102. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  103. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_skill_cli.egg-info/requires.txt +0 -0
  104. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/boost_skill_cli.egg-info/top_level.txt +0 -0
  105. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/codecov.yml +0 -0
  106. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/.claude/settings.local.json +0 -0
  107. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/DEBUGGING.md +0 -0
  108. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/adapters.html +0 -0
  109. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/architecture/README.md +0 -0
  110. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/architecture/c4-components-core.md +0 -0
  111. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/architecture/c4-containers.md +0 -0
  112. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/architecture/c4-context.md +0 -0
  113. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/architecture/c4-dynamic-install.md +0 -0
  114. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/gifs/distill.gif +0 -0
  115. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/gifs/doctor.gif +0 -0
  116. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/gifs/explain.gif +0 -0
  117. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/gifs/hooks.gif +0 -0
  118. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/gifs/install.gif +0 -0
  119. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/gifs/pulse.gif +0 -0
  120. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/gifs/search.gif +0 -0
  121. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/gifs/tap.gif +0 -0
  122. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/tapes/distill.tape +0 -0
  123. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/tapes/doctor.tape +0 -0
  124. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/tapes/explain.tape +0 -0
  125. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/tapes/hooks.tape +0 -0
  126. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/tapes/install.tape +0 -0
  127. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/tapes/pulse.tape +0 -0
  128. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/tapes/search.tape +0 -0
  129. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel/tapes/tap.tape +0 -0
  130. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/carousel.html +0 -0
  131. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/demo.gif +0 -0
  132. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/demo.tape +0 -0
  133. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/design-roadmap.html +0 -0
  134. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/eval.html +0 -0
  135. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/index.html +0 -0
  136. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/mcp-hub.html +0 -0
  137. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/rag-architecture.md +0 -0
  138. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D01.md +0 -0
  139. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D02.md +0 -0
  140. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D03.md +0 -0
  141. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D04.md +0 -0
  142. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D05.md +0 -0
  143. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D06.md +0 -0
  144. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D07.md +0 -0
  145. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D08.md +0 -0
  146. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D09.md +0 -0
  147. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D10.md +0 -0
  148. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D11.md +0 -0
  149. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D12.md +0 -0
  150. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D13.md +0 -0
  151. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D14.md +0 -0
  152. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D15.md +0 -0
  153. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D16.md +0 -0
  154. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D17.md +0 -0
  155. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D18.md +0 -0
  156. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D19.md +0 -0
  157. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D20.md +0 -0
  158. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D21.md +0 -0
  159. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D22.md +0 -0
  160. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D23.md +0 -0
  161. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D24.md +0 -0
  162. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D25.md +0 -0
  163. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/BOOST-D26.md +0 -0
  164. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  165. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  166. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  167. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  168. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  169. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  170. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  171. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  172. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  173. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  174. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  175. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  176. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  177. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  178. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  179. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  180. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  181. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  182. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  183. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  184. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  185. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  186. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/command-carousel-page.md +0 -0
  187. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  188. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  189. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  190. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  191. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  192. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  193. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  194. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  195. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  196. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  197. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  198. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  199. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  200. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  201. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  202. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  203. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  204. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  205. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  206. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  207. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  208. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  209. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  210. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  211. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  212. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  213. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  214. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  215. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  216. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/github-community-health-files.md +0 -0
  217. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  218. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  219. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  220. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  221. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  222. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  223. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  224. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  225. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  226. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  227. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  228. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  229. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  230. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  231. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  232. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  233. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  234. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  235. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  236. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  237. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  238. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  239. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  240. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  241. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  242. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  243. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  244. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  245. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  246. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  247. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  248. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  249. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  250. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  251. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  252. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  253. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  254. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  255. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  256. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  257. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  258. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  259. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  260. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  261. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  262. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  263. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  264. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  265. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  266. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  267. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  268. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  269. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  270. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  271. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  272. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  273. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  274. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  275. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  276. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  277. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  278. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  279. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  280. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  281. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  282. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  283. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  284. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  285. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  286. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  287. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  288. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  289. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  290. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  291. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  292. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  293. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  294. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  295. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  296. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  297. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  298. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  299. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  300. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  301. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  302. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  303. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  304. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  305. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  306. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  307. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  308. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  309. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  310. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  311. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  312. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  313. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  314. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  315. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  316. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  317. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  318. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  319. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  320. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  321. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  322. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  323. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  324. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  325. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  326. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  327. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  328. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  329. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  330. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  331. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  332. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  333. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  334. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  335. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  336. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  337. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  338. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  339. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  340. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  341. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  342. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  343. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  344. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  345. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  346. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  347. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  348. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  349. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/workspace-scope-install.md +0 -0
  350. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  351. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/eslint.config.mjs +0 -0
  352. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/evals/README.md +0 -0
  353. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/evals/__init__.py +0 -0
  354. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/evals/baseline.json +0 -0
  355. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/evals/faithfulness.py +0 -0
  356. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/evals/golden_set.json +0 -0
  357. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/evals/make_corpus.py +0 -0
  358. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/evals/make_golden.py +0 -0
  359. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/evals/metrics.py +0 -0
  360. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/evals/run_evals.py +0 -0
  361. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/examples/README.md +0 -0
  362. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/examples/adapt-demo.sh +0 -0
  363. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/examples/boost-run-prototype.sh +0 -0
  364. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/index.html +0 -0
  365. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/noxfile.py +0 -0
  366. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/pyproject.toml +0 -0
  367. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/coverage-tools.in +0 -0
  368. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/coverage-tools.txt +0 -0
  369. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/lint-tools.in +0 -0
  370. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/lint-tools.txt +0 -0
  371. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/mutation-tools.in +0 -0
  372. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/mutation-tools.txt +0 -0
  373. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/platform-pins.lock +0 -0
  374. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/release-tools.in +0 -0
  375. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/release-tools.txt +0 -0
  376. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/test-tools.in +0 -0
  377. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/requirements/test-tools.txt +0 -0
  378. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/a11y_check.py +0 -0
  379. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/bench_cli.sh +0 -0
  380. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/build_command_reference.py +0 -0
  381. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/build_registries.py +0 -0
  382. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/build_roadmap.py +0 -0
  383. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/check_anchors.py +0 -0
  384. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/check_licenses.py +0 -0
  385. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/check_required_checks.py +0 -0
  386. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/ensure_eval_corpus.sh +0 -0
  387. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/eval_explain.py +0 -0
  388. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/eval_gate.py +0 -0
  389. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/eval_recommend.py +0 -0
  390. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/eval_retrieval.py +0 -0
  391. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/eval_stats_summary.py +0 -0
  392. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/import_budget.py +0 -0
  393. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/lock_toolchain.py +0 -0
  394. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/mutation_gate.py +0 -0
  395. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/mutation_shards.py +0 -0
  396. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/mutation_weights.json +0 -0
  397. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/perf_gate.py +0 -0
  398. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/post_deploy_smoke.py +0 -0
  399. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/release_guard.py +0 -0
  400. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/scripts/release_preflight.py +0 -0
  401. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/setup.cfg +0 -0
  402. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/sonar-project.properties +0 -0
  403. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/style/README.md +0 -0
  404. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/style/boost.css +0 -0
  405. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/style/boost.js +0 -0
  406. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/style/demo.html +0 -0
  407. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/adapt.feature +0 -0
  408. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/browse.feature +0 -0
  409. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/count.feature +0 -0
  410. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/discover.feature +0 -0
  411. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/doctor.feature +0 -0
  412. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/environment.py +0 -0
  413. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/explain.feature +0 -0
  414. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/index.feature +0 -0
  415. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/install.feature +0 -0
  416. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/list.feature +0 -0
  417. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/mcp.feature +0 -0
  418. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/search.feature +0 -0
  419. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/steps/cli_steps.py +0 -0
  420. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/steps/discovery_steps.py +0 -0
  421. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/steps/mcp_steps.py +0 -0
  422. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/bdd/features/steps/quality_steps.py +0 -0
  423. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/conftest.py +0 -0
  424. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/eval/baseline.json +0 -0
  425. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/eval/explain.jsonl +0 -0
  426. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/eval/golden-natural.jsonl +0 -0
  427. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/eval/golden.jsonl +0 -0
  428. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/eval/recommend.jsonl +0 -0
  429. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/eval/taps.txt +0 -0
  430. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_capabilities_policy.py +0 -0
  431. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_adapt.py +0 -0
  432. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_bmad.py +0 -0
  433. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_configuration.py +0 -0
  434. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_hooks.py +0 -0
  435. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_info.py +0 -0
  436. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_intelligence.py +0 -0
  437. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_pkg.py +0 -0
  438. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_quality.py +0 -0
  439. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_taps.py +0 -0
  440. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_cli_team.py +0 -0
  441. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_everyday_loop.py +0 -0
  442. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_integrity_enforce.py +0 -0
  443. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_property_parsers.py +0 -0
  444. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_run.py +0 -0
  445. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_tap_signing.py +0 -0
  446. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/functional/test_workspace_scope.py +0 -0
  447. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/README.md +0 -0
  448. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  449. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  450. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  451. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  452. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  453. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  454. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  455. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  456. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  457. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  458. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  459. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  460. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  461. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  462. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  463. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  464. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  465. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  466. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  467. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  468. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/fuzz_frontmatter.py +0 -0
  469. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/fuzz/fuzz_registry.py +0 -0
  470. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/make_fixture.py +0 -0
  471. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/perf/test_benchmarks.py +0 -0
  472. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/smoke.sh +0 -0
  473. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_a11y_check.py +0 -0
  474. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_adapters.py +0 -0
  475. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_adapters_multi.py +0 -0
  476. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_adapters_runner.py +0 -0
  477. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_agents.py +0 -0
  478. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_ai.py +0 -0
  479. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_capabilities.py +0 -0
  480. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_catalog.py +0 -0
  481. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_check_anchors.py +0 -0
  482. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_check_licenses.py +0 -0
  483. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_claude_settings.py +0 -0
  484. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_cliparse.py +0 -0
  485. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_codeql_analysis_key.py +0 -0
  486. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_command_reference_fresh.py +0 -0
  487. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_community_health_files.py +0 -0
  488. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_config.py +0 -0
  489. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_content_dedupe.py +0 -0
  490. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_dedup_trust.py +0 -0
  491. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_dense.py +0 -0
  492. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_dense_fallback.py +0 -0
  493. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_dense_fix_hint.py +0 -0
  494. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_dense_status.py +0 -0
  495. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_dependabot_config.py +0 -0
  496. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_docs_pages_linked.py +0 -0
  497. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_docsite_chrome.py +0 -0
  498. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_ed25519.py +0 -0
  499. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_embed.py +0 -0
  500. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_embed_local.py +0 -0
  501. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_entry_key.py +0 -0
  502. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_errors_and_cli_table.py +0 -0
  503. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_eval_baseline.py +0 -0
  504. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_eval_faithfulness.py +0 -0
  505. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_eval_gate.py +0 -0
  506. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_eval_metrics.py +0 -0
  507. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_eval_stats_summary.py +0 -0
  508. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_faithfulness.py +0 -0
  509. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_frontmatter.py +0 -0
  510. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_fuzz_targets.py +0 -0
  511. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_gitleaks_config.py +0 -0
  512. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_gitutil.py +0 -0
  513. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_imperative.py +0 -0
  514. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_import_budget.py +0 -0
  515. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_injectscan.py +0 -0
  516. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_installscan.py +0 -0
  517. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_integrity.py +0 -0
  518. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_journal.py +0 -0
  519. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_localembed.py +0 -0
  520. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_lockfile.py +0 -0
  521. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_logs.py +0 -0
  522. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_marketing_counts.py +0 -0
  523. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_mcp.py +0 -0
  524. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_mcp_install_scan.py +0 -0
  525. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_mcpdecl.py +0 -0
  526. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_mcphost.py +0 -0
  527. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_minisign.py +0 -0
  528. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_mutation_hardening.py +0 -0
  529. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_mutation_shards.py +0 -0
  530. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_mutation_subfile_shards.py +0 -0
  531. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_mutmut_source_paths.py +0 -0
  532. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_nethttp.py +0 -0
  533. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_output.py +0 -0
  534. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_paths.py +0 -0
  535. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_perf_gate.py +0 -0
  536. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_pkg_confusions.py +0 -0
  537. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_pkg_injection.py +0 -0
  538. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_pkg_secrets.py +0 -0
  539. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_platform_pins.py +0 -0
  540. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_policy.py +0 -0
  541. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_post_deploy_smoke.py +0 -0
  542. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_project_mcp_sidecar.py +0 -0
  543. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_projectlock.py +0 -0
  544. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_provenance.py +0 -0
  545. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_rag.py +0 -0
  546. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_rag_fusion.py +0 -0
  547. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_registries_fresh.py +0 -0
  548. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_registry.py +0 -0
  549. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_registry_categories.py +0 -0
  550. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_release_guard.py +0 -0
  551. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_release_preflight.py +0 -0
  552. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_required_checks.py +0 -0
  553. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_resolve.py +0 -0
  554. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_roadmap_fresh.py +0 -0
  555. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_rules.py +0 -0
  556. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_scopes.py +0 -0
  557. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_secretscan.py +0 -0
  558. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_selfupdate.py +0 -0
  559. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_serve.py +0 -0
  560. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_spin.py +0 -0
  561. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_stackprobe.py +0 -0
  562. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_staleness.py +0 -0
  563. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_store.py +0 -0
  564. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_token_parity.py +0 -0
  565. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_toolchain_lock.py +0 -0
  566. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_trustaudit.py +0 -0
  567. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_typosquat.py +0 -0
  568. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_updatediff.py +0 -0
  569. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_util.py +0 -0
  570. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_version.py +0 -0
  571. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_workflow_concurrency.py +0 -0
  572. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_workflow_timeouts.py +0 -0
  573. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/unit/test_workflows.py +0 -0
  574. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/visual/a11y_check.mjs +0 -0
  575. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/visual/console_check.mjs +0 -0
  576. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/visual/package-lock.json +0 -0
  577. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/tests/visual/package.json +0 -0
  578. {boost_skill_cli-1.0.332 → boost_skill_cli-1.0.334}/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.332
3
+ Version: 1.0.334
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.332'
22
- __version_tuple__ = version_tuple = (1, 0, 332)
21
+ __version__ = version = '1.0.334'
22
+ __version_tuple__ = version_tuple = (1, 0, 334)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -194,6 +194,38 @@ def _hint_semantic_search(engine: str) -> None:
194
194
  out.info(out.role(line, "muted"))
195
195
 
196
196
 
197
+ def _shard_io(args) -> int:
198
+ """`--export-shard` / `--import-shard`, the two halves of a prebuilt shard.
199
+
200
+ Embedding is ~1.2 s/chunk on CPU — 74 minutes for 743 entries — so without
201
+ a way to move vectors between machines the keyless tier is available in
202
+ principle and unreachable in practice. Import validates rather than trusts;
203
+ see `dense.import_shard` for why a mismatched shard must be refused instead
204
+ of merged.
205
+ """
206
+ from ..core import dense
207
+ if args.export_shard:
208
+ shard = dense.export_shard(args.export_shard)
209
+ if not shard.get("chunks"):
210
+ raise BoostError("no vectors for %r" % args.export_shard,
211
+ hint="build them first with `boost reindex --dense`")
212
+ print(json.dumps(shard))
213
+ return 0
214
+ path = Path(args.import_shard)
215
+ try:
216
+ shard = json.loads(path.read_text(encoding="utf-8"))
217
+ except (OSError, json.JSONDecodeError) as exc:
218
+ raise BoostError("cannot read shard %s: %s" % (path, exc)) from exc
219
+ tap = str(shard.get("tap") or "")
220
+ commit = rag._tap_commits().get(tap.replace("/", "__"), "")
221
+ ok, reason = dense.import_shard(shard, commit=commit)
222
+ if not ok:
223
+ raise BoostError("shard refused — %s" % reason,
224
+ hint="`boost reindex --dense` embeds it locally instead")
225
+ out.ok("%s: %s" % (tap, reason))
226
+ return 0
227
+
228
+
197
229
  def cmd_reindex(argv):
198
230
  """Build/refresh the full-content (RAG) search index over tapped items."""
199
231
  p = cliparse.parser(
@@ -203,10 +235,19 @@ def cmd_reindex(argv):
203
235
  help="reindex every tap, ignoring cached commits")
204
236
  p.add_argument("--dense", action="store_true",
205
237
  help="also embed chunks into the opt-in dense vector store "
206
- "(needs the `rag` extra and an embeddings API key)")
238
+ "(needs the `rag` extra; no API key required)")
239
+ p.add_argument("--export-shard", metavar="TAP",
240
+ help="write TAP's prebuilt vectors to stdout as JSON, for "
241
+ "publishing so others need not re-embed them")
242
+ p.add_argument("--import-shard", metavar="FILE",
243
+ help="merge a prebuilt vector shard, skipping the embed "
244
+ "cost; refused unless it matches this store's backend "
245
+ "and the tap's current commit")
207
246
  p.add_argument("--json", action="store_true", dest="as_json",
208
247
  help="machine-readable output")
209
248
  args = p.parse_args(argv)
249
+ if args.export_shard or args.import_shard:
250
+ return _shard_io(args)
210
251
  if not registry.list_taps():
211
252
  raise BoostError("no taps configured — nothing to index",
212
253
  hint="add the recommended registries with `boost tap --defaults`")
@@ -12,6 +12,7 @@ are the expensive step, so an unchanged tap is never re-embedded.
12
12
  """
13
13
  from __future__ import annotations
14
14
 
15
+ import base64
15
16
  import json
16
17
  import sqlite3
17
18
  from pathlib import Path
@@ -345,6 +346,116 @@ def build(entries: Optional[List[dict]] = None,
345
346
  con.close()
346
347
 
347
348
 
349
+ def export_shard(tap: str) -> dict:
350
+ """One tap's vectors plus the provenance needed to validate them later.
351
+
352
+ Embedding is the expensive half of the keyless tier — measured at ~1.2 s per
353
+ chunk on CPU, so 74 minutes for 743 entries — while querying is milliseconds.
354
+ A shard lets that cost be paid once in CI and downloaded by everyone else.
355
+
356
+ The provenance fields are not decoration: vectors are only comparable inside
357
+ the embedding space that produced them, so provider/model/dim have to travel
358
+ with the rows, and the registry commit has to travel too or a stale shard
359
+ would be indistinguishable from a current one.
360
+ """
361
+ # Plain sqlite3, NOT _connect: exporting reads `chunks`, `meta` and the
362
+ # stored embedding blobs, all ordinary tables. Routing through _connect
363
+ # would make export impossible without the sqlite-vec extension — the same
364
+ # trap `_recorded_meta` documents — and a machine that built vectors and
365
+ # then dropped the extra is exactly the one whose shard is worth having.
366
+ if not db_path().exists():
367
+ return {"tap": tap, "chunks": []}
368
+ try:
369
+ con = sqlite3.connect(str(db_path()))
370
+ except sqlite3.Error:
371
+ return {"tap": tap, "chunks": []}
372
+ try:
373
+ meta = _read_meta(con)
374
+ commits = meta.get("commits")
375
+ commit = ""
376
+ if isinstance(commits, dict):
377
+ commit = str(commits.get(tap.replace("/", "__")) or "")
378
+ chunks = []
379
+ for row in con.execute(
380
+ "SELECT c.name, c.tap, c.path, c.kind, c.cix, c.snip, v.embedding "
381
+ "FROM chunks c JOIN vec_chunks v ON v.rowid = c.id "
382
+ "WHERE c.tap = ? ORDER BY c.id", (tap,)):
383
+ name, ctap, path, kind, cix, snip, emb = row
384
+ chunks.append({
385
+ "name": name, "tap": ctap, "path": path, "kind": kind,
386
+ "cix": cix, "snip": snip,
387
+ # base64 so the shard is plain JSON and can be published as a
388
+ # release artifact without a binary format of its own.
389
+ "embedding": base64.b64encode(bytes(emb)).decode("ascii"),
390
+ })
391
+ return {"tap": tap, "commit": commit,
392
+ "provider": meta.get("provider"), "model": meta.get("model"),
393
+ "dim": meta.get("dim"), "version": INDEX_VERSION,
394
+ "chunks": chunks}
395
+ except sqlite3.Error:
396
+ return {"tap": tap, "chunks": []}
397
+ finally:
398
+ con.close()
399
+
400
+
401
+ def import_shard(shard: dict, commit: str) -> Tuple[bool, str]:
402
+ """Merge a prebuilt shard into this machine's store. ``(ok, reason)``.
403
+
404
+ Refuses rather than degrades. A vector is only meaningful against others
405
+ from the same embedding space, so a shard from a different provider, model
406
+ or dimension cannot be mixed in: doing so would not raise, it would quietly
407
+ return nonsense rankings, which is the worse failure. A shard whose commit
408
+ does not match the tap as it stands now is refused for a different reason —
409
+ accepting it would let `build()` mark that tap "reused" and never re-embed
410
+ it, pinning the user to stale vectors indefinitely.
411
+ """
412
+ for field in ("provider", "model", "dim"):
413
+ if shard.get(field) in (None, ""):
414
+ return False, "shard is missing %s" % field
415
+ if str(shard.get("commit") or "") != commit:
416
+ return False, ("commit mismatch: shard %r, tap %r"
417
+ % (shard.get("commit"), commit))
418
+ con = _connect()
419
+ if con is None:
420
+ return False, "no vector backend available"
421
+ try:
422
+ meta = _read_meta(con)
423
+ # An empty store has no opinion yet, so it adopts the shard's backend.
424
+ if meta.get("provider"):
425
+ for field in ("provider", "model", "dim"):
426
+ if meta.get(field) != shard.get(field):
427
+ return False, ("%s mismatch: store %r, shard %r"
428
+ % (field, meta.get(field), shard.get(field)))
429
+ dim = int(shard["dim"])
430
+ _ensure_schema(con, dim)
431
+ # Replace, never append: re-importing must not double a tap's rows.
432
+ _delete_taps(con, [str(shard.get("tap") or "")])
433
+ mod = _load()
434
+ for c in shard.get("chunks") or []:
435
+ cur = con.execute(
436
+ "INSERT INTO chunks (name, tap, path, kind, cix, snip) "
437
+ "VALUES (?, ?, ?, ?, ?, ?)",
438
+ (c.get("name"), c.get("tap"), c.get("path"), c.get("kind"),
439
+ c.get("cix"), c.get("snip")))
440
+ blob = base64.b64decode(c["embedding"])
441
+ con.execute("INSERT INTO vec_chunks (rowid, embedding) VALUES (?, ?)",
442
+ (cur.lastrowid, blob))
443
+ commits = meta.get("commits")
444
+ commits = dict(commits) if isinstance(commits, dict) else {}
445
+ commits[str(shard.get("tap") or "").replace("/", "__")] = commit
446
+ _write_meta(con, {"version": INDEX_VERSION,
447
+ "provider": shard.get("provider"),
448
+ "model": shard.get("model"), "dim": dim,
449
+ "commits": commits})
450
+ con.commit()
451
+ _ = mod # extension loaded by _connect; kept for symmetry
452
+ return True, "imported %d chunks" % len(shard.get("chunks") or [])
453
+ except sqlite3.Error as exc:
454
+ return False, "store error: %s" % exc
455
+ finally:
456
+ con.close()
457
+
458
+
348
459
  def _indexed_taps(con: sqlite3.Connection) -> set:
349
460
  """Every tap name the vector index currently holds chunks for."""
350
461
  try:
@@ -219,17 +219,33 @@ def _make_docs(entries: List[dict], tap_paths: Dict[str, Path]) -> List[dict]:
219
219
 
220
220
 
221
221
  def _postings_to_doc_tf(raw: dict) -> Dict[int, Dict[str, int]]:
222
- """Invert persisted postings back to per-doc term frequencies."""
222
+ """Invert persisted postings back to per-doc term frequencies.
223
+
224
+ Pure: it inverts whatever ``raw`` carries and reads nothing. An earlier
225
+ version fell back to the SQLite store with ``or``, which made a caller
226
+ passing ``{}`` silently receive tens of thousands of postings from the live
227
+ index — invisible in CI, where no store exists, and wrong everywhere else.
228
+ Callers that need the store now say so; see :func:`_kept_docs`.
229
+ """
223
230
  doc_tf: Dict[int, Dict[str, int]] = defaultdict(dict)
224
- for term, plist in (raw.get("postings") or _all_postings()).items():
231
+ for term, plist in (raw.get("postings") or {}).items():
225
232
  for doc_id, tf in plist:
226
233
  doc_tf[doc_id][term] = tf
227
234
  return doc_tf
228
235
 
229
236
 
230
237
  def _kept_docs(raw: dict, keep_safe: set) -> List[dict]:
231
- """Recover cached docs (with term freqs) for taps that did not change."""
232
- doc_tf = _postings_to_doc_tf(raw)
238
+ """Recover cached docs (with term freqs) for taps that did not change.
239
+
240
+ Term frequencies live in the SQLite postings store since they left the JSON
241
+ index, so an index without an inline ``postings`` key is normal rather than
242
+ empty — this is the caller that reaches for the store, explicitly.
243
+ """
244
+ # Key ABSENCE, not falsiness: an index carrying an explicit empty
245
+ # `postings` is stating it has none, and must not be answered from the
246
+ # store. Only an index with no such key predates the SQLite move.
247
+ doc_tf = _postings_to_doc_tf(
248
+ raw if "postings" in raw else {"postings": _all_postings()})
233
249
  return [{**meta, "tf": doc_tf.get(doc_id, {})}
234
250
  for doc_id, meta in enumerate(raw.get("docs", []))
235
251
  if meta["t"].replace("/", "__") in keep_safe]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.332
3
+ Version: 1.0.334
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -489,6 +489,7 @@ tests/unit/test_dedup_trust.py
489
489
  tests/unit/test_dense.py
490
490
  tests/unit/test_dense_fallback.py
491
491
  tests/unit/test_dense_fix_hint.py
492
+ tests/unit/test_dense_shards.py
492
493
  tests/unit/test_dense_status.py
493
494
  tests/unit/test_dependabot_config.py
494
495
  tests/unit/test_docs_pages_linked.py
@@ -117,7 +117,7 @@
117
117
  <div class="group" data-group="find">
118
118
  <div class="group-h">Find &amp; search</div>
119
119
  <a class="cmd-link" href="#cmd-search" data-search="search search skills across tap registries (ai-ranked) --smart --limit limit --json query">search</a>
120
- <a class="cmd-link" href="#cmd-reindex" data-search="reindex build/refresh the full-content search index build or refresh the full-content search index --force --dense --json">reindex</a>
120
+ <a class="cmd-link" href="#cmd-reindex" data-search="reindex build/refresh the full-content search index build or refresh the full-content search index --force --dense --export-shard tap --import-shard file --json">reindex</a>
121
121
  <a class="cmd-link" href="#cmd-discover" data-search="discover browse &amp; search the github-wide skill discovery index --limit limit --json query">discover</a>
122
122
  <a class="cmd-link" href="#cmd-recommend" data-search="recommend suggest skills based on your project&#x27;s tech stack --path path --limit limit --json">recommend</a>
123
123
  <a class="cmd-link" href="#cmd-browse" data-search="browse interactive full-screen tui with fuzzy search ">browse</a>
@@ -413,15 +413,17 @@
413
413
  <div class="arg"><code>--json</code><span>machine-readable output</span></div>
414
414
  </div>
415
415
  </section>
416
- <section class="cmd" id="cmd-reindex" data-search="reindex build/refresh the full-content search index build or refresh the full-content search index --force --dense --json">
416
+ <section class="cmd" id="cmd-reindex" data-search="reindex build/refresh the full-content search index build or refresh the full-content search index --force --dense --export-shard tap --import-shard file --json">
417
417
  <h3><span class="cname">reindex</span><span class="gtag">find</span></h3>
418
418
  <p class="summary">Build/refresh the full-content search index</p>
419
- <pre class="syn">boost reindex [--force] [--dense] [--json]</pre>
419
+ <pre class="syn">boost reindex [--force] [--dense] [--export-shard TAP] [--import-shard FILE] [--json]</pre>
420
420
  <p class="desc">Build or refresh the full-content search index</p>
421
421
  <div class="args-h">Options</div>
422
422
  <div class="args">
423
423
  <div class="arg"><code>--force</code><span>reindex every tap, ignoring cached commits</span></div>
424
- <div class="arg"><code>--dense</code><span>also embed chunks into the opt-in dense vector store (needs the `rag` extra and an embeddings API key)</span></div>
424
+ <div class="arg"><code>--dense</code><span>also embed chunks into the opt-in dense vector store (needs the `rag` extra; no API key required)</span></div>
425
+ <div class="arg"><code>--export-shard TAP</code><span>write TAP&#x27;s prebuilt vectors to stdout as JSON, for publishing so others need not re-embed them</span></div>
426
+ <div class="arg"><code>--import-shard FILE</code><span>merge a prebuilt vector shard, skipping the embed cost; refused unless it matches this store&#x27;s backend and the tap&#x27;s current commit</span></div>
425
427
  <div class="arg"><code>--json</code><span>machine-readable output</span></div>
426
428
  </div>
427
429
  </section>
@@ -60,3 +60,31 @@ runs fine locally (<code>npm ci</code> with <code>npm_config_cache</code> redire
60
60
  single-instance app: launching the bundle binary attaches to the running instance instead of starting
61
61
  an isolated one. Nothing to fix in the harness &mdash; it is why the reproduction loop belongs on a
62
62
  Linux runner (or against Chrome for Testing), not on a developer laptop with Chrome open.
63
+
64
+ <b>Cause found &mdash; and my earlier &ldquo;maybe axe is right about the contrast&rdquo; caveat was
65
+ wrong.</b> It is a harness defect, and the harness predicted it in a comment.
66
+
67
+ <code>a11y_check.mjs</code> loads each page over <code>file://</code> and passes
68
+ <code>--allow-file-access-from-files</code>, with this note: &ldquo;without this Chrome treats each
69
+ file as its own opaque origin and the stylesheet never applies, <em>which would make every contrast
70
+ result meaningless</em>.&rdquo; That is exactly what happens intermittently. Every failing element
71
+ resolves its colour from <code>var(--text-3)</code>, defined once in
72
+ <code>style/boost.css</code> and linked <em>relatively</em> (<code>../style/boost.css</code>).
73
+
74
+ The arithmetic settles it. The shipped token is <code>#767c96</code>, which is
75
+ <b>4.85:1 on <code>#07080f</code> &mdash; passing AA</b>, and it was already raised once from
76
+ <code>#676d86</code> (3.9:1) by <code>#243</code>. The colours axe reported &mdash;
77
+ <code>#505467</code> on <code>roadmap.html</code>, <code>#656a81</code> on <code>mcp-hub.html</code>
78
+ &mdash; <b>appear nowhere in this repository</b>. They are Chrome's unstyled fallbacks. So both
79
+ &ldquo;contrast failures&rdquo; were the same defect: the stylesheet silently not applying.
80
+
81
+ <b>The fix is therefore not a colour and not a settle delay.</b> Both would be treating a symptom.
82
+ The real options are to stop depending on a flag that intermittently fails &mdash; serve the docs
83
+ over a throwaway <code>http://</code> origin for the sweep, or inline the stylesheet into a temporary
84
+ copy &mdash; and, more importantly, to <b>fail loudly when it happens</b>: assert that a known token
85
+ resolves before running axe at all, so an unstyled page reports &ldquo;stylesheet did not load&rdquo;
86
+ rather than twenty plausible-looking contrast violations against colours that do not exist.
87
+
88
+ That guard matters more than the flake. Without it the sweep produces confident, specific,
89
+ <em>entirely wrong</em> findings &mdash; which is what sent me to check a token that had been correct
90
+ for months.
@@ -306,3 +306,28 @@ deltas.
306
306
  <b>Claim released.</b> Steps 1, 4 and 6 have shipped; steps 2, 3 and 5 are unowned and open. Step 2
307
307
  is the one to take next and it is better justified than when it was written: embedding measured at
308
308
  ~1.2 s/chunk locally, so prebuilt per-registry shards are a requirement rather than an optimisation.
309
+
310
+ <b>Step 2, the shard mechanism, is shipped.</b> <code>boost reindex --export-shard TAP</code> writes
311
+ one registry's vectors as JSON; <code>--import-shard FILE</code> merges them. Measured end to end on
312
+ the real store: exporting <code>anthropics/skills</code> gives <b>262 chunks in 0.63 MB</b>, and
313
+ importing it into a fresh <code>BOOST_HOME</code> takes <b>0.12 s</b> against roughly five minutes to
314
+ embed the same rows locally. That ratio is the whole point of the step.
315
+
316
+ <b>Import refuses rather than degrades.</b> A shard carries the provider, model, dimension and the
317
+ registry commit it was built from, and all four are checked. Mixing vectors from a different
318
+ embedding space would not raise &mdash; it would quietly return nonsense rankings, which is worse
319
+ than failing &mdash; and accepting a shard from a stale commit would let <code>build()</code> mark
320
+ that tap &ldquo;reused&rdquo; and never re-embed it, pinning the user to old vectors indefinitely.
321
+ Verified: a shard with a doctored commit is rejected with a message naming both hashes.
322
+
323
+ <b>What this does NOT remove: the query-side model download.</b> A shard eliminates the
324
+ <em>document</em> embedding cost, but a keyless user still needs the ~133&nbsp;MB local model to embed
325
+ their own <em>query</em>. Confirmed by importing into a fresh <code>BOOST_HOME</code>, where retrieval
326
+ returned zero hits until the model was present &mdash; <code>dense.status()</code> reported
327
+ <code>ready</code> the whole time, because the store genuinely was ready. The card's framing of
328
+ &ldquo;the only API-bound step is turning text into vectors&rdquo; is right, but that step runs on
329
+ both sides, and only the document half can be shipped ahead of time.
330
+
331
+ <b>Still open in step 2:</b> the CI workflow that publishes shards as release artifacts, and the
332
+ <code>boost tap</code> integration that fetches one automatically. Both are now plumbing on top of a
333
+ verified mechanism rather than open questions. Steps 3 and 5 are untouched.
@@ -893,7 +893,32 @@ deltas.
893
893
 
894
894
  <b>Claim released.</b> Steps 1, 4 and 6 have shipped; steps 2, 3 and 5 are unowned and open. Step 2
895
895
  is the one to take next and it is better justified than when it was written: embedding measured at
896
- ~1.2 s/chunk locally, so prebuilt per-registry shards are a requirement rather than an optimisation.</p>
896
+ ~1.2 s/chunk locally, so prebuilt per-registry shards are a requirement rather than an optimisation.
897
+
898
+ <b>Step 2, the shard mechanism, is shipped.</b> <code>boost reindex --export-shard TAP</code> writes
899
+ one registry's vectors as JSON; <code>--import-shard FILE</code> merges them. Measured end to end on
900
+ the real store: exporting <code>anthropics/skills</code> gives <b>262 chunks in 0.63 MB</b>, and
901
+ importing it into a fresh <code>BOOST_HOME</code> takes <b>0.12 s</b> against roughly five minutes to
902
+ embed the same rows locally. That ratio is the whole point of the step.
903
+
904
+ <b>Import refuses rather than degrades.</b> A shard carries the provider, model, dimension and the
905
+ registry commit it was built from, and all four are checked. Mixing vectors from a different
906
+ embedding space would not raise &mdash; it would quietly return nonsense rankings, which is worse
907
+ than failing &mdash; and accepting a shard from a stale commit would let <code>build()</code> mark
908
+ that tap &ldquo;reused&rdquo; and never re-embed it, pinning the user to old vectors indefinitely.
909
+ Verified: a shard with a doctored commit is rejected with a message naming both hashes.
910
+
911
+ <b>What this does NOT remove: the query-side model download.</b> A shard eliminates the
912
+ <em>document</em> embedding cost, but a keyless user still needs the ~133&nbsp;MB local model to embed
913
+ their own <em>query</em>. Confirmed by importing into a fresh <code>BOOST_HOME</code>, where retrieval
914
+ returned zero hits until the model was present &mdash; <code>dense.status()</code> reported
915
+ <code>ready</code> the whole time, because the store genuinely was ready. The card's framing of
916
+ &ldquo;the only API-bound step is turning text into vectors&rdquo; is right, but that step runs on
917
+ both sides, and only the document half can be shipped ahead of time.
918
+
919
+ <b>Still open in step 2:</b> the CI workflow that publishes shards as release artifacts, and the
920
+ <code>boost tap</code> integration that fetches one automatically. Both are now plumbing on top of a
921
+ verified mechanism rather than open questions. Steps 3 and 5 are untouched.</p>
897
922
  <div class="meta">
898
923
  <span class="m">Complexity <b>L</b></span>
899
924
  <span class="m hi">Impact <b>High</b></span>
@@ -1936,7 +1961,35 @@ runs fine locally (<code>npm ci</code> with <code>npm_config_cache</code> redire
1936
1961
  <em>newly created</em> <code>userDataDir</code> each time, because Chrome on macOS is a
1937
1962
  single-instance app: launching the bundle binary attaches to the running instance instead of starting
1938
1963
  an isolated one. Nothing to fix in the harness &mdash; it is why the reproduction loop belongs on a
1939
- Linux runner (or against Chrome for Testing), not on a developer laptop with Chrome open.</p>
1964
+ Linux runner (or against Chrome for Testing), not on a developer laptop with Chrome open.
1965
+
1966
+ <b>Cause found &mdash; and my earlier &ldquo;maybe axe is right about the contrast&rdquo; caveat was
1967
+ wrong.</b> It is a harness defect, and the harness predicted it in a comment.
1968
+
1969
+ <code>a11y_check.mjs</code> loads each page over <code>file://</code> and passes
1970
+ <code>--allow-file-access-from-files</code>, with this note: &ldquo;without this Chrome treats each
1971
+ file as its own opaque origin and the stylesheet never applies, <em>which would make every contrast
1972
+ result meaningless</em>.&rdquo; That is exactly what happens intermittently. Every failing element
1973
+ resolves its colour from <code>var(--text-3)</code>, defined once in
1974
+ <code>style/boost.css</code> and linked <em>relatively</em> (<code>../style/boost.css</code>).
1975
+
1976
+ The arithmetic settles it. The shipped token is <code>#767c96</code>, which is
1977
+ <b>4.85:1 on <code>#07080f</code> &mdash; passing AA</b>, and it was already raised once from
1978
+ <code>#676d86</code> (3.9:1) by <code>#243</code>. The colours axe reported &mdash;
1979
+ <code>#505467</code> on <code>roadmap.html</code>, <code>#656a81</code> on <code>mcp-hub.html</code>
1980
+ &mdash; <b>appear nowhere in this repository</b>. They are Chrome's unstyled fallbacks. So both
1981
+ &ldquo;contrast failures&rdquo; were the same defect: the stylesheet silently not applying.
1982
+
1983
+ <b>The fix is therefore not a colour and not a settle delay.</b> Both would be treating a symptom.
1984
+ The real options are to stop depending on a flag that intermittently fails &mdash; serve the docs
1985
+ over a throwaway <code>http://</code> origin for the sweep, or inline the stylesheet into a temporary
1986
+ copy &mdash; and, more importantly, to <b>fail loudly when it happens</b>: assert that a known token
1987
+ resolves before running axe at all, so an unstyled page reports &ldquo;stylesheet did not load&rdquo;
1988
+ rather than twenty plausible-looking contrast violations against colours that do not exist.
1989
+
1990
+ That guard matters more than the flake. Without it the sweep produces confident, specific,
1991
+ <em>entirely wrong</em> findings &mdash; which is what sent me to check a token that had been correct
1992
+ for months.</p>
1940
1993
  <div class="meta">
1941
1994
  <span class="m">Complexity <b>S</b></span>
1942
1995
  <span class="m">Impact <b>Med</b></span>
@@ -1226,3 +1226,63 @@ class TestSearchSemanticHint:
1226
1226
  boost("reindex")
1227
1227
  r = boost("search", "brainstorming")
1228
1228
  assert "semantic search is off" not in r.out
1229
+
1230
+
1231
+ class TestReindexShards:
1232
+ """`--export-shard` / `--import-shard`, the user-facing half of shards.
1233
+
1234
+ The engine is covered in tests/unit/test_dense_shards.py; this pins the CLI
1235
+ contract — exit codes, JSON on stdout, and that a refused shard reports why
1236
+ rather than half-importing.
1237
+ """
1238
+
1239
+ def test_exporting_a_tap_with_no_vectors_fails_with_a_hint(self, boost,
1240
+ tapped):
1241
+ r = boost("reindex", "--export-shard", "acme/skills", expect=1)
1242
+ assert "no vectors" in r.err
1243
+ assert "reindex --dense" in r.err # names the one next action
1244
+
1245
+ def test_export_writes_json_to_stdout(self, boost, tapped, monkeypatch):
1246
+ from boost_cli.core import dense
1247
+ monkeypatch.setattr(dense, "export_shard", lambda tap: {
1248
+ "tap": tap, "commit": "c1", "provider": "local", "model": "bge",
1249
+ "dim": 3, "chunks": [{"name": "a", "tap": tap, "path": "a/SKILL.md",
1250
+ "kind": "skill", "cix": 0, "snip": "s",
1251
+ "embedding": "AAAA"}]})
1252
+ r = boost("reindex", "--export-shard", "acme/skills")
1253
+ payload = json.loads(r.out) # must be parseable, not pretty
1254
+ assert payload["tap"] == "acme/skills"
1255
+ assert len(payload["chunks"]) == 1
1256
+
1257
+ def test_importing_a_missing_file_is_an_error(self, boost, tapped, tmp_path):
1258
+ r = boost("reindex", "--import-shard", str(tmp_path / "nope.json"),
1259
+ expect=1)
1260
+ assert "cannot read shard" in r.err
1261
+
1262
+ def test_importing_malformed_json_is_an_error(self, boost, tapped, tmp_path):
1263
+ bad = tmp_path / "bad.json"
1264
+ bad.write_text("{not json", encoding="utf-8")
1265
+ r = boost("reindex", "--import-shard", str(bad), expect=1)
1266
+ assert "cannot read shard" in r.err
1267
+
1268
+ def test_a_refused_shard_reports_the_reason(self, boost, tapped, tmp_path,
1269
+ monkeypatch):
1270
+ from boost_cli.core import dense
1271
+ monkeypatch.setattr(dense, "import_shard",
1272
+ lambda shard, commit: (False, "dim mismatch"))
1273
+ f = tmp_path / "s.json"
1274
+ f.write_text(json.dumps({"tap": "acme/skills"}), encoding="utf-8")
1275
+ r = boost("reindex", "--import-shard", str(f), expect=1)
1276
+ assert "dim mismatch" in r.err
1277
+ assert "reindex --dense" in r.err # the fallback that always works
1278
+
1279
+ def test_a_good_shard_reports_what_landed(self, boost, tapped, tmp_path,
1280
+ monkeypatch):
1281
+ from boost_cli.core import dense
1282
+ monkeypatch.setattr(dense, "import_shard",
1283
+ lambda shard, commit: (True, "imported 7 chunks"))
1284
+ f = tmp_path / "s.json"
1285
+ f.write_text(json.dumps({"tap": "acme/skills"}), encoding="utf-8")
1286
+ r = boost("reindex", "--import-shard", str(f))
1287
+ assert "imported 7 chunks" in r.out
1288
+ assert "acme/skills" in r.out