boost-skill-cli 1.2.72__tar.gz → 1.2.74__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 (950) hide show
  1. {boost_skill_cli-1.2.72/boost_skill_cli.egg-info → boost_skill_cli-1.2.74}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/discovery.py +9 -1
  4. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/dense.py +45 -0
  5. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/rag.py +108 -8
  6. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  7. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
  8. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/commands.html +4 -3
  9. boost_skill_cli-1.2.74/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +146 -0
  10. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap.html +79 -3
  11. boost_skill_cli-1.2.74/scripts/measure_near_duplicate_bound.py +179 -0
  12. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_discovery.py +10 -0
  13. boost_skill_cli-1.2.74/tests/unit/test_dense_entry_vectors.py +121 -0
  14. boost_skill_cli-1.2.74/tests/unit/test_near_duplicate_collapse.py +191 -0
  15. boost_skill_cli-1.2.74/tests/unit/test_retrieve_any_near_duplicates.py +93 -0
  16. boost_skill_cli-1.2.72/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -69
  17. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.gitattributes +0 -0
  18. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.gitignore +0 -0
  19. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.gitleaks.toml +0 -0
  20. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.htmlvalidate.json +0 -0
  21. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.lighthouserc.json +0 -0
  22. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.lycheeignore +0 -0
  23. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.markdownlint-cli2.jsonc +0 -0
  24. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.pre-commit-config.yaml +0 -0
  25. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.stylelintrc.json +0 -0
  26. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.vale/styles/boost/AIWriting.yml +0 -0
  27. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.vale/styles/boost/Terminology.yml +0 -0
  28. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  29. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/.vale.ini +0 -0
  30. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/CLAUDE.md +0 -0
  31. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/CODE_OF_CONDUCT.md +0 -0
  32. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/CONTRIBUTING.md +0 -0
  33. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/DCO +0 -0
  34. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/GOVERNANCE.md +0 -0
  35. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/LICENSE +0 -0
  36. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/MAINTAINERS.md +0 -0
  37. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/MANIFEST.in +0 -0
  38. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/Makefile +0 -0
  39. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/README.md +0 -0
  40. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/SECURITY.md +0 -0
  41. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/SUPPORT.md +0 -0
  42. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost +0 -0
  43. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/__init__.py +0 -0
  44. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/__main__.py +0 -0
  45. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/cli.py +0 -0
  46. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/cliparse.py +0 -0
  47. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/__init__.py +0 -0
  48. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/_common.py +0 -0
  49. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/bmad.py +0 -0
  50. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/configuration.py +0 -0
  51. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/hooks.py +0 -0
  52. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/info.py +0 -0
  53. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/intelligence.py +0 -0
  54. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/pkg.py +0 -0
  55. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/quality.py +0 -0
  56. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/quickstart.py +0 -0
  57. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/run.py +0 -0
  58. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/safety.py +0 -0
  59. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/taps.py +0 -0
  60. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/commands/team.py +0 -0
  61. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/__init__.py +0 -0
  62. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/adapters.py +0 -0
  63. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/agents.py +0 -0
  64. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/ai.py +0 -0
  65. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/aihost.py +0 -0
  66. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/bmad.py +0 -0
  67. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/bootstrap.py +0 -0
  68. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/browse.py +0 -0
  69. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/builtin.py +0 -0
  70. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/capabilities.py +0 -0
  71. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/catalog.py +0 -0
  72. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/catalogbundle.py +0 -0
  73. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/chat.py +0 -0
  74. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/claude_settings.py +0 -0
  75. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/complete.py +0 -0
  76. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/config.py +0 -0
  77. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/ed25519.py +0 -0
  78. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/embed.py +0 -0
  79. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/faithfulness.py +0 -0
  80. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/frontmatter.py +0 -0
  81. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/gitutil.py +0 -0
  82. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/hookhost.py +0 -0
  83. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/imperative.py +0 -0
  84. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/injectscan.py +0 -0
  85. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/installscan.py +0 -0
  86. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/integrity.py +0 -0
  87. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/journal.py +0 -0
  88. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/localembed.py +0 -0
  89. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/lockfile.py +0 -0
  90. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/logs.py +0 -0
  91. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/mcp.py +0 -0
  92. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/mcpdecl.py +0 -0
  93. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/mcphost.py +0 -0
  94. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/minisign.py +0 -0
  95. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/nethttp.py +0 -0
  96. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/output.py +0 -0
  97. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/paths.py +0 -0
  98. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/policy.py +0 -0
  99. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/projectlock.py +0 -0
  100. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/provenance.py +0 -0
  101. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/registry.py +0 -0
  102. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/resolve.py +0 -0
  103. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/rules.py +0 -0
  104. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/scopes.py +0 -0
  105. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/secretscan.py +0 -0
  106. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/selfupdate.py +0 -0
  107. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/serve.py +0 -0
  108. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/shards.py +0 -0
  109. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/stackprobe.py +0 -0
  110. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/staleness.py +0 -0
  111. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/store.py +0 -0
  112. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/trustaudit.py +0 -0
  113. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/typosquat.py +0 -0
  114. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/updatediff.py +0 -0
  115. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/util.py +0 -0
  116. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/core/workflows.py +0 -0
  117. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/data/registries.json +0 -0
  118. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/data/rules/boost-first.mdc +0 -0
  119. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/errors.py +0 -0
  120. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_cli/spin.py +0 -0
  121. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_langchain/__init__.py +0 -0
  122. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_langchain/_compat.py +0 -0
  123. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_langchain/graph.py +0 -0
  124. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_langchain/loader.py +0 -0
  125. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_langchain/py.typed +0 -0
  126. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_langchain/retriever.py +0 -0
  127. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  128. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  129. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_skill_cli.egg-info/requires.txt +0 -0
  130. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/boost_skill_cli.egg-info/top_level.txt +0 -0
  131. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/codecov.yml +0 -0
  132. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/.claude/settings.local.json +0 -0
  133. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/DEBUGGING.md +0 -0
  134. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/adapters.html +0 -0
  135. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/architecture/README.md +0 -0
  136. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/architecture/c4-components-core.md +0 -0
  137. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/architecture/c4-containers.md +0 -0
  138. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/architecture/c4-context.md +0 -0
  139. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/architecture/c4-dynamic-install.md +0 -0
  140. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/bmad.md +0 -0
  141. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/gifs/distill.gif +0 -0
  142. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/gifs/doctor.gif +0 -0
  143. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/gifs/explain.gif +0 -0
  144. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/gifs/hooks.gif +0 -0
  145. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/gifs/install.gif +0 -0
  146. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/gifs/pulse.gif +0 -0
  147. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/gifs/search.gif +0 -0
  148. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/gifs/tap.gif +0 -0
  149. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/tapes/distill.tape +0 -0
  150. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/tapes/doctor.tape +0 -0
  151. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/tapes/explain.tape +0 -0
  152. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/tapes/hooks.tape +0 -0
  153. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/tapes/install.tape +0 -0
  154. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/tapes/pulse.tape +0 -0
  155. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/tapes/search.tape +0 -0
  156. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel/tapes/tap.tape +0 -0
  157. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/carousel.html +0 -0
  158. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/chat.html +0 -0
  159. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/code-review.md +0 -0
  160. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/commit-audit.md +0 -0
  161. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/demo-index.json +0 -0
  162. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/demo.gif +0 -0
  163. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/demo.html +0 -0
  164. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/demo.tape +0 -0
  165. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/dependencies.md +0 -0
  166. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/design-roadmap.html +0 -0
  167. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/eval-latest.json +0 -0
  168. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/eval.html +0 -0
  169. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/index.html +0 -0
  170. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/langchain.html +0 -0
  171. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/mcp-hub.html +0 -0
  172. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/openssf-badge.md +0 -0
  173. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/openssf-playbook.md +0 -0
  174. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/rag-architecture.md +0 -0
  175. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D01.md +0 -0
  176. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D02.md +0 -0
  177. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D03.md +0 -0
  178. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D04.md +0 -0
  179. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D05.md +0 -0
  180. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D06.md +0 -0
  181. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D07.md +0 -0
  182. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D08.md +0 -0
  183. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D09.md +0 -0
  184. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D10.md +0 -0
  185. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D11.md +0 -0
  186. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D12.md +0 -0
  187. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D13.md +0 -0
  188. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D14.md +0 -0
  189. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D15.md +0 -0
  190. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D16.md +0 -0
  191. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D17.md +0 -0
  192. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D18.md +0 -0
  193. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D19.md +0 -0
  194. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D20.md +0 -0
  195. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D21.md +0 -0
  196. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D22.md +0 -0
  197. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D23.md +0 -0
  198. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D24.md +0 -0
  199. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D25.md +0 -0
  200. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D26.md +0 -0
  201. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/BOOST-D27.md +0 -0
  202. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  203. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  204. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  205. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  206. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  207. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  208. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  209. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  210. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  211. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  212. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  213. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  214. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  215. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  216. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  217. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-attest-findings.md +0 -0
  218. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-audit-findings.md +0 -0
  219. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-bmad-findings.md +0 -0
  220. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-browse-findings.md +0 -0
  221. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  222. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  223. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  224. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  225. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-chat-findings.md +0 -0
  226. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  227. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  228. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  229. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-completions-findings.md +0 -0
  230. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-config-findings.md +0 -0
  231. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  232. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-context-findings.md +0 -0
  233. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  234. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
  235. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-create-findings.md +0 -0
  236. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  237. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-deps-findings.md +0 -0
  238. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-discover-findings.md +0 -0
  239. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  240. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  241. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-drift-findings.md +0 -0
  242. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  243. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-edit-findings.md +0 -0
  244. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  245. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-explain-findings.md +0 -0
  246. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-export-findings.md +0 -0
  247. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  248. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  249. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  250. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  251. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  252. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-health-findings.md +0 -0
  253. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  254. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  255. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-import-findings.md +0 -0
  256. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-index-findings.md +0 -0
  257. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  258. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  259. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-install-findings.md +0 -0
  260. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  261. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  262. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-lint-findings.md +0 -0
  263. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-log-findings.md +0 -0
  264. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  265. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  266. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  267. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  268. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
  269. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  270. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  271. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  272. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  273. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  274. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  275. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-policy-findings.md +0 -0
  276. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-preview-findings.md +0 -0
  277. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-profile-findings.md +0 -0
  278. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  279. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  280. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  281. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  282. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  283. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  284. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  285. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  286. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  287. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-replay-findings.md +0 -0
  288. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-root-findings.md +0 -0
  289. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  290. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-run-findings.md +0 -0
  291. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  292. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-search-findings.md +0 -0
  293. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  294. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
  295. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
  296. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  297. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  298. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  299. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
  300. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  301. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-sync-findings.md +0 -0
  302. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-tag-findings.md +0 -0
  303. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  304. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-tap-findings.md +0 -0
  305. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-taps-findings.md +0 -0
  306. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  307. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-test-findings.md +0 -0
  308. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-trust-findings.md +0 -0
  309. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  310. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  311. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-untap-findings.md +0 -0
  312. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-update-findings.md +0 -0
  313. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  314. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-verify-findings.md +0 -0
  315. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/audit-who-findings.md +0 -0
  316. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  317. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  318. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  319. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  320. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  321. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  322. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/boost-first-rule.md +0 -0
  323. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  324. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  325. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/branch-current-gate.md +0 -0
  326. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  327. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  328. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  329. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  330. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  331. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  332. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  333. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  334. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  335. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  336. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  337. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  338. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  339. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  340. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  341. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  342. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/cli-command-audit.md +0 -0
  343. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  344. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  345. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  346. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  347. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/command-carousel-page.md +0 -0
  348. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  349. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  350. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  351. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  352. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  353. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  354. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  355. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  356. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  357. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  358. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  359. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  360. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  361. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  362. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  363. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  364. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  365. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  366. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  367. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  368. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  369. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  370. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  371. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  372. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  373. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  374. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  375. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  376. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  377. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  378. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  379. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  380. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  381. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  382. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  383. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  384. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  385. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  386. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  387. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  388. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  389. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  390. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  391. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  392. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  393. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  394. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  395. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  396. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  397. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  398. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  399. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  400. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  401. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  402. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/github-community-health-files.md +0 -0
  403. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  404. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  405. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  406. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  407. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  408. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  409. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  410. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  411. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  412. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  413. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  414. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  415. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  416. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  417. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  418. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  419. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  420. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  421. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  422. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  423. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  424. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  425. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  426. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  427. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  428. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  429. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  430. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  431. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  432. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  433. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  434. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  435. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  436. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  437. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  438. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  439. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  440. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  441. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  442. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  443. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  444. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  445. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  446. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  447. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  448. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  449. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  450. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  451. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  452. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  453. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  454. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  455. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  456. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  457. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  458. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  459. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  460. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  461. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  462. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  463. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  464. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  465. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  466. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  467. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  468. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  469. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  470. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  471. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  472. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  473. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  474. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  475. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  476. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  477. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  478. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  479. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  480. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  481. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/openssf-playbook.md +0 -0
  482. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/openssf-silver.md +0 -0
  483. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  484. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  485. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  486. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  487. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  488. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  489. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  490. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  491. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  492. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  493. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  494. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  495. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  496. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  497. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  498. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  499. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  500. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  501. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  502. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  503. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  504. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  505. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  506. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  507. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  508. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  509. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  510. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  511. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  512. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  513. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  514. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  515. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/relicence-apache-2.md +0 -0
  516. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  517. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  518. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  519. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  520. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  521. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  522. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  523. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  524. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  525. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  526. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  527. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  528. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  529. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  530. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  531. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  532. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  533. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  534. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  535. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  536. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  537. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  538. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  539. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  540. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  541. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  542. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  543. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  544. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  545. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  546. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  547. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  548. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  549. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  550. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  551. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  552. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  553. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  554. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  555. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  556. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  557. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  558. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  559. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  560. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  561. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  562. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  563. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  564. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  565. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  566. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  567. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  568. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  569. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  570. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  571. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  572. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  573. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  574. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  575. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  576. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  577. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  578. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  579. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  580. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  581. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  582. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  583. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  584. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  585. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  586. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  587. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  588. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  589. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  590. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  591. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  592. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  593. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  594. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  595. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  596. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  597. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  598. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/workspace-scope-install.md +0 -0
  599. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/zip-strict-audit.md +0 -0
  600. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  601. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  602. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/security-design.md +0 -0
  603. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/semantic-search.md +0 -0
  604. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  605. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/verifying-releases.md +0 -0
  606. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/vex/meta.md +0 -0
  607. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/vex/openvex.json +0 -0
  608. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  609. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  610. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  611. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  612. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/eslint.config.mjs +0 -0
  613. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/README.md +0 -0
  614. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/__init__.py +0 -0
  615. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/baseline.json +0 -0
  616. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/faithfulness.py +0 -0
  617. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/golden_set.json +0 -0
  618. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/make_corpus.py +0 -0
  619. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/make_golden.py +0 -0
  620. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/metrics.py +0 -0
  621. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/publish_golden_dataset.py +0 -0
  622. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/evals/run_evals.py +0 -0
  623. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/examples/README.md +0 -0
  624. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/examples/adapt-demo.sh +0 -0
  625. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/examples/boost-run-prototype.sh +0 -0
  626. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/index.html +0 -0
  627. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/noxfile.py +0 -0
  628. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/pyproject.toml +0 -0
  629. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/coverage-tools.in +0 -0
  630. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/coverage-tools.txt +0 -0
  631. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/lint-tools.in +0 -0
  632. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/lint-tools.txt +0 -0
  633. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/mutation-tools.in +0 -0
  634. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/mutation-tools.txt +0 -0
  635. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/platform-pins.lock +0 -0
  636. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/release-tools.in +0 -0
  637. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/release-tools.txt +0 -0
  638. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/test-tools.in +0 -0
  639. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/requirements/test-tools.txt +0 -0
  640. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/a11y_check.py +0 -0
  641. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/add_spdx_headers.py +0 -0
  642. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/bench_cli.sh +0 -0
  643. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/build_command_reference.py +0 -0
  644. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/build_demo_index.py +0 -0
  645. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/build_registries.py +0 -0
  646. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/build_roadmap.py +0 -0
  647. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/build_scale_corpus.py +0 -0
  648. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/build_vex.py +0 -0
  649. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/check_anchors.py +0 -0
  650. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/check_branch_current.py +0 -0
  651. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/check_dco.py +0 -0
  652. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/check_licenses.py +0 -0
  653. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/check_reproducible.py +0 -0
  654. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/check_required_checks.py +0 -0
  655. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/ensure_eval_corpus.sh +0 -0
  656. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/eval_corpus.py +0 -0
  657. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/eval_explain.py +0 -0
  658. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/eval_gate.py +0 -0
  659. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/eval_recommend.py +0 -0
  660. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/eval_retrieval.py +0 -0
  661. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/eval_stats_summary.py +0 -0
  662. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/eval_tools.py +0 -0
  663. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/import_budget.py +0 -0
  664. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/lock_toolchain.py +0 -0
  665. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/measure_registry.py +0 -0
  666. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/mutation_gate.py +0 -0
  667. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/mutation_shards.py +0 -0
  668. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/mutation_weights.json +0 -0
  669. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/normalize_sdist.py +0 -0
  670. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/page_budget.py +0 -0
  671. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/perf_gate.py +0 -0
  672. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/post_deploy_smoke.py +0 -0
  673. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/publish_eval_json.py +0 -0
  674. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/publish_shards.py +0 -0
  675. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/release_guard.py +0 -0
  676. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/release_preflight.py +0 -0
  677. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/serve_docs.py +0 -0
  678. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/scripts/shard_plan.py +0 -0
  679. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/setup.cfg +0 -0
  680. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/sonar-project.properties +0 -0
  681. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/style/README.md +0 -0
  682. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/style/boost.css +0 -0
  683. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/style/boost.js +0 -0
  684. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/style/demo.html +0 -0
  685. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/adapt.feature +0 -0
  686. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/browse.feature +0 -0
  687. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/count.feature +0 -0
  688. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/discover.feature +0 -0
  689. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/doctor.feature +0 -0
  690. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/environment.py +0 -0
  691. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/explain.feature +0 -0
  692. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/index.feature +0 -0
  693. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/install.feature +0 -0
  694. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/list.feature +0 -0
  695. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/mcp.feature +0 -0
  696. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/search.feature +0 -0
  697. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/steps/cli_steps.py +0 -0
  698. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/steps/discovery_steps.py +0 -0
  699. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/steps/mcp_steps.py +0 -0
  700. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/bdd/features/steps/quality_steps.py +0 -0
  701. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/conftest.py +0 -0
  702. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/eval/baseline.json +0 -0
  703. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/eval/explain.jsonl +0 -0
  704. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  705. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/eval/golden-natural.jsonl +0 -0
  706. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/eval/golden.jsonl +0 -0
  707. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/eval/recommend.jsonl +0 -0
  708. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/eval/taps-scale.txt +0 -0
  709. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/eval/taps.txt +0 -0
  710. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/eval/tool_calls.jsonl +0 -0
  711. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_bmad_all_hosts.py +0 -0
  712. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_capabilities_policy.py +0 -0
  713. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_adapt.py +0 -0
  714. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_bmad.py +0 -0
  715. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_catalog.py +0 -0
  716. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_chat.py +0 -0
  717. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_configuration.py +0 -0
  718. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_hooks.py +0 -0
  719. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_hooks_gemini.py +0 -0
  720. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_info.py +0 -0
  721. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_intelligence.py +0 -0
  722. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_pane_width.py +0 -0
  723. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_pkg.py +0 -0
  724. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_quality.py +0 -0
  725. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_quickstart.py +0 -0
  726. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_tap_pins.py +0 -0
  727. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_taps.py +0 -0
  728. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_cli_team.py +0 -0
  729. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_everyday_loop.py +0 -0
  730. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_integrity_enforce.py +0 -0
  731. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_kind_conformance.py +0 -0
  732. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_property_parsers.py +0 -0
  733. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_run.py +0 -0
  734. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_tap_signing.py +0 -0
  735. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/functional/test_workspace_scope.py +0 -0
  736. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/README.md +0 -0
  737. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  738. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  739. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  740. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  741. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  742. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  743. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  744. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  745. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  746. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  747. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  748. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  749. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  750. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  751. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  752. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  753. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  754. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  755. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  756. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  757. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  758. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  759. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  760. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/fuzz_frontmatter.py +0 -0
  761. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/fuzz/fuzz_registry.py +0 -0
  762. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/langchain/conftest.py +0 -0
  763. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/langchain/test_graph.py +0 -0
  764. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/langchain/test_loader.py +0 -0
  765. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/langchain/test_retriever.py +0 -0
  766. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/make_fixture.py +0 -0
  767. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/perf/test_benchmarks.py +0 -0
  768. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/smoke.sh +0 -0
  769. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_a11y_check.py +0 -0
  770. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_action_pin_lockstep.py +0 -0
  771. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_adapters.py +0 -0
  772. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_adapters_multi.py +0 -0
  773. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_adapters_runner.py +0 -0
  774. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_agents.py +0 -0
  775. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_ai.py +0 -0
  776. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_aihost.py +0 -0
  777. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_bmad_core.py +0 -0
  778. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_boost_first_offer.py +0 -0
  779. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_bootstrap.py +0 -0
  780. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_bot_pr_dco.py +0 -0
  781. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_branch_current.py +0 -0
  782. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_browse.py +0 -0
  783. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_builtin.py +0 -0
  784. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_capabilities.py +0 -0
  785. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_catalog.py +0 -0
  786. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_catalogbundle.py +0 -0
  787. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_chat.py +0 -0
  788. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_check_anchors.py +0 -0
  789. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_check_dco.py +0 -0
  790. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_check_licenses.py +0 -0
  791. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_check_reproducible.py +0 -0
  792. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_claude_settings.py +0 -0
  793. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_clean_internal_cache.py +0 -0
  794. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_cli_update_shards.py +0 -0
  795. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_cliparse.py +0 -0
  796. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_codeql_analysis_key.py +0 -0
  797. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_command_reference_fresh.py +0 -0
  798. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_community_health_files.py +0 -0
  799. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_compact.py +0 -0
  800. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_complete.py +0 -0
  801. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_complete_rc_block.py +0 -0
  802. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_config.py +0 -0
  803. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_content_dedupe.py +0 -0
  804. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_content_identity.py +0 -0
  805. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_crash_redaction.py +0 -0
  806. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dedup_trust.py +0 -0
  807. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_demo_index.py +0 -0
  808. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense.py +0 -0
  809. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  810. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_embed_dedupe.py +0 -0
  811. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_entry_reuse.py +0 -0
  812. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_fallback.py +0 -0
  813. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_fix_hint.py +0 -0
  814. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_progress.py +0 -0
  815. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_quantized.py +0 -0
  816. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_ready_order.py +0 -0
  817. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_shard_real_schema.py +0 -0
  818. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  819. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_shards.py +0 -0
  820. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_status.py +0 -0
  821. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_status_cheap.py +0 -0
  822. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dense_vector_dedupe.py +0 -0
  823. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_dependabot_config.py +0 -0
  824. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_docs_pages_linked.py +0 -0
  825. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_docsite_chrome.py +0 -0
  826. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_ed25519.py +0 -0
  827. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_embed.py +0 -0
  828. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_embed_local.py +0 -0
  829. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_embed_truncated_response.py +0 -0
  830. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_entry_key.py +0 -0
  831. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_errors_and_cli_table.py +0 -0
  832. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_eval_baseline.py +0 -0
  833. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_eval_corpus.py +0 -0
  834. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_eval_faithfulness.py +0 -0
  835. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_eval_gate.py +0 -0
  836. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_eval_grading.py +0 -0
  837. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_eval_metrics.py +0 -0
  838. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_eval_stats_summary.py +0 -0
  839. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_eval_tools.py +0 -0
  840. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_eval_tools_probe.py +0 -0
  841. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  842. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_faithfulness.py +0 -0
  843. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_frontmatter.py +0 -0
  844. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_fuzz_targets.py +0 -0
  845. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  846. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_gitleaks_config.py +0 -0
  847. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_gitutil.py +0 -0
  848. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_gitutil_lfs.py +0 -0
  849. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_gitutil_sparse.py +0 -0
  850. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_gstack_coexistence.py +0 -0
  851. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_hook_settings_hosts.py +0 -0
  852. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_hookhost.py +0 -0
  853. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_imperative.py +0 -0
  854. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_import_budget.py +0 -0
  855. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_injectscan.py +0 -0
  856. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_install_permission_error.py +0 -0
  857. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_installscan.py +0 -0
  858. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_integrity.py +0 -0
  859. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_journal.py +0 -0
  860. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_langchain_packaging.py +0 -0
  861. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_link_ownership.py +0 -0
  862. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_localembed.py +0 -0
  863. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_localembed_e2e.py +0 -0
  864. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_lockfile.py +0 -0
  865. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_logs.py +0 -0
  866. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_marketing_counts.py +0 -0
  867. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_mcp.py +0 -0
  868. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_mcp_install_scan.py +0 -0
  869. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_mcp_read.py +0 -0
  870. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_mcpdecl.py +0 -0
  871. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_mcphost.py +0 -0
  872. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_measure_registry.py +0 -0
  873. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_minisign.py +0 -0
  874. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_mutation_hardening.py +0 -0
  875. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_mutation_shards.py +0 -0
  876. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_mutation_subfile_shards.py +0 -0
  877. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_mutmut_source_paths.py +0 -0
  878. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_nethttp.py +0 -0
  879. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_normalize_sdist.py +0 -0
  880. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_output.py +0 -0
  881. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_page_budget.py +0 -0
  882. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_paths.py +0 -0
  883. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_perf_gate.py +0 -0
  884. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_pkg_confusions.py +0 -0
  885. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_pkg_injection.py +0 -0
  886. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_pkg_secrets.py +0 -0
  887. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_platform_pins.py +0 -0
  888. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_policy.py +0 -0
  889. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_post_deploy_smoke.py +0 -0
  890. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_project_mcp_sidecar.py +0 -0
  891. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_projectlock.py +0 -0
  892. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_provenance.py +0 -0
  893. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_publish_golden_dataset.py +0 -0
  894. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_rag.py +0 -0
  895. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_rag_fastpath.py +0 -0
  896. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_rag_fusion.py +0 -0
  897. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_registries_fresh.py +0 -0
  898. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_registry.py +0 -0
  899. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_registry_categories.py +0 -0
  900. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_registry_control_chars.py +0 -0
  901. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_registry_parallel.py +0 -0
  902. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_release_guard.py +0 -0
  903. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_release_preflight.py +0 -0
  904. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_required_checks.py +0 -0
  905. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_rerank_cache.py +0 -0
  906. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_resolve.py +0 -0
  907. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_roadmap_fresh.py +0 -0
  908. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_rules.py +0 -0
  909. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_scale_corpus.py +0 -0
  910. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_scopes.py +0 -0
  911. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_secretscan.py +0 -0
  912. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_selfupdate.py +0 -0
  913. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_serve.py +0 -0
  914. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_serve_docs.py +0 -0
  915. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_shard_plan.py +0 -0
  916. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_shards.py +0 -0
  917. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_shards_incremental.py +0 -0
  918. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_shards_ingest.py +0 -0
  919. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_shards_matrix.py +0 -0
  920. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_smoke_covers_every_command.py +0 -0
  921. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_spdx_headers.py +0 -0
  922. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_spin.py +0 -0
  923. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_stackprobe.py +0 -0
  924. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_staleness.py +0 -0
  925. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_store.py +0 -0
  926. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_store_materialize.py +0 -0
  927. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_sync_blocked_links.py +0 -0
  928. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  929. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_tap_pins.py +0 -0
  930. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_token_parity.py +0 -0
  931. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_toolchain_lock.py +0 -0
  932. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_trustaudit.py +0 -0
  933. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_typosquat.py +0 -0
  934. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_updatediff.py +0 -0
  935. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_util.py +0 -0
  936. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_version.py +0 -0
  937. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_version_tags.py +0 -0
  938. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_vex.py +0 -0
  939. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_visual_harness_flags.py +0 -0
  940. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_workflow_concurrency.py +0 -0
  941. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  942. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  943. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_workflow_timeouts.py +0 -0
  944. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_workflows.py +0 -0
  945. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  946. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/visual/a11y_check.mjs +0 -0
  947. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/visual/console_check.mjs +0 -0
  948. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/visual/package-lock.json +0 -0
  949. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/tests/visual/package.json +0 -0
  950. {boost_skill_cli-1.2.72 → boost_skill_cli-1.2.74}/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.74
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.74'
22
+ __version_tuple__ = version_tuple = (1, 2, 74)
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.74
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -657,6 +657,7 @@ scripts/eval_stats_summary.py
657
657
  scripts/eval_tools.py
