boost-skill-cli 1.2.72__tar.gz → 1.2.73__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 (948) hide show
  1. {boost_skill_cli-1.2.72/boost_skill_cli.egg-info → boost_skill_cli-1.2.73}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/discovery.py +9 -1
  4. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/dense.py +45 -0
  5. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/rag.py +108 -8
  6. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  7. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  8. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/commands.html +4 -3
  9. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +28 -2
  10. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap.html +28 -3
  11. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_discovery.py +10 -0
  12. boost_skill_cli-1.2.73/tests/unit/test_dense_entry_vectors.py +121 -0
  13. boost_skill_cli-1.2.73/tests/unit/test_near_duplicate_collapse.py +191 -0
  14. boost_skill_cli-1.2.73/tests/unit/test_retrieve_any_near_duplicates.py +93 -0
  15. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.gitattributes +0 -0
  16. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.gitignore +0 -0
  17. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.gitleaks.toml +0 -0
  18. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.htmlvalidate.json +0 -0
  19. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.lighthouserc.json +0 -0
  20. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.lycheeignore +0 -0
  21. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.markdownlint-cli2.jsonc +0 -0
  22. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.pre-commit-config.yaml +0 -0
  23. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.stylelintrc.json +0 -0
  24. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.vale/styles/boost/AIWriting.yml +0 -0
  25. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.vale/styles/boost/Terminology.yml +0 -0
  26. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  27. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/.vale.ini +0 -0
  28. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/CLAUDE.md +0 -0
  29. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/CODE_OF_CONDUCT.md +0 -0
  30. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/CONTRIBUTING.md +0 -0
  31. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/DCO +0 -0
  32. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/GOVERNANCE.md +0 -0
  33. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/LICENSE +0 -0
  34. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/MAINTAINERS.md +0 -0
  35. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/MANIFEST.in +0 -0
  36. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/Makefile +0 -0
  37. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/README.md +0 -0
  38. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/SECURITY.md +0 -0
  39. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/SUPPORT.md +0 -0
  40. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost +0 -0
  41. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/__init__.py +0 -0
  42. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/__main__.py +0 -0
  43. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/cli.py +0 -0
  44. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/cliparse.py +0 -0
  45. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/__init__.py +0 -0
  46. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/_common.py +0 -0
  47. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/bmad.py +0 -0
  48. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/configuration.py +0 -0
  49. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/hooks.py +0 -0
  50. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/info.py +0 -0
  51. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/intelligence.py +0 -0
  52. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/pkg.py +0 -0
  53. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/quality.py +0 -0
  54. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/quickstart.py +0 -0
  55. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/run.py +0 -0
  56. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/safety.py +0 -0
  57. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/taps.py +0 -0
  58. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/commands/team.py +0 -0
  59. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/__init__.py +0 -0
  60. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/adapters.py +0 -0
  61. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/agents.py +0 -0
  62. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/ai.py +0 -0
  63. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/aihost.py +0 -0
  64. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/bmad.py +0 -0
  65. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/bootstrap.py +0 -0
  66. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/browse.py +0 -0
  67. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/builtin.py +0 -0
  68. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/capabilities.py +0 -0
  69. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/catalog.py +0 -0
  70. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/catalogbundle.py +0 -0
  71. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/chat.py +0 -0
  72. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/claude_settings.py +0 -0
  73. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/complete.py +0 -0
  74. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/config.py +0 -0
  75. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/ed25519.py +0 -0
  76. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/embed.py +0 -0
  77. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/faithfulness.py +0 -0
  78. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/frontmatter.py +0 -0
  79. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/gitutil.py +0 -0
  80. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/hookhost.py +0 -0
  81. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/imperative.py +0 -0
  82. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/injectscan.py +0 -0
  83. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/installscan.py +0 -0
  84. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/integrity.py +0 -0
  85. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/journal.py +0 -0
  86. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/localembed.py +0 -0
  87. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/lockfile.py +0 -0
  88. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/logs.py +0 -0
  89. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/mcp.py +0 -0
  90. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/mcpdecl.py +0 -0
  91. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/mcphost.py +0 -0
  92. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/minisign.py +0 -0
  93. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/nethttp.py +0 -0
  94. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/output.py +0 -0
  95. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/paths.py +0 -0
  96. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/policy.py +0 -0
  97. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/projectlock.py +0 -0
  98. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/provenance.py +0 -0
  99. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/registry.py +0 -0
  100. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/resolve.py +0 -0
  101. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/rules.py +0 -0
  102. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/scopes.py +0 -0
  103. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/secretscan.py +0 -0
  104. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/selfupdate.py +0 -0
  105. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/serve.py +0 -0
  106. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/shards.py +0 -0
  107. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/stackprobe.py +0 -0
  108. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/staleness.py +0 -0
  109. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/store.py +0 -0
  110. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/trustaudit.py +0 -0
  111. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/typosquat.py +0 -0
  112. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/updatediff.py +0 -0
  113. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/util.py +0 -0
  114. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/core/workflows.py +0 -0
  115. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/data/registries.json +0 -0
  116. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/data/rules/boost-first.mdc +0 -0
  117. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/errors.py +0 -0
  118. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_cli/spin.py +0 -0
  119. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_langchain/__init__.py +0 -0
  120. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_langchain/_compat.py +0 -0
  121. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_langchain/graph.py +0 -0
  122. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_langchain/loader.py +0 -0
  123. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_langchain/py.typed +0 -0
  124. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_langchain/retriever.py +0 -0
  125. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  126. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  127. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_skill_cli.egg-info/requires.txt +0 -0
  128. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/boost_skill_cli.egg-info/top_level.txt +0 -0
  129. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/codecov.yml +0 -0
  130. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/.claude/settings.local.json +0 -0
  131. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/DEBUGGING.md +0 -0
  132. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/adapters.html +0 -0
  133. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/architecture/README.md +0 -0
  134. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/architecture/c4-components-core.md +0 -0
  135. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/architecture/c4-containers.md +0 -0
  136. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/architecture/c4-context.md +0 -0
  137. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/architecture/c4-dynamic-install.md +0 -0
  138. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/bmad.md +0 -0
  139. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/gifs/distill.gif +0 -0
  140. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/gifs/doctor.gif +0 -0
  141. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/gifs/explain.gif +0 -0
  142. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/gifs/hooks.gif +0 -0
  143. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/gifs/install.gif +0 -0
  144. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/gifs/pulse.gif +0 -0
  145. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/gifs/search.gif +0 -0
  146. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/gifs/tap.gif +0 -0
  147. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/tapes/distill.tape +0 -0
  148. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/tapes/doctor.tape +0 -0
  149. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/tapes/explain.tape +0 -0
  150. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/tapes/hooks.tape +0 -0
  151. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/tapes/install.tape +0 -0
  152. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/tapes/pulse.tape +0 -0
  153. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/tapes/search.tape +0 -0
  154. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel/tapes/tap.tape +0 -0
  155. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/carousel.html +0 -0
  156. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/chat.html +0 -0
  157. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/code-review.md +0 -0
  158. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/commit-audit.md +0 -0
  159. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/demo-index.json +0 -0
  160. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/demo.gif +0 -0
  161. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/demo.html +0 -0
  162. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/demo.tape +0 -0
  163. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/dependencies.md +0 -0
  164. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/design-roadmap.html +0 -0
  165. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/eval-latest.json +0 -0
  166. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/eval.html +0 -0
  167. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/index.html +0 -0
  168. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/langchain.html +0 -0
  169. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/mcp-hub.html +0 -0
  170. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/openssf-badge.md +0 -0
  171. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/openssf-playbook.md +0 -0
  172. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/rag-architecture.md +0 -0
  173. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D01.md +0 -0
  174. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D02.md +0 -0
  175. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D03.md +0 -0
  176. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D04.md +0 -0
  177. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D05.md +0 -0
  178. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D06.md +0 -0
  179. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D07.md +0 -0
  180. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D08.md +0 -0
  181. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D09.md +0 -0
  182. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D10.md +0 -0
  183. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D11.md +0 -0
  184. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D12.md +0 -0
  185. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D13.md +0 -0
  186. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D14.md +0 -0
  187. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D15.md +0 -0
  188. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D16.md +0 -0
  189. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D17.md +0 -0
  190. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D18.md +0 -0
  191. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D19.md +0 -0
  192. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D20.md +0 -0
  193. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D21.md +0 -0
  194. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D22.md +0 -0
  195. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D23.md +0 -0
  196. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D24.md +0 -0
  197. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D25.md +0 -0
  198. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D26.md +0 -0
  199. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/BOOST-D27.md +0 -0
  200. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  201. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  202. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  203. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  204. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  205. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  206. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  207. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  208. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  209. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  210. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  211. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  212. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  213. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  214. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  215. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-attest-findings.md +0 -0
  216. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-audit-findings.md +0 -0
  217. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-bmad-findings.md +0 -0
  218. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-browse-findings.md +0 -0
  219. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  220. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  221. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  222. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  223. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-chat-findings.md +0 -0
  224. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  225. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  226. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  227. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-completions-findings.md +0 -0
  228. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-config-findings.md +0 -0
  229. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  230. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-context-findings.md +0 -0
  231. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  232. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
  233. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-create-findings.md +0 -0
  234. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  235. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-deps-findings.md +0 -0
  236. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-discover-findings.md +0 -0
  237. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  238. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  239. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-drift-findings.md +0 -0
  240. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  241. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-edit-findings.md +0 -0
  242. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  243. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-explain-findings.md +0 -0
  244. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-export-findings.md +0 -0
  245. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  246. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  247. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  248. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  249. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  250. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-health-findings.md +0 -0
  251. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  252. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  253. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-import-findings.md +0 -0
  254. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-index-findings.md +0 -0
  255. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  256. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  257. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-install-findings.md +0 -0
  258. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  259. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  260. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-lint-findings.md +0 -0
  261. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-log-findings.md +0 -0
  262. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  263. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  264. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  265. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  266. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
  267. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  268. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  269. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  270. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  271. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  272. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  273. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-policy-findings.md +0 -0
  274. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-preview-findings.md +0 -0
  275. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-profile-findings.md +0 -0
  276. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  277. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  278. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  279. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  280. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  281. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  282. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  283. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  284. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  285. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-replay-findings.md +0 -0
  286. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-root-findings.md +0 -0
  287. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  288. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-run-findings.md +0 -0
  289. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  290. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-search-findings.md +0 -0
  291. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  292. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
  293. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
  294. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  295. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  296. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  297. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
  298. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  299. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-sync-findings.md +0 -0
  300. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-tag-findings.md +0 -0
  301. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  302. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-tap-findings.md +0 -0
  303. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-taps-findings.md +0 -0
  304. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  305. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-test-findings.md +0 -0
  306. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-trust-findings.md +0 -0
  307. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  308. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  309. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-untap-findings.md +0 -0
  310. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-update-findings.md +0 -0
  311. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  312. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-verify-findings.md +0 -0
  313. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/audit-who-findings.md +0 -0
  314. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  315. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  316. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  317. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  318. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  319. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  320. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/boost-first-rule.md +0 -0
  321. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  322. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  323. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/branch-current-gate.md +0 -0
  324. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  325. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  326. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  327. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  328. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  329. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  330. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  331. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  332. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  333. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  334. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  335. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  336. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  337. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  338. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  339. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  340. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/cli-command-audit.md +0 -0
  341. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  342. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  343. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  344. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  345. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/command-carousel-page.md +0 -0
  346. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  347. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  348. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  349. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  350. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  351. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  352. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  353. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  354. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  355. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  356. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  357. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  358. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  359. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  360. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  361. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  362. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  363. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  364. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  365. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  366. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  367. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  368. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  369. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  370. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  371. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  372. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  373. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  374. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  375. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  376. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  377. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  378. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  379. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  380. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  381. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  382. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  383. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  384. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  385. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  386. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  387. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  388. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  389. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  390. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  391. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  392. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  393. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  394. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  395. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  396. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  397. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  398. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  399. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  400. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/github-community-health-files.md +0 -0
  401. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  402. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  403. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  404. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  405. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  406. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  407. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  408. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  409. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  410. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  411. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  412. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  413. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  414. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  415. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  416. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  417. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  418. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  419. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  420. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  421. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  422. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  423. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  424. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  425. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  426. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  427. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  428. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  429. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  430. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  431. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  432. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  433. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  434. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  435. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  436. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  437. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  438. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  439. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  440. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  441. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  442. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  443. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  444. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  445. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  446. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  447. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  448. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  449. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  450. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  451. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  452. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  453. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  454. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  455. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  456. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  457. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  458. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  459. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  460. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  461. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  462. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  463. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  464. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  465. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  466. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  467. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  468. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  469. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  470. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  471. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  472. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  473. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  474. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  475. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  476. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  477. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  478. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  479. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/openssf-playbook.md +0 -0
  480. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/openssf-silver.md +0 -0
  481. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  482. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  483. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  484. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  485. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  486. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  487. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  488. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  489. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  490. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  491. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  492. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  493. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  494. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  495. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  496. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  497. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  498. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  499. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  500. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  501. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  502. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  503. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  504. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  505. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  506. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  507. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  508. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  509. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  510. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  511. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  512. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  513. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/relicence-apache-2.md +0 -0
  514. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  515. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  516. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  517. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  518. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  519. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  520. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  521. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  522. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  523. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  524. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  525. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  526. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  527. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  528. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  529. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  530. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  531. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  532. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  533. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  534. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  535. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  536. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  537. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  538. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  539. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  540. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  541. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  542. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  543. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  544. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  545. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  546. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  547. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  548. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  549. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  550. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  551. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  552. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  553. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  554. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  555. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  556. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  557. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  558. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  559. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  560. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  561. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  562. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  563. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  564. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  565. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  566. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  567. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  568. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  569. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  570. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  571. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  572. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  573. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  574. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  575. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  576. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  577. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  578. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  579. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  580. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  581. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  582. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  583. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  584. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  585. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  586. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  587. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  588. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  589. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  590. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  591. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  592. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  593. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  594. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  595. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  596. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/workspace-scope-install.md +0 -0
  597. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/zip-strict-audit.md +0 -0
  598. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  599. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  600. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/security-design.md +0 -0
  601. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/semantic-search.md +0 -0
  602. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  603. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/verifying-releases.md +0 -0
  604. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/vex/meta.md +0 -0
  605. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/vex/openvex.json +0 -0
  606. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  607. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  608. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  609. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  610. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/eslint.config.mjs +0 -0
  611. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/README.md +0 -0
  612. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/__init__.py +0 -0
  613. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/baseline.json +0 -0
  614. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/faithfulness.py +0 -0
  615. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/golden_set.json +0 -0
  616. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/make_corpus.py +0 -0
  617. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/make_golden.py +0 -0
  618. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/metrics.py +0 -0
  619. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/publish_golden_dataset.py +0 -0
  620. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/evals/run_evals.py +0 -0
  621. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/examples/README.md +0 -0
  622. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/examples/adapt-demo.sh +0 -0
  623. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/examples/boost-run-prototype.sh +0 -0
  624. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/index.html +0 -0
  625. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/noxfile.py +0 -0
  626. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/pyproject.toml +0 -0
  627. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/coverage-tools.in +0 -0
  628. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/coverage-tools.txt +0 -0
  629. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/lint-tools.in +0 -0
  630. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/lint-tools.txt +0 -0
  631. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/mutation-tools.in +0 -0
  632. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/mutation-tools.txt +0 -0
  633. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/platform-pins.lock +0 -0
  634. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/release-tools.in +0 -0
  635. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/release-tools.txt +0 -0
  636. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/test-tools.in +0 -0
  637. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/requirements/test-tools.txt +0 -0
  638. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/a11y_check.py +0 -0
  639. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/add_spdx_headers.py +0 -0
  640. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/bench_cli.sh +0 -0
  641. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/build_command_reference.py +0 -0
  642. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/build_demo_index.py +0 -0
  643. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/build_registries.py +0 -0
  644. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/build_roadmap.py +0 -0
  645. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/build_scale_corpus.py +0 -0
  646. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/build_vex.py +0 -0
  647. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/check_anchors.py +0 -0
  648. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/check_branch_current.py +0 -0
  649. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/check_dco.py +0 -0
  650. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/check_licenses.py +0 -0
  651. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/check_reproducible.py +0 -0
  652. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/check_required_checks.py +0 -0
  653. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/ensure_eval_corpus.sh +0 -0
  654. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/eval_corpus.py +0 -0
  655. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/eval_explain.py +0 -0
  656. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/eval_gate.py +0 -0
  657. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/eval_recommend.py +0 -0
  658. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/eval_retrieval.py +0 -0
  659. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/eval_stats_summary.py +0 -0
  660. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/eval_tools.py +0 -0
  661. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/import_budget.py +0 -0
  662. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/lock_toolchain.py +0 -0
  663. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/measure_registry.py +0 -0
  664. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/mutation_gate.py +0 -0
  665. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/mutation_shards.py +0 -0
  666. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/mutation_weights.json +0 -0
  667. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/normalize_sdist.py +0 -0
  668. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/page_budget.py +0 -0
  669. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/perf_gate.py +0 -0
  670. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/post_deploy_smoke.py +0 -0
  671. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/publish_eval_json.py +0 -0
  672. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/publish_shards.py +0 -0
  673. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/release_guard.py +0 -0
  674. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/release_preflight.py +0 -0
  675. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/serve_docs.py +0 -0
  676. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/scripts/shard_plan.py +0 -0
  677. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/setup.cfg +0 -0
  678. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/sonar-project.properties +0 -0
  679. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/style/README.md +0 -0
  680. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/style/boost.css +0 -0
  681. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/style/boost.js +0 -0
  682. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/style/demo.html +0 -0
  683. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/adapt.feature +0 -0
  684. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/browse.feature +0 -0
  685. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/count.feature +0 -0
  686. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/discover.feature +0 -0
  687. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/doctor.feature +0 -0
  688. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/environment.py +0 -0
  689. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/explain.feature +0 -0
  690. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/index.feature +0 -0
  691. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/install.feature +0 -0
  692. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/list.feature +0 -0
  693. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/mcp.feature +0 -0
  694. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/search.feature +0 -0
  695. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/steps/cli_steps.py +0 -0
  696. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/steps/discovery_steps.py +0 -0
  697. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/steps/mcp_steps.py +0 -0
  698. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/bdd/features/steps/quality_steps.py +0 -0
  699. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/conftest.py +0 -0
  700. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/eval/baseline.json +0 -0
  701. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/eval/explain.jsonl +0 -0
  702. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  703. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/eval/golden-natural.jsonl +0 -0
  704. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/eval/golden.jsonl +0 -0
  705. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/eval/recommend.jsonl +0 -0
  706. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/eval/taps-scale.txt +0 -0
  707. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/eval/taps.txt +0 -0
  708. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/eval/tool_calls.jsonl +0 -0
  709. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_bmad_all_hosts.py +0 -0
  710. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_capabilities_policy.py +0 -0
  711. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_adapt.py +0 -0
  712. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_bmad.py +0 -0
  713. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_catalog.py +0 -0
  714. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_chat.py +0 -0
  715. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_configuration.py +0 -0
  716. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_hooks.py +0 -0
  717. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_hooks_gemini.py +0 -0
  718. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_info.py +0 -0
  719. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_intelligence.py +0 -0
  720. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_pane_width.py +0 -0
  721. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_pkg.py +0 -0
  722. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_quality.py +0 -0
  723. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_quickstart.py +0 -0
  724. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_tap_pins.py +0 -0
  725. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_taps.py +0 -0
  726. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_cli_team.py +0 -0
  727. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_everyday_loop.py +0 -0
  728. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_integrity_enforce.py +0 -0
  729. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_kind_conformance.py +0 -0
  730. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_property_parsers.py +0 -0
  731. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_run.py +0 -0
  732. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_tap_signing.py +0 -0
  733. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/functional/test_workspace_scope.py +0 -0
  734. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/README.md +0 -0
  735. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  736. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  737. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  738. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  739. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  740. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  741. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  742. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  743. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  744. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  745. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  746. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  747. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  748. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  749. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  750. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  751. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  752. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  753. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  754. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  755. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  756. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  757. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  758. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/fuzz_frontmatter.py +0 -0
  759. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/fuzz/fuzz_registry.py +0 -0
  760. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/langchain/conftest.py +0 -0
  761. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/langchain/test_graph.py +0 -0
  762. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/langchain/test_loader.py +0 -0
  763. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/langchain/test_retriever.py +0 -0
  764. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/make_fixture.py +0 -0
  765. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/perf/test_benchmarks.py +0 -0
  766. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/smoke.sh +0 -0
  767. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_a11y_check.py +0 -0
  768. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_action_pin_lockstep.py +0 -0
  769. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_adapters.py +0 -0
  770. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_adapters_multi.py +0 -0
  771. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_adapters_runner.py +0 -0
  772. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_agents.py +0 -0
  773. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_ai.py +0 -0
  774. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_aihost.py +0 -0
  775. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_bmad_core.py +0 -0
  776. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_boost_first_offer.py +0 -0
  777. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_bootstrap.py +0 -0
  778. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_bot_pr_dco.py +0 -0
  779. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_branch_current.py +0 -0
  780. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_browse.py +0 -0
  781. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_builtin.py +0 -0
  782. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_capabilities.py +0 -0
  783. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_catalog.py +0 -0
  784. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_catalogbundle.py +0 -0
  785. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_chat.py +0 -0
  786. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_check_anchors.py +0 -0
  787. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_check_dco.py +0 -0
  788. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_check_licenses.py +0 -0
  789. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_check_reproducible.py +0 -0
  790. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_claude_settings.py +0 -0
  791. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_clean_internal_cache.py +0 -0
  792. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_cli_update_shards.py +0 -0
  793. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_cliparse.py +0 -0
  794. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_codeql_analysis_key.py +0 -0
  795. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_command_reference_fresh.py +0 -0
  796. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_community_health_files.py +0 -0
  797. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_compact.py +0 -0
  798. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_complete.py +0 -0
  799. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_complete_rc_block.py +0 -0
  800. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_config.py +0 -0
  801. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_content_dedupe.py +0 -0
  802. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_content_identity.py +0 -0
  803. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_crash_redaction.py +0 -0
  804. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dedup_trust.py +0 -0
  805. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_demo_index.py +0 -0
  806. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense.py +0 -0
  807. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  808. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_embed_dedupe.py +0 -0
  809. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_entry_reuse.py +0 -0
  810. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_fallback.py +0 -0
  811. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_fix_hint.py +0 -0
  812. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_progress.py +0 -0
  813. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_quantized.py +0 -0
  814. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_ready_order.py +0 -0
  815. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_shard_real_schema.py +0 -0
  816. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  817. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_shards.py +0 -0
  818. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_status.py +0 -0
  819. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_status_cheap.py +0 -0
  820. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dense_vector_dedupe.py +0 -0
  821. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_dependabot_config.py +0 -0
  822. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_docs_pages_linked.py +0 -0
  823. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_docsite_chrome.py +0 -0
  824. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_ed25519.py +0 -0
  825. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_embed.py +0 -0
  826. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_embed_local.py +0 -0
  827. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_embed_truncated_response.py +0 -0
  828. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_entry_key.py +0 -0
  829. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_errors_and_cli_table.py +0 -0
  830. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_eval_baseline.py +0 -0
  831. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_eval_corpus.py +0 -0
  832. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_eval_faithfulness.py +0 -0
  833. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_eval_gate.py +0 -0
  834. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_eval_grading.py +0 -0
  835. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_eval_metrics.py +0 -0
  836. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_eval_stats_summary.py +0 -0
  837. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_eval_tools.py +0 -0
  838. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_eval_tools_probe.py +0 -0
  839. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  840. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_faithfulness.py +0 -0
  841. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_frontmatter.py +0 -0
  842. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_fuzz_targets.py +0 -0
  843. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  844. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_gitleaks_config.py +0 -0
  845. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_gitutil.py +0 -0
  846. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_gitutil_lfs.py +0 -0
  847. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_gitutil_sparse.py +0 -0
  848. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_gstack_coexistence.py +0 -0
  849. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_hook_settings_hosts.py +0 -0
  850. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_hookhost.py +0 -0
  851. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_imperative.py +0 -0
  852. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_import_budget.py +0 -0
  853. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_injectscan.py +0 -0
  854. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_install_permission_error.py +0 -0
  855. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_installscan.py +0 -0
  856. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_integrity.py +0 -0
  857. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_journal.py +0 -0
  858. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_langchain_packaging.py +0 -0
  859. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_link_ownership.py +0 -0
  860. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_localembed.py +0 -0
  861. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_localembed_e2e.py +0 -0
  862. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_lockfile.py +0 -0
  863. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_logs.py +0 -0
  864. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_marketing_counts.py +0 -0
  865. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_mcp.py +0 -0
  866. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_mcp_install_scan.py +0 -0
  867. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_mcp_read.py +0 -0
  868. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_mcpdecl.py +0 -0
  869. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_mcphost.py +0 -0
  870. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_measure_registry.py +0 -0
  871. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_minisign.py +0 -0
  872. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_mutation_hardening.py +0 -0
  873. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_mutation_shards.py +0 -0
  874. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_mutation_subfile_shards.py +0 -0
  875. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_mutmut_source_paths.py +0 -0
  876. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_nethttp.py +0 -0
  877. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_normalize_sdist.py +0 -0
  878. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_output.py +0 -0
  879. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_page_budget.py +0 -0
  880. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_paths.py +0 -0
  881. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_perf_gate.py +0 -0
  882. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_pkg_confusions.py +0 -0
  883. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_pkg_injection.py +0 -0
  884. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_pkg_secrets.py +0 -0
  885. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_platform_pins.py +0 -0
  886. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_policy.py +0 -0
  887. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_post_deploy_smoke.py +0 -0
  888. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_project_mcp_sidecar.py +0 -0
  889. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_projectlock.py +0 -0
  890. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_provenance.py +0 -0
  891. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_publish_golden_dataset.py +0 -0
  892. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_rag.py +0 -0
  893. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_rag_fastpath.py +0 -0
  894. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_rag_fusion.py +0 -0
  895. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_registries_fresh.py +0 -0
  896. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_registry.py +0 -0
  897. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_registry_categories.py +0 -0
  898. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_registry_control_chars.py +0 -0
  899. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_registry_parallel.py +0 -0
  900. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_release_guard.py +0 -0
  901. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_release_preflight.py +0 -0
  902. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_required_checks.py +0 -0
  903. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_rerank_cache.py +0 -0
  904. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_resolve.py +0 -0
  905. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_roadmap_fresh.py +0 -0
  906. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_rules.py +0 -0
  907. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_scale_corpus.py +0 -0
  908. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_scopes.py +0 -0
  909. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_secretscan.py +0 -0
  910. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_selfupdate.py +0 -0
  911. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_serve.py +0 -0
  912. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_serve_docs.py +0 -0
  913. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_shard_plan.py +0 -0
  914. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_shards.py +0 -0
  915. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_shards_incremental.py +0 -0
  916. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_shards_ingest.py +0 -0
  917. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_shards_matrix.py +0 -0
  918. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_smoke_covers_every_command.py +0 -0
  919. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_spdx_headers.py +0 -0
  920. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_spin.py +0 -0
  921. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_stackprobe.py +0 -0
  922. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_staleness.py +0 -0
  923. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_store.py +0 -0
  924. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_store_materialize.py +0 -0
  925. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_sync_blocked_links.py +0 -0
  926. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  927. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_tap_pins.py +0 -0
  928. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_token_parity.py +0 -0
  929. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_toolchain_lock.py +0 -0
  930. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_trustaudit.py +0 -0
  931. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_typosquat.py +0 -0
  932. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_updatediff.py +0 -0
  933. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_util.py +0 -0
  934. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_version.py +0 -0
  935. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_version_tags.py +0 -0
  936. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_vex.py +0 -0
  937. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_visual_harness_flags.py +0 -0
  938. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_workflow_concurrency.py +0 -0
  939. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  940. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  941. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_workflow_timeouts.py +0 -0
  942. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_workflows.py +0 -0
  943. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  944. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/visual/a11y_check.mjs +0 -0
  945. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/visual/console_check.mjs +0 -0
  946. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/visual/package-lock.json +0 -0
  947. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/visual/package.json +0 -0
  948. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.73}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.72