658
658
  scripts/import_budget.py
659
659
  scripts/lock_toolchain.py
660
+ scripts/measure_near_duplicate_bound.py
660
661
  scripts/measure_registry.py
661
662
  scripts/mutation_gate.py
662
663
  scripts/mutation_shards.py
@@ -803,6 +804,7 @@ tests/unit/test_dense.py
803
804
  tests/unit/test_dense_boilerplate_cluster.py
804
805
  tests/unit/test_dense_embed_dedupe.py
805
806
  tests/unit/test_dense_entry_reuse.py
807
+ tests/unit/test_dense_entry_vectors.py
806
808
  tests/unit/test_dense_fallback.py
807
809
  tests/unit/test_dense_fix_hint.py
808
810
  tests/unit/test_dense_progress.py
@@ -869,6 +871,7 @@ tests/unit/test_mutation_hardening.py
869
871
  tests/unit/test_mutation_shards.py
870
872
  tests/unit/test_mutation_subfile_shards.py
871
873
  tests/unit/test_mutmut_source_paths.py
874
+ tests/unit/test_near_duplicate_collapse.py
872
875
  tests/unit/test_nethttp.py
873
876
  tests/unit/test_normalize_sdist.py
874
877
  tests/unit/test_output.py
@@ -898,6 +901,7 @@ tests/unit/test_release_preflight.py
898
901
  tests/unit/test_required_checks.py
899
902
  tests/unit/test_rerank_cache.py
900
903
  tests/unit/test_resolve.py
904
+ tests/unit/test_retrieve_any_near_duplicates.py
901
905
  tests/unit/test_roadmap_fresh.py
902
906
  tests/unit/test_rules.py
903
907
  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>
@@ -0,0 +1,146 @@
1
+ ---
2
+ id: near-identical-copies-still-eat-the-slots
3
+ board: code
4
+ section: planned
5
+ status: inflight
6
+ owner: loop/near-dup-bound
7
+ category: Search · Ranking
8
+ complexity: M
9
+ impact: High
10
+ wow: 4
11
+ note: shipped opt-in (#639); bound measured (#645) and it refutes the zero-clusters test -- default-on now waits on a name-confusability veto
12
+ order: 131
13
+ title: Near-identical copies survive content-hash dedup and take the whole result page
14
+ ---
15
+ <a href="#near-duplicate-items-eat-the-result-slots">Content-hash dedup</a> shipped and worked:
16
+ <code>rag.dedupe_by_content</code> took duplicate result slots from <b>4.94 to 0.60 per query</b>
17
+ over a 77-tap corpus. That card closed naming one thing still open &mdash; <em>near-identical
18
+ rather than byte-identical clustering, where <code>core/typosquat.py</code>'s confusion machinery
19
+ would apply</em> &mdash; and buried it under a <code>shipped</code> status where nobody would claim
20
+ it. This card is that remainder, with a measurement that makes it look considerably worse than
21
+ &ldquo;refinement&rdquo;.
22
+
23
+ <b>Observed on a real 466-tap install</b> with hybrid RRF serving (658,131 chunks): for the query
24
+ <code>exa search</code>, every one of the top ten rows is <code>exa-search</code>, and the
25
+ descriptions are what give the
26
+ shape away &mdash; one Japanese (<code>Exa MCPによるウェブ、コード、企業調査</code>), two Chinese
27
+ (<code>通过Exa MCP进行神经搜索</code>), five English variants of <code>Neural search via Exa MCP</code>,
28
+ plus <code>Use Exa MCP for current web&hellip;</code> and <code>AI-powered web search&hellip;</code>.
29
+ All ten are <code>★ curated</code>. The footer reads
30
+ <code>51 matches &middot; ranked by hybrid RRF (BM25 + dense)</code>.
31
+
32
+ <b>Every one of those passed dedup correctly.</b> They are not byte-identical: they are the same
33
+ skill in Japanese, in Chinese, and in five English phrasings across different registries. The body
34
+ digest differs, so <code>dedupe_by_content</code> keeps them all &mdash; which is exactly the
35
+ behaviour <code>#366</code> proved must be preserved, since two entries sharing a name can be
36
+ genuinely different rules. The shipped fix is not misbehaving. It simply does not reach this shape.
37
+
38
+ <b>What the 0.60 residual actually was.</b> The prior card described its leftover as &ldquo;entries
39
+ sharing a <em>name</em> whose bodies genuinely differ, which must stay separate&rdquo; &mdash; true
40
+ as stated, and it reads as a rounding error. At 466 taps the same residual is a full result page.
41
+ The gap between 0.60 and 10.0 is worth understanding before designing anything: the 77-tap
42
+ measurement used 50 natural-language queries averaged, and an <em>average</em> hides the shape here.
43
+ Duplicate pressure was already known to be a step function of <em>which</em> registries are tapped
44
+ rather than how many; near-identical pressure looks like a step function of <b>which query</b> &mdash;
45
+ harmless across a query set, total on any query that lands on a widely-mirrored skill. Re-measure
46
+ per-query maxima, not means.
47
+
48
+ <b>The hard part is the safety proof, not the clustering.</b> Content hashing was adoptable because
49
+ one count settled it: of 14,153 distinct bodies, clusters spanning more than one name numbered
50
+ <b>zero</b>, so collapsing could not merge two different skills. Near-identical clustering has no
51
+ such free proof &mdash; any similarity threshold loose enough to merge a Japanese translation with
52
+ its English original is loose enough to merge two genuinely different skills that share boilerplate.
53
+ Establish the equivalent bound first (over a real corpus, at the chosen threshold, count clusters
54
+ spanning more than one <em>meaning</em>) or the fix trades a visible problem for a silent one.
55
+
56
+ <b>Three things to get right.</b> <em>Translations are the motivating case and the hardest</em>: they
57
+ share almost no tokens with the original, so token-overlap similarity will not find them while an
58
+ embedding will &mdash; and the vectors are already on disk, which makes this cheaper here than it
59
+ would be anywhere else. <em>Collapse before <code>k</code></em>, and at both the
60
+ <code>retrieve</code> and <code>retrieve_any</code> seams, for the reason the shipped dedup already
61
+ documents: fusion reintroduces copies either engine dropped, because the copies are distinct
62
+ <code>(tap, skill_md)</code> keys and RRF has no reason to treat them as one. <em>The existing
63
+ quality prior carries over unchanged</em> &mdash; <code>rag.source_rank</code> orders on the user's
64
+ <code>curated</code> flag first and shipped <code>confidence</code> second, and choosing among
65
+ near-identical copies is the same question as choosing among identical ones: where should the user
66
+ install from.
67
+
68
+ <b>Not to be confused with <code>#629</code></b>, which deduplicated vector <em>storage</em> (one
69
+ row per distinct embedding, 39.7% repeats reclaimed). That is a disk-size fix beneath the index and
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.
96
+
97
+ <b>The bound has now been measured, and it says the acceptance test in this card is the wrong
98
+ one.</b> <code>scripts/measure_near_duplicate_bound.py</code> runs the count this card asks for
99
+ against the pinned 20-repo eval corpus (10,152 entries, 104,271 chunks, <code>BAAI/bge-small-en-v1.5</code>
100
+ at 384-d). Those entries reduce to <b>5,714 distinct chunk-0 vectors</b> &mdash; 44% of entries
101
+ already share a chunk-0 embedding byte for byte &mdash; and at
102
+ <code>NEAR_DUPLICATE_THRESHOLD = 0.97</code>, 162 pairs clear the threshold and <b>56 clusters span
103
+ more than one name</b>. Sweeping the threshold moves that number but never to zero: 0.96 &rarr; 91,
104
+ 0.97 &rarr; 56, 0.98 &rarr; 28, 0.99 &rarr; 13, 0.995 &rarr; 8, 0.999 &rarr; 4.
105
+
106
+ <b>Four of those 56 are not the threshold's doing at all.</b> They are clusters of a single vector
107
+ shared by several names, so they cluster at <em>any</em> threshold, which is why the sweep bottoms
108
+ out at 4 rather than 0. The largest is the same at every threshold and is worth naming: <b>28
109
+ differently-named agents from one tap</b> (<code>affaan-m/ECC</code> &mdash; <code>architect</code>,
110
+ <code>code-reviewer</code>, <code>chief-of-staff</code>, <code>database-reviewer</code>,
111
+ <code>e2e-runner</code>, &hellip;) whose chunk 0 is the same Spanish preamble
112
+ (<code>No cambiar rol, persona ni identidad&hellip;</code>) in every file. Chunk 0 is
113
+ <code>name + description + opening of body</code>, and where a registry opens every file with
114
+ identical boilerplate, the name does not move the vector enough to separate them. <b>A floor exists
115
+ that no threshold can reach under</b>, so &ldquo;count must be zero&rdquo; was never achievable.
116
+
117
+ <b>Worse for the test: most of the other 52 are the feature working.</b> Hand-classifying all 56 at
118
+ 0.97, roughly two-thirds are genuinely one skill under two names &mdash; twelve are pure
119
+ hyphen-versus-underscore renderings of one integration (<code>zoho-mail</code> /
120
+ <code>zoho_mail</code>, <code>google_maps</code> / <code>google-maps</code>,
121
+ <code>anthropic_administrator</code> / <code>anthropic-administrator</code>), and the rest are
122
+ suffix variants of one document (<code>tdd</code> / <code>tdd-guide</code>,
123
+ <code>rust-review</code> / <code>rust-reviewer</code>, <code>testing-patterns</code> /
124
+ <code>code-showcase-testing-patterns</code>). Collapsing those is precisely what this card exists to
125
+ do. A metric that counts them as violations would reject every threshold that works.
126
+
127
+ <b>The dangerous merges have a shape, and this card already named it.</b> The ~20 clusters that are
128
+ real false merges are dominated by <em>near-miss brand names</em>: <code>coinmarketcal</code> with
129
+ <code>coinmarketcap</code>, <code>bugbug</code> with <code>bugsnag</code>, <code>parsehub</code>
130
+ with <code>parseur</code>, <code>linkhut</code> with <code>linkup</code>,
131
+ <code>mx-technologies</code> with <code>mx-toolbox</code>,
132
+ <code>salesforce-marketing-cloud</code> with <code>salesforce-service-cloud</code>. These are
133
+ distinct products whose descriptions are boilerplate around a swapped word. That is the
134
+ <code>core/typosquat.py</code> confusion shape this card's opening paragraph pointed at, arrived at
135
+ independently from the other end: the guard this needs is not a tighter cosine floor but a
136
+ <em>name-confusability veto</em> &mdash; refuse to collapse two entries whose names are a confusable
137
+ edit apart, however close their vectors sit.
138
+
139
+ <b>So the default stays off, for a better-supported reason than before.</b> The measurement does not
140
+ say 0.97 is too loose; it says similarity alone cannot separate <code>tdd</code>/<code>tdd-guide</code>
141
+ (collapse) from <code>coinmarketcal</code>/<code>coinmarketcap</code> (never collapse), because both
142
+ pairs sit in the same cosine band. Flipping the default needs the confusability veto first, and a
143
+ re-count with it applied. <b>And this bound is space-specific</b>: it was measured in
144
+ <code>bge-small</code> 384-d, while a keyed production install is <code>voyage-4</code> at 1024-d.
145
+ Cosine thresholds do not transfer between embedding spaces &mdash; rerun the script against each
146
+ space before trusting a number in it.
@@ -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,88 @@ 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.
1149
+
1150
+ <b>The bound has now been measured, and it says the acceptance test in this card is the wrong
1151
+ one.</b> <code>scripts/measure_near_duplicate_bound.py</code> runs the count this card asks for
1152
+ against the pinned 20-repo eval corpus (10,152 entries, 104,271 chunks, <code>BAAI/bge-small-en-v1.5</code>
1153
+ at 384-d). Those entries reduce to <b>5,714 distinct chunk-0 vectors</b> &mdash; 44% of entries
1154
+ already share a chunk-0 embedding byte for byte &mdash; and at
1155
+ <code>NEAR_DUPLICATE_THRESHOLD = 0.97</code>, 162 pairs clear the threshold and <b>56 clusters span
1156
+ more than one name</b>. Sweeping the threshold moves that number but never to zero: 0.96 &rarr; 91,
1157
+ 0.97 &rarr; 56, 0.98 &rarr; 28, 0.99 &rarr; 13, 0.995 &rarr; 8, 0.999 &rarr; 4.
1158
+
1159
+ <b>Four of those 56 are not the threshold's doing at all.</b> They are clusters of a single vector
1160
+ shared by several names, so they cluster at <em>any</em> threshold, which is why the sweep bottoms
1161
+ out at 4 rather than 0. The largest is the same at every threshold and is worth naming: <b>28
1162
+ differently-named agents from one tap</b> (<code>affaan-m/ECC</code> &mdash; <code>architect</code>,
1163
+ <code>code-reviewer</code>, <code>chief-of-staff</code>, <code>database-reviewer</code>,
1164
+ <code>e2e-runner</code>, &hellip;) whose chunk 0 is the same Spanish preamble
1165
+ (<code>No cambiar rol, persona ni identidad&hellip;</code>) in every file. Chunk 0 is
1166
+ <code>name + description + opening of body</code>, and where a registry opens every file with
1167
+ identical boilerplate, the name does not move the vector enough to separate them. <b>A floor exists
1168
+ that no threshold can reach under</b>, so &ldquo;count must be zero&rdquo; was never achievable.
1169
+
1170
+ <b>Worse for the test: most of the other 52 are the feature working.</b> Hand-classifying all 56 at
1171
+ 0.97, roughly two-thirds are genuinely one skill under two names &mdash; twelve are pure
1172
+ hyphen-versus-underscore renderings of one integration (<code>zoho-mail</code> /
1173
+ <code>zoho_mail</code>, <code>google_maps</code> / <code>google-maps</code>,
1174
+ <code>anthropic_administrator</code> / <code>anthropic-administrator</code>), and the rest are
1175
+ suffix variants of one document (<code>tdd</code> / <code>tdd-guide</code>,
1176
+ <code>rust-review</code> / <code>rust-reviewer</code>, <code>testing-patterns</code> /
1177
+ <code>code-showcase-testing-patterns</code>). Collapsing those is precisely what this card exists to
1178
+ do. A metric that counts them as violations would reject every threshold that works.
1179
+
1180
+ <b>The dangerous merges have a shape, and this card already named it.</b> The ~20 clusters that are
1181
+ real false merges are dominated by <em>near-miss brand names</em>: <code>coinmarketcal</code> with
1182
+ <code>coinmarketcap</code>, <code>bugbug</code> with <code>bugsnag</code>, <code>parsehub</code>
1183
+ with <code>parseur</code>, <code>linkhut</code> with <code>linkup</code>,
1184
+ <code>mx-technologies</code> with <code>mx-toolbox</code>,
1185
+ <code>salesforce-marketing-cloud</code> with <code>salesforce-service-cloud</code>. These are
1186
+ distinct products whose descriptions are boilerplate around a swapped word. That is the
1187
+ <code>core/typosquat.py</code> confusion shape this card's opening paragraph pointed at, arrived at
1188
+ independently from the other end: the guard this needs is not a tighter cosine floor but a
1189
+ <em>name-confusability veto</em> &mdash; refuse to collapse two entries whose names are a confusable
1190
+ edit apart, however close their vectors sit.
1191
+
1192
+ <b>So the default stays off, for a better-supported reason than before.</b> The measurement does not
1193
+ say 0.97 is too loose; it says similarity alone cannot separate <code>tdd</code>/<code>tdd-guide</code>
1194
+ (collapse) from <code>coinmarketcal</code>/<code>coinmarketcap</code> (never collapse), because both
1195
+ pairs sit in the same cosine band. Flipping the default needs the confusability veto first, and a
1196
+ re-count with it applied. <b>And this bound is space-specific</b>: it was measured in
1197
+ <code>bge-small</code> 384-d, while a keyed production install is <code>voyage-4</code> at 1024-d.
1198
+ Cosine thresholds do not transfer between embedding spaces &mdash; rerun the script against each
1199
+ space before trusting a number in it.</p>
1124
1200
  <div class="meta">
1125
1201
  <span class="m">Complexity <b>M</b></span>
1126
1202
  <span class="m hi">Impact <b>High</b></span>
1127
1203
  <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>
1204
+ <span class="m">shipped opt-in (#639); bound measured (#645) and it refutes the zero-clusters test -- default-on now waits on a name-confusability veto</span>
1129
1205
  </div>
1130
1206
  </article>
1131
1207
  <!-- /ROADMAP:cards -->