3
+ Version: 1.2.73
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.72'
22
- __version_tuple__ = version_tuple = (1, 2, 72)
21
+ __version__ = version = '1.2.73'
22
+ __version_tuple__ = version_tuple = (1, 2, 73)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -96,6 +96,12 @@ def cmd_search(argv):
96
96
  help="rerank the top hits with Claude")
97
97
  p.add_argument("--limit", type=util.positive_int, default=15,
98
98
  help="max results (default 15)")
99
+ p.add_argument("--collapse-near-duplicates", action="store_true",
100
+ dest="collapse_dupes",
101
+ help="collapse near-identical entries (translations, "
102
+ "paraphrases) via dense embeddings — opt-in, needs a "
103
+ "built dense index; threshold not yet validated "
104
+ "against a real corpus, see the roadmap")
99
105
  p.add_argument("--json", action="store_true", dest="as_json",
100
106
  help="machine-readable output")
101
107
  args = p.parse_args(argv)
@@ -127,7 +133,9 @@ def cmd_search(argv):
127
133
  # retrieve_any, not retrieve: this picks the dense backend when one is
128
134
  # built and floors to BM25 otherwise, so the CLI and the MCP server
129
135
  # answer from the same engine instead of the CLI being BM25-only.
130
- hits, engine = rag.retrieve_any(query, k=max(60, args.limit * 4))
136
+ hits, engine = rag.retrieve_any(
137
+ query, k=max(60, args.limit * 4),
138
+ collapse_near_duplicates=args.collapse_dupes)
131
139
  scored = [(h["entry"], h["score"]) for h in (hits or [])]
132
140
  else:
133
141
  scored = catalog.search(query)
@@ -1561,6 +1561,51 @@ def _knn(con: sqlite3.Connection, qblob: bytes,
1561
1561
  return _expand(con, ranked, pool)
1562
1562
 
1563
1563
 
1564
+ def entry_vectors(entry_keys: list[tuple[str, str]],
1565
+ ) -> dict[tuple[str, str], bytes]:
1566
+ """Raw float32 embedding for each entry's first chunk, keyed by ``(tap, path)``.
1567
+
1568
+ Feeds `rag.collapse_near_duplicate_hits`, whose clustering needs one
1569
+ representative vector per *entry* rather than per chunk. The lowest-``cix``
1570
+ chunk is that representative: `rag.chunk` always emits the name+description
1571
+ chunk first, which is enough signal to place a translation or a paraphrase
1572
+ near its original without reading the rest of the body.
1573
+
1574
+ Only a quantized store answers this cheaply: `vec_raw` is a plain
1575
+ rowid-keyed table, so looking vectors up by id is an index probe (see
1576
+ `_knn`'s comment on why the same lookup against a `vec0` table plans as a
1577
+ full scan instead). A legacy float32 store returns ``{}``, and near-dup
1578
+ collapsing degrades to a no-op there — the same way every other feature on
1579
+ that path degrades, rather than paying a full-scan cost per entry.
1580
+ """
1581
+ if not entry_keys:
1582
+ return {}
1583
+ con = _connect()
1584
+ if con is None:
1585
+ return {}
1586
+ try:
1587
+ if not quantized(con):
1588
+ return {}
1589
+ col = _vid_col(con)
1590
+ vids: dict[tuple[str, str], int] = {}
1591
+ for tap, path in entry_keys:
1592
+ row = con.execute(
1593
+ "SELECT %s FROM chunks WHERE tap = ? AND path = ? " # noqa: S608 col is a literal from _vid_col; tap/path are bound
1594
+ "ORDER BY cix LIMIT 1" % col, (tap, path)).fetchone()
1595
+ if row is not None and row[0] is not None:
1596
+ vids[(tap, path)] = row[0]
1597
+ if not vids:
1598
+ return {}
1599
+ ids = sorted(set(vids.values()))
1600
+ rows = con.execute(
1601
+ "SELECT id, embedding FROM vec_raw WHERE id IN (%s)" # noqa: S608 interpolates only `?` placeholders; ids are bound
1602
+ % ",".join("?" * len(ids)), ids).fetchall()
1603
+ blobs = dict(rows)
1604
+ return {key: blobs[vid] for key, vid in vids.items() if vid in blobs}
1605
+ finally:
1606
+ con.close()
1607
+
1608
+
1564
1609
  def retrieve(query: str, k: int = 60, kind: str | None = None,
1565
1610
  entries: list[dict] | None = None) -> list[Hit] | None:
1566
1611
  """Top-k dense hits for ``query``, or None to signal 'fall back to BM25'."""
@@ -17,6 +17,7 @@ no AI -> the BM25 order is returned as-is.
17
17
  """
18
18
  from __future__ import annotations
19
19
 
20
+ import array
20
21
  import contextlib
21
22
  import hashlib
22
23
  import json
@@ -773,6 +774,91 @@ def dedupe_by_content(hits: list[Hit], limit: int) -> list[Hit]:
773
774
  return out[:limit]
774
775
 
775
776
 
777
+ #: Cosine-similarity floor for two entries to collapse as near-duplicates.
778
+ #:
779
+ #: Deliberately conservative and deliberately unproven. `dedupe_by_content`
780
+ #: above shipped only after one count settled its safety: of 14,153 distinct
781
+ #: bodies, the clusters spanning more than one *name* numbered zero, so
782
+ #: collapsing on content hash could not merge two different skills. No
783
+ #: equivalent count exists yet for near-identical clustering — the measurement
784
+ #: the roadmap card asks for is "over a real corpus, at the chosen threshold,
785
+ #: count clusters spanning more than one meaning" and nobody has run it. Until
786
+ #: someone does, `collapse_near_duplicate_hits` stays reachable only opt-in
787
+ #: (see `retrieve_any`'s `collapse_near_duplicates` parameter), so the default
788
+ #: search path is unaffected by a threshold nobody has validated.
789
+ NEAR_DUPLICATE_THRESHOLD = 0.97
790
+
791
+
792
+ def _decode_vector(blob: bytes) -> array.array:
793
+ """A stored float32 embedding blob as a sequence of floats."""
794
+ vec = array.array("f")
795
+ vec.frombytes(blob)
796
+ return vec
797
+
798
+
799
+ def _cosine(a: array.array, b: array.array) -> float:
800
+ """Cosine similarity of two float32 vectors, 0.0 for any comparison that
801
+ cannot be trusted: a dimension mismatch (different embedding models) or
802
+ either side being the zero vector. An ambiguous comparison must never read
803
+ as a match, the same rule a missing content hash follows above.
804
+ """
805
+ if not a or not b or len(a) != len(b):
806
+ return 0.0
807
+ dot = sum(x * y for x, y in zip(a, b, strict=True))
808
+ norm_a = math.sqrt(sum(x * x for x in a))
809
+ norm_b = math.sqrt(sum(x * x for x in b))
810
+ if 0.0 in (norm_a, norm_b):
811
+ return 0.0
812
+ return dot / (norm_a * norm_b)
813
+
814
+
815
+ def collapse_near_duplicate_hits(hits: list[Hit],
816
+ vectors: dict[tuple[str, str], bytes],
817
+ limit: int,
818
+ threshold: float = NEAR_DUPLICATE_THRESHOLD,
819
+ ) -> list[Hit]:
820
+ """Collapse entries whose embeddings are near-identical, then take ``limit``.
821
+
822
+ Runs on the output of :func:`dedupe_by_content`, on the same contract —
823
+ keep the earliest rank slot, promote a better source into it — for the
824
+ residual that survives byte-identical dedup: the same skill translated or
825
+ paraphrased across mirrors. Observed on a real 466-tap install: the query
826
+ ``exa search`` returned ten rows that were all one skill in Japanese,
827
+ Chinese, and five English variants, none sharing a body digest, so
828
+ ``dedupe_by_content`` correctly kept every one of them apart.
829
+
830
+ ``vectors`` maps ``entry_key(hit["entry"])`` to a raw float32 embedding
831
+ blob, looked up by the caller (:func:`boost_cli.core.dense.entry_vectors`)
832
+ rather than fetched here — this stays pure so it is cheap to test with
833
+ synthetic vectors, and clustering ``hits`` is O(n * clusters), never
834
+ O(n^2) against the whole store.
835
+
836
+ A hit with no vector — no dense store built, or the entry never got one —
837
+ is never merged into anything: two unknowns must not collapse into each
838
+ other, the same rule :func:`dedupe_by_content` follows for a missing
839
+ content hash.
840
+ """
841
+ out: list[Hit] = []
842
+ reps: list[array.array | None] = [] # parallel to `out`
843
+ for hit in hits:
844
+ blob = vectors.get(entry_key(hit["entry"]))
845
+ vec = _decode_vector(blob) if blob else None
846
+ merge_at = None
847
+ if vec is not None:
848
+ for i, rep in enumerate(reps):
849
+ if rep is not None and _cosine(vec, rep) >= threshold:
850
+ merge_at = i
851
+ break
852
+ if merge_at is None:
853
+ out.append(hit)
854
+ reps.append(vec)
855
+ continue
856
+ kept = out[merge_at]
857
+ if source_rank(hit["entry"]) < source_rank(kept["entry"]):
858
+ out[merge_at] = cast(Hit, {**kept, "entry": hit["entry"]})
859
+ return out[:limit]
860
+
861
+
776
862
  def _windowed(hits: list[Hit], terms: Sequence[str]) -> list[Hit]:
777
863
  """Window each hit's raw stored snip onto the query terms.
778
864
 
@@ -1087,7 +1173,8 @@ def _with_content(hits: list[Hit]) -> list[Hit]:
1087
1173
 
1088
1174
 
1089
1175
  def retrieve_any(query: str, k: int = 60, kind: str | None = None,
1090
- entries: list[dict] | None = None
1176
+ entries: list[dict] | None = None,
1177
+ collapse_near_duplicates: bool = False,
1091
1178
  ) -> tuple[list[Hit] | None, str]:
1092
1179
  """Fuse BM25 and dense when both are available; floor to whichever is.
1093
1180
 
@@ -1107,6 +1194,12 @@ def retrieve_any(query: str, k: int = 60, kind: str | None = None,
1107
1194
  Both engines are over-fetched to ``RRF_K`` before fusing. Fusing only the
1108
1195
  top-k of each would discard exactly the candidates the other engine was
1109
1196
  going to promote, which is most of the value.
1197
+
1198
+ ``collapse_near_duplicates`` runs :func:`collapse_near_duplicate_hits` over
1199
+ the result, on top of the byte-identical dedup every branch below already
1200
+ does — off by default (see :data:`NEAR_DUPLICATE_THRESHOLD` for why) and a
1201
+ no-op whenever no dense store is built, since that is the only source of
1202
+ the embeddings the collapse needs.
1110
1203
  """
1111
1204
  from . import dense
1112
1205
  pool = max(k, RRF_K)
@@ -1127,13 +1220,20 @@ def retrieve_any(query: str, k: int = 60, kind: str | None = None,
1127
1220
  # no reason to treat them as one.
1128
1221
  if dense_hits and bm25_hits:
1129
1222
  fused = rrf_fuse([bm25_hits, dense_hits], limit=max(k, RRF_K))
1130
- return (dedupe_by_content(_with_content(fused), k),
1131
- "hybrid RRF (BM25 + dense)")
1132
- if dense_hits:
1133
- return dedupe_by_content(_with_content(dense_hits), k), "dense vectors"
1134
- if bm25_hits is not None:
1135
- return bm25_hits[:k], "BM25 full-content" # already deduped
1136
- return None, ""
1223
+ hits, engine = dedupe_by_content(_with_content(fused), k), \
1224
+ "hybrid RRF (BM25 + dense)"
1225
+ elif dense_hits:
1226
+ hits, engine = dedupe_by_content(_with_content(dense_hits), k), \
1227
+ "dense vectors"
1228
+ elif bm25_hits is not None:
1229
+ hits, engine = bm25_hits[:k], "BM25 full-content" # already deduped
1230
+ else:
1231
+ return None, ""
1232
+ if collapse_near_duplicates and hits and dense.ready():
1233
+ vectors = dense.entry_vectors([entry_key(h["entry"]) for h in hits])
1234
+ if vectors:
1235
+ hits = collapse_near_duplicate_hits(hits, vectors, k)
1236
+ return hits, engine
1137
1237
 
1138
1238
 
1139
1239
  def search(query: str, limit: int = 10, kind: str | None = None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.72
3
+ Version: 1.2.73
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -803,6 +803,7 @@ tests/unit/test_dense.py
803
803
  tests/unit/test_dense_boilerplate_cluster.py
804
804
  tests/unit/test_dense_embed_dedupe.py
805
805
  tests/unit/test_dense_entry_reuse.py
806
+ tests/unit/test_dense_entry_vectors.py
806
807
  tests/unit/test_dense_fallback.py
807
808
  tests/unit/test_dense_fix_hint.py
808
809
  tests/unit/test_dense_progress.py
@@ -869,6 +870,7 @@ tests/unit/test_mutation_hardening.py
869
870
  tests/unit/test_mutation_shards.py
870
871
  tests/unit/test_mutation_subfile_shards.py
871
872
  tests/unit/test_mutmut_source_paths.py
873
+ tests/unit/test_near_duplicate_collapse.py
872
874
  tests/unit/test_nethttp.py
873
875
  tests/unit/test_normalize_sdist.py
874
876
  tests/unit/test_output.py
@@ -898,6 +900,7 @@ tests/unit/test_release_preflight.py
898
900
  tests/unit/test_required_checks.py
899
901
  tests/unit/test_rerank_cache.py
900
902
  tests/unit/test_resolve.py
903
+ tests/unit/test_retrieve_any_near_duplicates.py
901
904
  tests/unit/test_roadmap_fresh.py
902
905
  tests/unit/test_rules.py
903
906
  tests/unit/test_scale_corpus.py
@@ -117,7 +117,7 @@
117
117
  </div>
118
118
  <div class="group" data-group="find">
119
119
  <div class="group-h">Find &amp; search</div>
120
- <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-search" data-search="search search skills across tap registries (ai-ranked) --smart --limit limit --collapse-near-duplicates --json query">search</a>
121
121
  <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 --fetch-shards --json">reindex</a>
122
122
  <a class="cmd-link" href="#cmd-discover" data-search="discover search github for skill repos you have not tapped yet search github for skill repositories you have not tapped yet --limit limit --json --local query">discover</a>
123
123
  <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>
@@ -397,10 +397,10 @@
397
397
  </div>
398
398
  </section>
399
399
  <h2 class="group-h" id="grp-find">Find &amp; search</h2>
400
- <section class="cmd" id="cmd-search" data-search="search search skills across tap registries (ai-ranked) --smart --limit limit --json query">
400
+ <section class="cmd" id="cmd-search" data-search="search search skills across tap registries (ai-ranked) --smart --limit limit --collapse-near-duplicates --json query">
401
401
  <h3><span class="cname">search</span><span class="gtag">find</span></h3>
402
402
  <p class="summary">Search skills across tap registries (AI-ranked)</p>
403
- <pre class="syn">boost search [--smart] [--limit LIMIT] [--json] query [query ...]</pre>
403
+ <pre class="syn">boost search [--smart] [--limit LIMIT] [--collapse-near-duplicates] [--json] query [query ...]</pre>
404
404
  <div class="args-h">Arguments</div>
405
405
  <div class="args">
406
406
  <div class="arg"><code>query</code><span>search terms</span></div>
@@ -409,6 +409,7 @@
409
409
  <div class="args">
410
410
  <div class="arg"><code>--smart</code><span>rerank the top hits with Claude</span></div>
411
411
  <div class="arg"><code>--limit LIMIT</code><span>max results (default 15)</span></div>
412
+ <div class="arg"><code>--collapse-near-duplicates</code><span>collapse near-identical entries (translations, paraphrases) via dense embeddings — opt-in, needs a built dense index; threshold not yet validated against a real corpus, see the roadmap</span></div>
412
413
  <div class="arg"><code>--json</code><span>machine-readable output</span></div>
413
414
  </div>
414
415
  </section>
@@ -2,12 +2,13 @@
2
2
  id: near-identical-copies-still-eat-the-slots
3
3
  board: code
4
4
  section: planned
5
- status: planned
5
+ status: inflight
6
+ owner: loop/near-dup-collapse
6
7
  category: Search · Ranking
7
8
  complexity: M
8
9
  impact: High
9
10
  wow: 4
10
- note: 10 of 10 slots on a real 466-tap install, all past byte-identical dedup
11
+ note: mechanism + tests shipped opt-in; corpus safety proof and default-on still open
11
12
  order: 131
12
13
  title: Near-identical copies survive content-hash dedup and take the whole result page
13
14
  ---
@@ -67,3 +68,28 @@ install from.
67
68
  <b>Not to be confused with <code>#629</code></b>, which deduplicated vector <em>storage</em> (one
68
69
  row per distinct embedding, 39.7% repeats reclaimed). That is a disk-size fix beneath the index and
69
70
  changes no ranking; this is about which rows reach the user's screen.
71
+
72
+ <b>What shipped, and what did not.</b> <code>rag.collapse_near_duplicate_hits</code> is the same
73
+ "keep the earliest rank slot, promote a better source" contract as <code>dedupe_by_content</code>,
74
+ run over cosine similarity of the entries' first-chunk embeddings
75
+ (<code>dense.entry_vectors</code>, an index probe through <code>chunks_entry</code> on a quantized
76
+ store) instead of a body hash, at the <code>retrieve_any</code> seam before <code>k</code> is
77
+ applied. It is covered by unit tests down to the arithmetic (<code>_cosine</code>'s dimension-
78
+ mismatch and zero-vector guards), the clustering contract (rank order, quality-prior promotion,
79
+ limit-after-collapse), the <code>dense.entry_vectors</code> lookup against a real quantized
80
+ sqlite-vec store, and the <code>retrieve_any</code>/<code>boost search
81
+ --collapse-near-duplicates</code> wiring in both directions (on and off).
82
+
83
+ It ships <b>opt-in and off by default</b> — <code>retrieve_any(..., collapse_near_duplicates=True)</code>
84
+ or <code>boost search --collapse-near-duplicates</code> — rather than replacing
85
+ <code>dedupe_by_content</code>'s output on the default path. Two things this card asks for are still
86
+ open, and both need a real embedding backend (a built dense index, over a real multi-tap corpus)
87
+ that the environment this was implemented in cannot reach — no network path to an embeddings
88
+ provider or to the local ONNX model download, confirmed rather than assumed: <code>huggingface.co</code>
89
+ and <code>pypi.org</code> both refuse at the network policy layer. <b>First</b>, the safety proof
90
+ this card itself demands before defaulting the mechanism on &mdash; &ldquo;over a real corpus, at
91
+ the chosen threshold, count clusters spanning more than one meaning&rdquo; &mdash; has not been run;
92
+ <code>NEAR_DUPLICATE_THRESHOLD = 0.97</code> is a starting point, not a validated floor. <b>Second</b>,
93
+ re-measuring the <code>exa search</code> case (and per-query maxima generally) against the fix needs
94
+ that same corpus and index. Whoever runs that measurement should flip the CLI flag's default, fold
95
+ the corpus count into this card's evidence, and only then consider this shipped.
@@ -1063,7 +1063,7 @@ checks fails on every invocation is the more expensive half of this card.</p></d
1063
1063
  </article>
1064
1064
 
1065
1065
  <article class="cap rcard" id="near-identical-copies-still-eat-the-slots">
1066
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Search · Ranking</span></div>
1066
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">Search · Ranking</span></div>
1067
1067
  <h3>Near-identical copies survive content-hash dedup and take the whole result page</h3>
1068
1068
  <p><a href="#near-duplicate-items-eat-the-result-slots">Content-hash dedup</a> shipped and worked:
1069
1069
  <code>rag.dedupe_by_content</code> took duplicate result slots from <b>4.94 to 0.60 per query</b>
@@ -1120,12 +1120,37 @@ install from.
1120
1120
 
1121
1121
  <b>Not to be confused with <code>#629</code></b>, which deduplicated vector <em>storage</em> (one
1122
1122
  row per distinct embedding, 39.7% repeats reclaimed). That is a disk-size fix beneath the index and
1123
- changes no ranking; this is about which rows reach the user's screen.</p>
1123
+ changes no ranking; this is about which rows reach the user's screen.
1124
+
1125
+ <b>What shipped, and what did not.</b> <code>rag.collapse_near_duplicate_hits</code> is the same
1126
+ "keep the earliest rank slot, promote a better source" contract as <code>dedupe_by_content</code>,
1127
+ run over cosine similarity of the entries' first-chunk embeddings
1128
+ (<code>dense.entry_vectors</code>, an index probe through <code>chunks_entry</code> on a quantized
1129
+ store) instead of a body hash, at the <code>retrieve_any</code> seam before <code>k</code> is
1130
+ applied. It is covered by unit tests down to the arithmetic (<code>_cosine</code>'s dimension-
1131
+ mismatch and zero-vector guards), the clustering contract (rank order, quality-prior promotion,
1132
+ limit-after-collapse), the <code>dense.entry_vectors</code> lookup against a real quantized
1133
+ sqlite-vec store, and the <code>retrieve_any</code>/<code>boost search
1134
+ --collapse-near-duplicates</code> wiring in both directions (on and off).
1135
+
1136
+ It ships <b>opt-in and off by default</b> — <code>retrieve_any(..., collapse_near_duplicates=True)</code>
1137
+ or <code>boost search --collapse-near-duplicates</code> — rather than replacing
1138
+ <code>dedupe_by_content</code>'s output on the default path. Two things this card asks for are still
1139
+ open, and both need a real embedding backend (a built dense index, over a real multi-tap corpus)
1140
+ that the environment this was implemented in cannot reach — no network path to an embeddings
1141
+ provider or to the local ONNX model download, confirmed rather than assumed: <code>huggingface.co</code>
1142
+ and <code>pypi.org</code> both refuse at the network policy layer. <b>First</b>, the safety proof
1143
+ this card itself demands before defaulting the mechanism on &mdash; &ldquo;over a real corpus, at
1144
+ the chosen threshold, count clusters spanning more than one meaning&rdquo; &mdash; has not been run;
1145
+ <code>NEAR_DUPLICATE_THRESHOLD = 0.97</code> is a starting point, not a validated floor. <b>Second</b>,
1146
+ re-measuring the <code>exa search</code> case (and per-query maxima generally) against the fix needs
1147
+ that same corpus and index. Whoever runs that measurement should flip the CLI flag's default, fold
1148
+ the corpus count into this card's evidence, and only then consider this shipped.</p>
1124
1149
  <div class="meta">
1125
1150
  <span class="m">Complexity <b>M</b></span>
1126
1151
  <span class="m hi">Impact <b>High</b></span>
1127
1152
  <span class="m">Wow <b class="wow">★★★★</b></span>
1128
- <span class="m">10 of 10 slots on a real 466-tap install, all past byte-identical dedup</span>
1153
+ <span class="m">mechanism + tests shipped opt-in; corpus safety proof and default-on still open</span>
1129
1154
  </div>
1130
1155
  </article>
1131
1156
  <!-- /ROADMAP:cards -->
@@ -264,6 +264,16 @@ class TestSearch:
264
264
  r = boost("search", "x", "--limit", "abc", expect=2)
265
265
  assert "invalid int value: 'abc'" in r.err
266
266
 
267
+ def test_collapse_near_duplicates_flag_is_a_no_op_without_a_dense_store(
268
+ self, boost, tapped):
269
+ # Opt-in and unwired into the default path (see
270
+ # rag.NEAR_DUPLICATE_THRESHOLD): with no dense index built, the flag
271
+ # must parse and change nothing about a plain BM25 search.
272
+ with_flag = boost("search", "commit", "messages",
273
+ "--collapse-near-duplicates")
274
+ without_flag = boost("search", "commit", "messages")
275
+ assert with_flag.out == without_flag.out
276
+
267
277
 
268
278
  # ---------------------------------------------------------------- index
269
279
 
@@ -0,0 +1,121 @@
1
+ # Copyright the boost contributors.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ """`dense.entry_vectors`: one representative embedding per entry.
4
+
5
+ Feeds `rag.collapse_near_duplicate_hits`, which needs a vector per *entry*
6
+ (keyed by ``(tap, path)``) rather than per chunk. The lowest-``cix`` chunk —
7
+ the name+description chunk `rag.chunk` always emits first — is the
8
+ representative, fetched from `vec_raw` through `chunks_entry`, the same index
9
+ `_ensure_schema` documents as the reason that table is a plain rowid-keyed
10
+ table rather than a `vec0` one: an ``id IN (...)`` against `vec0` plans as a
11
+ full scan (see `dense._knn`).
12
+
13
+ The 8-d toy fixture is shared with `test_dense_quantized.py`'s premise: 8 is
14
+ the smallest width `bit[N]` accepts, so this is the quantized layout — the
15
+ only one `entry_vectors` supports (a legacy float32 store has no cheap way to
16
+ look up an arbitrary vector by id, and returns `{}` there, same as the rest of
17
+ this module degrades on that path).
18
+ """
19
+ from __future__ import annotations
20
+
21
+ import math
22
+ import sqlite3
23
+
24
+ import pytest
25
+
26
+ from boost_cli.core import dense, embed, rag
27
+
28
+
29
+ def _vec_loadable() -> bool:
30
+ con = sqlite3.connect(":memory:")
31
+ try:
32
+ import sqlite_vec
33
+ con.enable_load_extension(True)
34
+ sqlite_vec.load(con)
35
+ con.enable_load_extension(False)
36
+ con.execute("create virtual table t using vec0(embedding bit[8])")
37
+ return True
38
+ except Exception:
39
+ return False
40
+ finally:
41
+ con.close()
42
+
43
+
44
+ pytestmark = pytest.mark.skipif(
45
+ not _vec_loadable(), reason="sqlite-vec extension not loadable here")
46
+
47
+
48
+ def _vec_for(seed: int) -> list[float]:
49
+ v = [math.sin(seed * 1.7 + i * 0.9) for i in range(8)]
50
+ n = math.sqrt(sum(x * x for x in v)) or 1.0
51
+ return [x / n for x in v]
52
+
53
+
54
+ _BODIES = {"skill-%02d" % i: "body of skill %02d" % i for i in range(4)}
55
+ _VEC = {name: _vec_for(i) for i, name in enumerate(sorted(_BODIES))}
56
+
57
+
58
+ def _toy_embed(texts, input_type=None, timeout=60):
59
+ return [_VEC.get(t.split("\n", 1)[0].strip(), _vec_for(999)) for t in texts]
60
+
61
+
62
+ def _e(name, tap="acme/skills"):
63
+ return {"name": name, "tap": tap, "kind": "skill",
64
+ "skill_md": "skills/%s/SKILL.md" % name}
65
+
66
+
67
+ _ENTRIES = [_e(n) for n in sorted(_BODIES)]
68
+
69
+
70
+ @pytest.fixture()
71
+ def dense_env(sandbox, monkeypatch):
72
+ monkeypatch.setattr(embed, "embed", _toy_embed)
73
+ monkeypatch.setattr(embed, "provider", lambda: "openai")
74
+ monkeypatch.setattr(embed, "model", lambda: "toy-8")
75
+ monkeypatch.setattr(embed, "dimension", lambda: 8)
76
+ monkeypatch.setattr(embed, "available", lambda: True)
77
+ monkeypatch.setattr(rag, "_tap_paths", lambda: {"acme/skills": "/x"})
78
+ monkeypatch.setattr(rag, "_tap_commits", lambda: {"acme__skills": "c1"})
79
+ monkeypatch.setattr(dense, "read_body", lambda e, tp=None: e["name"])
80
+ return monkeypatch
81
+
82
+
83
+ class TestEntryVectors:
84
+ def test_returns_the_stored_vector_for_each_entry(self, dense_env):
85
+ dense.build(entries=_ENTRIES, force=True)
86
+ keys = [("acme/skills", e["skill_md"]) for e in _ENTRIES]
87
+ got = dense.entry_vectors(keys)
88
+ assert set(got) == set(keys)
89
+
90
+ def test_the_vector_decodes_to_the_embedding_that_was_stored(self, dense_env):
91
+ dense.build(entries=_ENTRIES, force=True)
92
+ key = ("acme/skills", "skills/skill-00/SKILL.md")
93
+ got = dense.entry_vectors([key])
94
+ decoded = rag._decode_vector(got[key])
95
+ expected = _VEC["skill-00"]
96
+ assert all(math.isclose(a, b, abs_tol=1e-5)
97
+ for a, b in zip(decoded, expected, strict=True))
98
+
99
+ def test_an_unknown_entry_is_absent_from_the_result(self, dense_env):
100
+ dense.build(entries=_ENTRIES, force=True)
101
+ got = dense.entry_vectors([("acme/skills", "skills/nope/SKILL.md")])
102
+ assert got == {}
103
+
104
+ def test_empty_input_is_empty_output(self, dense_env):
105
+ dense.build(entries=_ENTRIES, force=True)
106
+ assert dense.entry_vectors([]) == {}
107
+
108
+ def test_no_store_at_all_degrades_to_empty(self, sandbox):
109
+ assert dense.entry_vectors([("t", "p")]) == {}
110
+
111
+ def test_a_non_quantized_store_degrades_to_empty(self, sandbox, monkeypatch):
112
+ # `dim=3` keeps the legacy float32 layout (see `_quantizable`); that
113
+ # layout has no cheap per-id lookup, so this must not attempt one.
114
+ monkeypatch.setattr(embed, "dimension", lambda: 3)
115
+ con = dense._connect()
116
+ try:
117
+ dense._ensure_schema(con, 3)
118
+ con.commit()
119
+ finally:
120
+ con.close()
121
+ assert dense.entry_vectors([("t", "p")]) == {}