boost-skill-cli 1.2.14__tar.gz → 1.2.15__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 (735) hide show
  1. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.vale/styles/config/vocabularies/boost/accept.txt +1 -0
  2. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/dense.py +10 -2
  5. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/rag.py +109 -15
  6. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  7. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  8. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/rag-architecture.md +15 -0
  9. boost_skill_cli-1.2.15/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +49 -0
  10. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap.html +46 -1
  11. boost_skill_cli-1.2.15/tests/unit/test_dense_ready_order.py +40 -0
  12. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_rag.py +21 -5
  13. boost_skill_cli-1.2.15/tests/unit/test_rag_fastpath.py +279 -0
  14. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.gitattributes +0 -0
  15. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.gitignore +0 -0
  16. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.gitleaks.toml +0 -0
  17. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.htmlvalidate.json +0 -0
  18. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.lighthouserc.json +0 -0
  19. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.lycheeignore +0 -0
  20. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.markdownlint-cli2.jsonc +0 -0
  21. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.pre-commit-config.yaml +0 -0
  22. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.stylelintrc.json +0 -0
  23. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.vale/styles/boost/Terminology.yml +0 -0
  24. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/.vale.ini +0 -0
  25. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/CLAUDE.md +0 -0
  26. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/CODE_OF_CONDUCT.md +0 -0
  27. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/CONTRIBUTING.md +0 -0
  28. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/LICENSE +0 -0
  29. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/MANIFEST.in +0 -0
  30. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/Makefile +0 -0
  31. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/README.md +0 -0
  32. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/SECURITY.md +0 -0
  33. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost +0 -0
  34. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/__init__.py +0 -0
  35. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/__main__.py +0 -0
  36. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/cli.py +0 -0
  37. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/cliparse.py +0 -0
  38. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/__init__.py +0 -0
  39. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/_common.py +0 -0
  40. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/bmad.py +0 -0
  41. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/configuration.py +0 -0
  42. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/discovery.py +0 -0
  43. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/hooks.py +0 -0
  44. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/info.py +0 -0
  45. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/intelligence.py +0 -0
  46. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/pkg.py +0 -0
  47. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/quality.py +0 -0
  48. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/run.py +0 -0
  49. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/safety.py +0 -0
  50. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/taps.py +0 -0
  51. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/commands/team.py +0 -0
  52. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/__init__.py +0 -0
  53. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/adapters.py +0 -0
  54. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/agents.py +0 -0
  55. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/ai.py +0 -0
  56. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/bmad.py +0 -0
  57. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/bootstrap.py +0 -0
  58. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/browse.py +0 -0
  59. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/builtin.py +0 -0
  60. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/capabilities.py +0 -0
  61. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/catalog.py +0 -0
  62. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/catalogbundle.py +0 -0
  63. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/chat.py +0 -0
  64. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/claude_settings.py +0 -0
  65. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/complete.py +0 -0
  66. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/config.py +0 -0
  67. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/ed25519.py +0 -0
  68. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/embed.py +0 -0
  69. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/faithfulness.py +0 -0
  70. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/frontmatter.py +0 -0
  71. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/gitutil.py +0 -0
  72. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/imperative.py +0 -0
  73. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/injectscan.py +0 -0
  74. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/installscan.py +0 -0
  75. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/integrity.py +0 -0
  76. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/journal.py +0 -0
  77. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/localembed.py +0 -0
  78. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/lockfile.py +0 -0
  79. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/logs.py +0 -0
  80. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/mcp.py +0 -0
  81. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/mcpdecl.py +0 -0
  82. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/mcphost.py +0 -0
  83. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/minisign.py +0 -0
  84. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/nethttp.py +0 -0
  85. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/output.py +0 -0
  86. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/paths.py +0 -0
  87. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/policy.py +0 -0
  88. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/projectlock.py +0 -0
  89. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/provenance.py +0 -0
  90. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/registry.py +0 -0
  91. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/resolve.py +0 -0
  92. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/rules.py +0 -0
  93. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/scopes.py +0 -0
  94. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/secretscan.py +0 -0
  95. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/selfupdate.py +0 -0
  96. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/serve.py +0 -0
  97. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/stackprobe.py +0 -0
  98. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/staleness.py +0 -0
  99. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/store.py +0 -0
  100. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/trustaudit.py +0 -0
  101. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/typosquat.py +0 -0
  102. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/updatediff.py +0 -0
  103. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/util.py +0 -0
  104. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/core/workflows.py +0 -0
  105. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/data/registries.json +0 -0
  106. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/data/rules/boost-first.mdc +0 -0
  107. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/errors.py +0 -0
  108. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_cli/spin.py +0 -0
  109. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_langchain/__init__.py +0 -0
  110. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_langchain/_compat.py +0 -0
  111. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_langchain/graph.py +0 -0
  112. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_langchain/loader.py +0 -0
  113. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_langchain/py.typed +0 -0
  114. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_langchain/retriever.py +0 -0
  115. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  116. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  117. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_skill_cli.egg-info/requires.txt +0 -0
  118. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/boost_skill_cli.egg-info/top_level.txt +0 -0
  119. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/codecov.yml +0 -0
  120. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/.claude/settings.local.json +0 -0
  121. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/DEBUGGING.md +0 -0
  122. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/adapters.html +0 -0
  123. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/architecture/README.md +0 -0
  124. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/architecture/c4-components-core.md +0 -0
  125. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/architecture/c4-containers.md +0 -0
  126. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/architecture/c4-context.md +0 -0
  127. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/architecture/c4-dynamic-install.md +0 -0
  128. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/gifs/distill.gif +0 -0
  129. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/gifs/doctor.gif +0 -0
  130. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/gifs/explain.gif +0 -0
  131. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/gifs/hooks.gif +0 -0
  132. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/gifs/install.gif +0 -0
  133. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/gifs/pulse.gif +0 -0
  134. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/gifs/search.gif +0 -0
  135. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/gifs/tap.gif +0 -0
  136. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/tapes/distill.tape +0 -0
  137. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/tapes/doctor.tape +0 -0
  138. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/tapes/explain.tape +0 -0
  139. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/tapes/hooks.tape +0 -0
  140. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/tapes/install.tape +0 -0
  141. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/tapes/pulse.tape +0 -0
  142. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/tapes/search.tape +0 -0
  143. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel/tapes/tap.tape +0 -0
  144. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/carousel.html +0 -0
  145. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/chat.html +0 -0
  146. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/commands.html +0 -0
  147. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/demo-index.json +0 -0
  148. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/demo.gif +0 -0
  149. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/demo.html +0 -0
  150. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/demo.tape +0 -0
  151. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/design-roadmap.html +0 -0
  152. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/eval-latest.json +0 -0
  153. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/eval.html +0 -0
  154. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/index.html +0 -0
  155. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/langchain.html +0 -0
  156. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/mcp-hub.html +0 -0
  157. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D01.md +0 -0
  158. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D02.md +0 -0
  159. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D03.md +0 -0
  160. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D04.md +0 -0
  161. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D05.md +0 -0
  162. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D06.md +0 -0
  163. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D07.md +0 -0
  164. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D08.md +0 -0
  165. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D09.md +0 -0
  166. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D10.md +0 -0
  167. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D11.md +0 -0
  168. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D12.md +0 -0
  169. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D13.md +0 -0
  170. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D14.md +0 -0
  171. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D15.md +0 -0
  172. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D16.md +0 -0
  173. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D17.md +0 -0
  174. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D18.md +0 -0
  175. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D19.md +0 -0
  176. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D20.md +0 -0
  177. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D21.md +0 -0
  178. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D22.md +0 -0
  179. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D23.md +0 -0
  180. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D24.md +0 -0
  181. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D25.md +0 -0
  182. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/BOOST-D26.md +0 -0
  183. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  184. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  185. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  186. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  187. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  188. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  189. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  190. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  191. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  192. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  193. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  194. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  195. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  196. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/boost-first-rule.md +0 -0
  197. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  198. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  199. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  200. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  201. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  202. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  203. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  204. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  205. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  206. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  207. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  208. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  209. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  210. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  211. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  212. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  213. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  214. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  215. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/command-carousel-page.md +0 -0
  216. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  217. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  218. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  219. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  220. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  221. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  222. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  223. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  224. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  225. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  226. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  227. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  228. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  229. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  230. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  231. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  232. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  233. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  234. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  235. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  236. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  237. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  238. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  239. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  240. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  241. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  242. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  243. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  244. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  245. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  246. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  247. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  248. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  249. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  250. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  251. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  252. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  253. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  254. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  255. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  256. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  257. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  258. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  259. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  260. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  261. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  262. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/github-community-health-files.md +0 -0
  263. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  264. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  265. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  266. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  267. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  268. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  269. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  270. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  271. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  272. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  273. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  274. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  275. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  276. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  277. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  278. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  279. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  280. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  281. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  282. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  283. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  284. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  285. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  286. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  287. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  288. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  289. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  290. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  291. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  292. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  293. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  294. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  295. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  296. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  297. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  298. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  299. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  300. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  301. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  302. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  303. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  304. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  305. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  306. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  307. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  308. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  309. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  310. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  311. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  312. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  313. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  314. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  315. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  316. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  317. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  318. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  319. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  320. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  321. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  322. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  323. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  324. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  325. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  326. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  327. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  328. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  329. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  330. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  331. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  332. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  333. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  334. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  335. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  336. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  337. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  338. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  339. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  340. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  341. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  342. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  343. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  344. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  345. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  346. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  347. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  348. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  349. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  350. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  351. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  352. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  353. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  354. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  355. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  356. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  357. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  358. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  359. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  360. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  361. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  362. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  363. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  364. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  365. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  366. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  367. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  368. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  369. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  370. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  371. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  372. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  373. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  374. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  375. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  376. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  377. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  378. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  379. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  380. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  381. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  382. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  383. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  384. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  385. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  386. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  387. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  388. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  389. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  390. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  391. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  392. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  393. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  394. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  395. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  396. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  397. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  398. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  399. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  400. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  401. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  402. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  403. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  404. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  405. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  406. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  407. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  408. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  409. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  410. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  411. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  412. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  413. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  414. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  415. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  416. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  417. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  418. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  419. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  420. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  421. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  422. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  423. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  424. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  425. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  426. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  427. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  428. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  429. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  430. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  431. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  432. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  433. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  434. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  435. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  436. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  437. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  438. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  439. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/workspace-scope-install.md +0 -0
  440. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/zip-strict-audit.md +0 -0
  441. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  442. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  443. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  444. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/eslint.config.mjs +0 -0
  445. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/README.md +0 -0
  446. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/__init__.py +0 -0
  447. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/baseline.json +0 -0
  448. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/faithfulness.py +0 -0
  449. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/golden_set.json +0 -0
  450. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/make_corpus.py +0 -0
  451. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/make_golden.py +0 -0
  452. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/metrics.py +0 -0
  453. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/publish_golden_dataset.py +0 -0
  454. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/evals/run_evals.py +0 -0
  455. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/examples/README.md +0 -0
  456. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/examples/adapt-demo.sh +0 -0
  457. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/examples/boost-run-prototype.sh +0 -0
  458. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/index.html +0 -0
  459. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/noxfile.py +0 -0
  460. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/pyproject.toml +0 -0
  461. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/coverage-tools.in +0 -0
  462. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/coverage-tools.txt +0 -0
  463. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/lint-tools.in +0 -0
  464. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/lint-tools.txt +0 -0
  465. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/mutation-tools.in +0 -0
  466. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/mutation-tools.txt +0 -0
  467. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/platform-pins.lock +0 -0
  468. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/release-tools.in +0 -0
  469. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/release-tools.txt +0 -0
  470. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/test-tools.in +0 -0
  471. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/requirements/test-tools.txt +0 -0
  472. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/a11y_check.py +0 -0
  473. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/bench_cli.sh +0 -0
  474. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/build_command_reference.py +0 -0
  475. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/build_demo_index.py +0 -0
  476. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/build_registries.py +0 -0
  477. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/build_roadmap.py +0 -0
  478. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/build_scale_corpus.py +0 -0
  479. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/check_anchors.py +0 -0
  480. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/check_licenses.py +0 -0
  481. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/check_required_checks.py +0 -0
  482. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/ensure_eval_corpus.sh +0 -0
  483. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/eval_corpus.py +0 -0
  484. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/eval_explain.py +0 -0
  485. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/eval_gate.py +0 -0
  486. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/eval_recommend.py +0 -0
  487. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/eval_retrieval.py +0 -0
  488. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/eval_stats_summary.py +0 -0
  489. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/import_budget.py +0 -0
  490. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/lock_toolchain.py +0 -0
  491. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/measure_registry.py +0 -0
  492. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/mutation_gate.py +0 -0
  493. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/mutation_shards.py +0 -0
  494. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/mutation_weights.json +0 -0
  495. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/page_budget.py +0 -0
  496. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/perf_gate.py +0 -0
  497. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/post_deploy_smoke.py +0 -0
  498. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/publish_eval_json.py +0 -0
  499. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/release_guard.py +0 -0
  500. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/release_preflight.py +0 -0
  501. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/scripts/serve_docs.py +0 -0
  502. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/setup.cfg +0 -0
  503. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/sonar-project.properties +0 -0
  504. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/style/README.md +0 -0
  505. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/style/boost.css +0 -0
  506. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/style/boost.js +0 -0
  507. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/style/demo.html +0 -0
  508. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/adapt.feature +0 -0
  509. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/browse.feature +0 -0
  510. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/count.feature +0 -0
  511. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/discover.feature +0 -0
  512. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/doctor.feature +0 -0
  513. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/environment.py +0 -0
  514. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/explain.feature +0 -0
  515. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/index.feature +0 -0
  516. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/install.feature +0 -0
  517. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/list.feature +0 -0
  518. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/mcp.feature +0 -0
  519. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/search.feature +0 -0
  520. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/steps/cli_steps.py +0 -0
  521. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/steps/discovery_steps.py +0 -0
  522. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/steps/mcp_steps.py +0 -0
  523. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/bdd/features/steps/quality_steps.py +0 -0
  524. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/conftest.py +0 -0
  525. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/eval/baseline.json +0 -0
  526. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/eval/explain.jsonl +0 -0
  527. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/eval/golden-natural.jsonl +0 -0
  528. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/eval/golden.jsonl +0 -0
  529. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/eval/recommend.jsonl +0 -0
  530. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/eval/taps-scale.txt +0 -0
  531. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/eval/taps.txt +0 -0
  532. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_capabilities_policy.py +0 -0
  533. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_adapt.py +0 -0
  534. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_bmad.py +0 -0
  535. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_catalog.py +0 -0
  536. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_chat.py +0 -0
  537. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_configuration.py +0 -0
  538. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_discovery.py +0 -0
  539. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_hooks.py +0 -0
  540. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_info.py +0 -0
  541. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_intelligence.py +0 -0
  542. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_pkg.py +0 -0
  543. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_quality.py +0 -0
  544. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_taps.py +0 -0
  545. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_cli_team.py +0 -0
  546. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_everyday_loop.py +0 -0
  547. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_integrity_enforce.py +0 -0
  548. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_kind_conformance.py +0 -0
  549. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_property_parsers.py +0 -0
  550. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_run.py +0 -0
  551. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_tap_signing.py +0 -0
  552. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/functional/test_workspace_scope.py +0 -0
  553. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/README.md +0 -0
  554. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  555. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  556. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  557. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  558. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  559. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  560. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  561. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  562. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  563. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  564. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  565. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  566. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  567. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  568. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  569. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  570. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  571. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  572. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  573. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  574. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  575. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  576. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  577. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/fuzz_frontmatter.py +0 -0
  578. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/fuzz/fuzz_registry.py +0 -0
  579. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/langchain/conftest.py +0 -0
  580. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/langchain/test_graph.py +0 -0
  581. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/langchain/test_loader.py +0 -0
  582. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/langchain/test_retriever.py +0 -0
  583. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/make_fixture.py +0 -0
  584. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/perf/test_benchmarks.py +0 -0
  585. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/smoke.sh +0 -0
  586. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_a11y_check.py +0 -0
  587. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_action_pin_lockstep.py +0 -0
  588. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_adapters.py +0 -0
  589. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_adapters_multi.py +0 -0
  590. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_adapters_runner.py +0 -0
  591. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_agents.py +0 -0
  592. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_ai.py +0 -0
  593. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_bmad_core.py +0 -0
  594. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_boost_first_offer.py +0 -0
  595. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_bootstrap.py +0 -0
  596. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_browse.py +0 -0
  597. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_builtin.py +0 -0
  598. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_capabilities.py +0 -0
  599. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_catalog.py +0 -0
  600. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_catalogbundle.py +0 -0
  601. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_chat.py +0 -0
  602. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_check_anchors.py +0 -0
  603. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_check_licenses.py +0 -0
  604. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_claude_settings.py +0 -0
  605. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_clean_internal_cache.py +0 -0
  606. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_cliparse.py +0 -0
  607. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_codeql_analysis_key.py +0 -0
  608. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_command_reference_fresh.py +0 -0
  609. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_community_health_files.py +0 -0
  610. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_compact.py +0 -0
  611. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_complete.py +0 -0
  612. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_complete_rc_block.py +0 -0
  613. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_config.py +0 -0
  614. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_content_dedupe.py +0 -0
  615. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_content_identity.py +0 -0
  616. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_crash_redaction.py +0 -0
  617. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dedup_trust.py +0 -0
  618. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_demo_index.py +0 -0
  619. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dense.py +0 -0
  620. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dense_embed_dedupe.py +0 -0
  621. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dense_fallback.py +0 -0
  622. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dense_fix_hint.py +0 -0
  623. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dense_shard_real_schema.py +0 -0
  624. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  625. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dense_shards.py +0 -0
  626. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dense_status.py +0 -0
  627. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_dependabot_config.py +0 -0
  628. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_docs_pages_linked.py +0 -0
  629. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_docsite_chrome.py +0 -0
  630. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_ed25519.py +0 -0
  631. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_embed.py +0 -0
  632. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_embed_local.py +0 -0
  633. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_embed_truncated_response.py +0 -0
  634. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_entry_key.py +0 -0
  635. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_errors_and_cli_table.py +0 -0
  636. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_eval_baseline.py +0 -0
  637. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_eval_corpus.py +0 -0
  638. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_eval_faithfulness.py +0 -0
  639. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_eval_gate.py +0 -0
  640. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_eval_grading.py +0 -0
  641. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_eval_metrics.py +0 -0
  642. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_eval_stats_summary.py +0 -0
  643. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  644. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_faithfulness.py +0 -0
  645. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_frontmatter.py +0 -0
  646. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_fuzz_targets.py +0 -0
  647. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  648. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_gitleaks_config.py +0 -0
  649. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_gitutil.py +0 -0
  650. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_gitutil_lfs.py +0 -0
  651. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_gitutil_sparse.py +0 -0
  652. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_imperative.py +0 -0
  653. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_import_budget.py +0 -0
  654. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_injectscan.py +0 -0
  655. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_install_permission_error.py +0 -0
  656. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_installscan.py +0 -0
  657. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_integrity.py +0 -0
  658. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_journal.py +0 -0
  659. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_langchain_packaging.py +0 -0
  660. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_link_ownership.py +0 -0
  661. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_localembed.py +0 -0
  662. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_localembed_e2e.py +0 -0
  663. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_lockfile.py +0 -0
  664. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_logs.py +0 -0
  665. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_marketing_counts.py +0 -0
  666. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_mcp.py +0 -0
  667. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_mcp_install_scan.py +0 -0
  668. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_mcpdecl.py +0 -0
  669. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_mcphost.py +0 -0
  670. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_measure_registry.py +0 -0
  671. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_minisign.py +0 -0
  672. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_mutation_hardening.py +0 -0
  673. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_mutation_shards.py +0 -0
  674. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_mutation_subfile_shards.py +0 -0
  675. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_mutmut_source_paths.py +0 -0
  676. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_nethttp.py +0 -0
  677. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_output.py +0 -0
  678. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_page_budget.py +0 -0
  679. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_paths.py +0 -0
  680. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_perf_gate.py +0 -0
  681. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_pkg_confusions.py +0 -0
  682. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_pkg_injection.py +0 -0
  683. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_pkg_secrets.py +0 -0
  684. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_platform_pins.py +0 -0
  685. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_policy.py +0 -0
  686. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_post_deploy_smoke.py +0 -0
  687. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_project_mcp_sidecar.py +0 -0
  688. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_projectlock.py +0 -0
  689. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_provenance.py +0 -0
  690. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_publish_golden_dataset.py +0 -0
  691. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_rag_fusion.py +0 -0
  692. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_registries_fresh.py +0 -0
  693. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_registry.py +0 -0
  694. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_registry_categories.py +0 -0
  695. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_registry_control_chars.py +0 -0
  696. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_release_guard.py +0 -0
  697. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_release_preflight.py +0 -0
  698. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_required_checks.py +0 -0
  699. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_resolve.py +0 -0
  700. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_roadmap_fresh.py +0 -0
  701. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_rules.py +0 -0
  702. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_scale_corpus.py +0 -0
  703. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_scopes.py +0 -0
  704. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_secretscan.py +0 -0
  705. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_selfupdate.py +0 -0
  706. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_serve.py +0 -0
  707. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_serve_docs.py +0 -0
  708. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_shards_matrix.py +0 -0
  709. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_smoke_covers_every_command.py +0 -0
  710. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_spin.py +0 -0
  711. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_stackprobe.py +0 -0
  712. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_staleness.py +0 -0
  713. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_store.py +0 -0
  714. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_store_materialize.py +0 -0
  715. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_sync_blocked_links.py +0 -0
  716. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  717. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_token_parity.py +0 -0
  718. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_toolchain_lock.py +0 -0
  719. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_trustaudit.py +0 -0
  720. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_typosquat.py +0 -0
  721. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_updatediff.py +0 -0
  722. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_util.py +0 -0
  723. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_version.py +0 -0
  724. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_visual_harness_flags.py +0 -0
  725. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_workflow_concurrency.py +0 -0
  726. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  727. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  728. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_workflow_timeouts.py +0 -0
  729. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_workflows.py +0 -0
  730. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  731. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/visual/a11y_check.mjs +0 -0
  732. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/visual/console_check.mjs +0 -0
  733. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/visual/package-lock.json +0 -0
  734. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/visual/package.json +0 -0
  735. {boost_skill_cli-1.2.14 → boost_skill_cli-1.2.15}/tests/visual/visual_check.mjs +0 -0
@@ -25,6 +25,7 @@ dotfiles
25
25
  DSPy
26
26
  else's
27
27
  env
28
+ eval
28
29
  evals
29
30
  freemium
30
31
  frontmatter
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.14
3
+ Version: 1.2.15
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.14'
22
- __version_tuple__ = version_tuple = (1, 2, 14)
21
+ __version__ = version = '1.2.15'
22
+ __version_tuple__ = version_tuple = (1, 2, 15)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -263,8 +263,16 @@ def status() -> dict:
263
263
 
264
264
 
265
265
  def ready() -> bool:
266
- """True when a usable, provider-matched vector index exists on disk."""
267
- if not have_backend() or not embed.available() or not db_path().exists():
266
+ """True when a usable, provider-matched vector index exists on disk.
267
+
268
+ The stat comes first, deliberately: on a machine with no vector store —
269
+ every BM25-only install — this must answer False without importing the
270
+ backend, because ``have_backend()`` drags in numpy via sqlite_vec
271
+ (~120 ms measured) and every cold ``boost search`` asks.
272
+ """
273
+ if not db_path().exists():
274
+ return False
275
+ if not have_backend() or not embed.available():
268
276
  return False
269
277
  con = _connect()
270
278
  if con is None:
@@ -445,12 +445,16 @@ def _load_raw() -> dict | None:
445
445
  p = index_path()
446
446
  key = str(p)
447
447
  try:
448
- mtime = p.stat().st_mtime
448
+ st = p.stat()
449
449
  except OSError:
450
450
  _CACHE.pop(key, None)
451
451
  return None
452
+ # (mtime_ns, size), not bare mtime: a rewrite landing inside one mtime
453
+ # tick would otherwise serve the previous index from this cache forever —
454
+ # the same stamp `catalog._cached_tap` already uses, for the same reason.
455
+ stamp = (st.st_mtime_ns, st.st_size)
452
456
  cached = _CACHE.get(key)
453
- if isinstance(cached, tuple) and cached[0] == mtime:
457
+ if isinstance(cached, tuple) and cached[0] == stamp:
454
458
  return cached[1] # type: ignore[return-value]
455
459
  try:
456
460
  data = json.loads(p.read_text(encoding="utf-8"))
@@ -458,7 +462,7 @@ def _load_raw() -> dict | None:
458
462
  return None
459
463
  if not isinstance(data, dict) or data.get("version") != INDEX_VERSION:
460
464
  return None
461
- _CACHE[key] = (mtime, data)
465
+ _CACHE[key] = (stamp, data)
462
466
  return data
463
467
 
464
468
 
@@ -699,16 +703,97 @@ def dedupe_by_content(hits: list[Hit], limit: int) -> list[Hit]:
699
703
  # Same body already shown. Keep its rank, but prefer a better source.
700
704
  kept = out[seen]
701
705
  if source_rank(hit["entry"]) < source_rank(kept["entry"]):
702
- # cast, not a literal annotation: `Hit` is total=False for the
703
- # optional `content` key, and NotRequired needs 3.11 while boost
704
- # targets 3.9.
705
- out[seen] = cast(Hit, {"entry": hit["entry"],
706
- "score": kept["score"],
707
- "snippet": kept["snippet"],
708
- "content": digest})
706
+ # Copy the kept hit wholesale and swap only the entry: a literal
707
+ # rebuild here would silently drop anything else the caller
708
+ # carried on the hit (retrieve defers snippet windowing through
709
+ # this function, so the carry is load-bearing, not hygiene).
710
+ out[seen] = cast(Hit, {**kept, "entry": hit["entry"]})
709
711
  return out[:limit]
710
712
 
711
713
 
714
+ def _windowed(hits: list[Hit], terms: Sequence[str]) -> list[Hit]:
715
+ """Window each hit's raw stored snip onto the query terms.
716
+
717
+ Deferred to the hits actually returned: ranking carries the raw ``snip``
718
+ through dedupe, and only the survivors pay ``_passage`` — the eager
719
+ version computed 39,726 windows on a real machine to display 60.
720
+ """
721
+ return [cast(Hit, {**h, "snippet": _passage(h["snippet"], terms)})
722
+ for h in hits]
723
+
724
+
725
+ def _retrieve_from_index(docs: list[dict], scores: dict[int, float],
726
+ terms: list[str], k: int, kind: str | None,
727
+ ) -> list[Hit] | None:
728
+ """Rank from the index's own doc metadata — no full-catalogue parse.
729
+
730
+ The slow path builds a ``live`` map by parsing every tap cache on the
731
+ machine (458 files, ~100 MB, 0.32 s measured) to serve two needs: filter
732
+ docs whose entry is gone, and hand back real entry dicts. On a fresh index
733
+ both are answerable cheaper: every doc of a still-configured tap is live
734
+ by construction (``ensure()`` rebuilds on staleness), and only the final
735
+ ``k`` survivors need materialising — so only *their* taps' caches load.
736
+
737
+ Ranking, dedupe and tie-breaks use index-side values (``n``/``h``/``k``)
738
+ that ``build()`` copied from the same cache entries the slow path reads,
739
+ plus a shadow entry carrying the two fields ``source_rank`` consults
740
+ (``tap``, ``curated``) from one ``registry.list_taps()`` snapshot — never
741
+ a second config read, and never :func:`registry.get`, which raises for a
742
+ concurrently-untapped name.
743
+
744
+ Returns ``None`` when any survivor's entry cannot be materialised (a tap
745
+ cache vanished or moved under a stat-fresh index): the caller reruns the
746
+ query through the explicit-entries path, whose output is the contract.
747
+ Byte-identical-or-fall-back, never approximate.
748
+ """
749
+ taps = {t.name: t for t in registry.list_taps()}
750
+ best: dict[tuple[str, str], tuple[float, str, str, str]] = {}
751
+ for doc_id, score in scores.items():
752
+ d = docs[doc_id]
753
+ if kind is not None and d["k"] != kind:
754
+ continue
755
+ if d["t"] not in taps: # untapped repos stop ranking, stale or not
756
+ continue
757
+ key = (d["t"], d["f"])
758
+ prev = best.get(key)
759
+ if prev is None or score > prev[0]:
760
+ best[key] = (score, d["snip"], d.get("h", ""), d["n"])
761
+ ranked = sorted(best.items(),
762
+ key=lambda kv: (-kv[1][0], kv[1][3], kv[0]))
763
+ # The shadow entry carries exactly what downstream code reads before
764
+ # materialisation: `source_rank` consults tap + curated, and the loop
765
+ # below reads tap + skill_md. Nothing else — an extra field here would
766
+ # be dead weight pretending to be contract.
767
+ hits: list[Hit] = [
768
+ {"entry": {"tap": key[0], "skill_md": key[1],
769
+ "curated": taps[key[0]].curated},
770
+ "score": score, "content": digest,
771
+ "snippet": snip} # type: ignore[typeddict-item]
772
+ for key, (score, snip, digest, _name) in ranked]
773
+ # The FULL ranked list flows through dedupe, exactly as the slow path's
774
+ # does: a curated duplicate at rank 3,000 legally replaces the displayed
775
+ # source of survivor #1, so the promotion scan cannot be truncated.
776
+ survivors = dedupe_by_content(hits, len(hits))
777
+ loaded: dict[str, dict[tuple[str, str], dict]] = {}
778
+ out: list[Hit] = []
779
+ for hit in survivors:
780
+ if len(out) == k:
781
+ break
782
+ tap_name = hit["entry"]["tap"]
783
+ tap = taps.get(tap_name)
784
+ if tap is None: # promoted source raced an untap
785
+ return None
786
+ if tap_name not in loaded:
787
+ loaded[tap_name] = {entry_key(e): e
788
+ for e in catalog.load_tap(tap)}
789
+ entry = loaded[tap_name].get((tap_name, hit["entry"]["skill_md"]))
790
+ if entry is None:
791
+ return None
792
+ out.append(cast(Hit, {**hit, "entry": entry,
793
+ "snippet": _passage(hit["snippet"], terms)}))
794
+ return out
795
+
796
+
712
797
  def retrieve(query: str, k: int = 60, kind: str | None = None,
713
798
  entries: list[dict] | None = None) -> list[Hit]:
714
799
  """Top-k full-content hits for ``query``. ``[]`` if the index is empty."""
@@ -718,11 +803,20 @@ def retrieve(query: str, k: int = 60, kind: str | None = None,
718
803
  terms = tokenize(query)
719
804
  if not terms:
720
805
  return []
721
- entries = catalog.all_entries() if entries is None else entries
722
- live = {entry_key(e): e for e in entries}
723
806
  docs = raw["docs"]
807
+ scores = _bm25(terms, raw, read_postings(terms))
808
+ if entries is None:
809
+ fast = _retrieve_from_index(docs, scores, terms, k, kind)
810
+ if fast is not None:
811
+ return fast
812
+ # An entry vanished between index and cache: answer from the full
813
+ # catalogue exactly as before the fast path existed. One side effect
814
+ # rides along only here now — load_tap's rescan of old-CACHE_FORMAT
815
+ # caches, which otherwise happens on tap operations and build().
816
+ entries = catalog.all_entries()
817
+ live = {entry_key(e): e for e in entries}
724
818
  best: dict[tuple[str, str], tuple[float, str, str]] = {}
725
- for doc_id, score in _bm25(terms, raw, read_postings(terms)).items():
819
+ for doc_id, score in scores.items():
726
820
  d = docs[doc_id]
727
821
  if kind is not None and d["k"] != kind:
728
822
  continue
@@ -742,9 +836,9 @@ def retrieve(query: str, k: int = 60, kind: str | None = None,
742
836
  # or they still consume the slots they were removed from.
743
837
  hits: list[Hit] = [
744
838
  {"entry": live[key], "score": score, "content": digest,
745
- "snippet": _passage(snip, terms)} # type: ignore[typeddict-item]
839
+ "snippet": snip} # type: ignore[typeddict-item]
746
840
  for key, (score, snip, digest) in ranked]
747
- return dedupe_by_content(hits, k)
841
+ return _windowed(dedupe_by_content(hits, k), terms)
748
842
 
749
843
 
750
844
  #: The label `rerank` returns when the LLM pass actually ran. Every other value
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.14
3
+ Version: 1.2.15
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -213,6 +213,7 @@ docs/roadmap/items/ci-time-is-now-runner-queueing.md
213
213
  docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md
214
214
  docs/roadmap/items/code-scanning-rule-can-be-restored.md
215
215
  docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md
216
+ docs/roadmap/items/cold-search-reads-the-whole-catalogue.md
216
217
  docs/roadmap/items/command-carousel-page.md
217
218
  docs/roadmap/items/command-reference-docs-site.md
218
219
  docs/roadmap/items/completions-complete-only-command-names.md
@@ -615,6 +616,7 @@ tests/unit/test_dense.py
615
616
  tests/unit/test_dense_embed_dedupe.py
616
617
  tests/unit/test_dense_fallback.py
617
618
  tests/unit/test_dense_fix_hint.py
619
+ tests/unit/test_dense_ready_order.py
618
620
  tests/unit/test_dense_shard_real_schema.py
619
621
  tests/unit/test_dense_shard_unreadable_vectors.py
620
622
  tests/unit/test_dense_shards.py
@@ -684,6 +686,7 @@ tests/unit/test_projectlock.py
684
686
  tests/unit/test_provenance.py
685
687
  tests/unit/test_publish_golden_dataset.py
686
688
  tests/unit/test_rag.py
689
+ tests/unit/test_rag_fastpath.py
687
690
  tests/unit/test_rag_fusion.py
688
691
  tests/unit/test_registries_fresh.py
689
692
  tests/unit/test_registry.py
@@ -135,6 +135,21 @@ normalization, which matters when bodies vary from 3 lines to 300). Sparse term
135
135
  Scoring is standard BM25 (`k1≈1.2`, `b≈0.75`). At ~9k items / tens of thousands of chunks this is a
136
136
  dict-of-postings scan — comfortably sub-second per query in Python.
137
137
 
138
+ **Query path as shipped** (post `cold-search-reads-the-whole-catalogue`): with
139
+ `entries=None` — the CLI, MCP and eval path — `rag.retrieve` ranks straight off
140
+ the index's own doc metadata and materialises real catalog entries only for the
141
+ final `k` survivors, loading only *their* taps' caches (`_retrieve_from_index`).
142
+ The previous shape parsed every tap cache on the machine per query
143
+ (`catalog.all_entries()`: 458 files / ~100 MB / 0.32 s measured at 71.6k
144
+ entries) and computed a display snippet for every scored doc (39,726 calls to
145
+ serve 60). Snippet windowing now runs on returned hits only, on both paths.
146
+ The contract is byte-identical-or-fall-back: any survivor whose entry cannot be
147
+ materialised (a tap cache vanished under a stat-fresh index) reruns the query
148
+ through the explicit-`entries` path rather than approximating. An explicit
149
+ `entries=` list (the eval harness, `boost chat`) keeps today's exact path.
150
+ `dense.ready()` stats the store before importing the backend for the same
151
+ cold-path reason. Measured end to end: 0.94 s → 0.49 s cold at 458 taps.
152
+
138
153
  ### 6b. Two-stage pipeline — upgrade `boost_search` / `catalog.search` **in place**
139
154
 
140
155
  No parallel MCP tool (per decision). The upgraded flow:
@@ -0,0 +1,49 @@
1
+ ---
2
+ id: cold-search-reads-the-whole-catalogue
3
+ board: code
4
+ section: pipeline
5
+ status: inflight
6
+ category: Performance · Search
7
+ complexity: M
8
+ impact: High
9
+ wow: 4
10
+ note: 0.94 s cold search at 71.6k entries — ~0.5 s spent materialising data the top hits never use
11
+ order: 122
12
+ owner: loop/search-perf
13
+ pr:
14
+ title: A cold search materialises 71,600 entries to print five
15
+ ---
16
+ Profiled cold <code>boost search</code> at real scale (458 taps, 71,600
17
+ entries): 0.94 s, of which <b>0.32 s</b> is <code>catalog.all_entries()</code>
18
+ parsing every tap cache on the machine (~100 MB of JSON) to build a
19
+ <code>live</code> map whose entries are only <i>displayed</i> for the final k
20
+ hits, <b>0.11 s</b> is <code>_passage</code> windowing a snippet for all
21
+ 39,726 scored docs to show 60, and <b>0.12 s</b> is <code>dense.ready()</code>
22
+ importing numpy via sqlite_vec just to answer "no vector store". BM25 scoring
23
+ itself: 18 ms. The engine was fine; the packaging around it was the cost.<br><br>
24
+ Shipped: <code>rag.retrieve(entries=None)</code> now ranks off the index's own
25
+ doc metadata (name/hash/kind/length all live there already), runs the full
26
+ ranked list through <code>dedupe_by_content</code> with shadow entries carrying
27
+ the two fields <code>source_rank</code> reads, and materialises real entries
28
+ for just the survivors' taps — with a <b>byte-identical-or-fall-back</b>
29
+ contract: any survivor that fails to materialise reruns the query through the
30
+ explicit-<code>entries</code> path (the eval-gate path, unchanged). Snippets
31
+ window on returned hits only, on both paths; <code>dense.ready()</code> stats
32
+ before importing; <code>_load_raw</code> keys its cache on
33
+ <code>(mtime_ns, size)</code>. Measured after: <b>0.94 s → 0.49 s cold</b>.
34
+ Complement of the shipped <i>cache-the-catalog-entry-set-across-rag-queries</i>
35
+ (PR 114), which memoised <code>all_entries</code> per process — warm repeats
36
+ were already amortised; this removes the cold-start read entirely.<br><br>
37
+ Analysed and deliberately <b>deferred</b>: moving the per-doc
38
+ <code>snip</code> out of <code>rag_index.json</code> into the postings SQLite.
39
+ <i>bm25-index-is-one-json-blob</i> declined it at 743 entries (14% of the
40
+ JSON); at 71.6k the premise inverts — snips are ~76% (46 MB → 11.4 MB slim,
41
+ 103 ms → 37 ms parse) — but an adversarial design review found the v6→v7
42
+ in-place migration can clobber a concurrently rebuilt pair without a
43
+ build-id pairing token, and a mixed-version machine (pipx CLI + long-running
44
+ MCP serve) thrashes full 71k-file reindexes across the version boundary.
45
+ 66 ms does not buy that; if the recorded (tap, skill_md)-keyed postings
46
+ follow-up ever lands, fold the snip move into that single format bump.
47
+ Residual known cost: the "semantic search is off" hint imports the backend
48
+ (~0.1 s) on machines with the extra installed but no store built — the one
49
+ state where that line is the advice.
@@ -133,7 +133,7 @@
133
133
  <div class="stat"><b>16</b><span>Shipped</span></div>
134
134
  <div class="stat"><b>1</b><span>Next up</span></div>
135
135
  <div class="stat"><b>7</b><span>Planned</span></div>
136
- <div class="stat"><b>260</b><span>Loop finds</span></div>
136
+ <div class="stat"><b>261</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -6849,6 +6849,51 @@ was a comment. A comment cannot fail a build.</p>
6849
6849
  <span class="m">a comment in the sibling file predicted this exact failure</span>
6850
6850
  </div>
6851
6851
  </article>
6852
+
6853
+ <article class="cap rcard" id="cold-search-reads-the-whole-catalogue">
6854
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">Performance · Search</span></div>
6855
+ <h3>A cold search materialises 71,600 entries to print five</h3>
6856
+ <p>Profiled cold <code>boost search</code> at real scale (458 taps, 71,600
6857
+ entries): 0.94 s, of which <b>0.32 s</b> is <code>catalog.all_entries()</code>
6858
+ parsing every tap cache on the machine (~100 MB of JSON) to build a
6859
+ <code>live</code> map whose entries are only <i>displayed</i> for the final k
6860
+ hits, <b>0.11 s</b> is <code>_passage</code> windowing a snippet for all
6861
+ 39,726 scored docs to show 60, and <b>0.12 s</b> is <code>dense.ready()</code>
6862
+ importing numpy via sqlite_vec just to answer "no vector store". BM25 scoring
6863
+ itself: 18 ms. The engine was fine; the packaging around it was the cost.<br><br>
6864
+ Shipped: <code>rag.retrieve(entries=None)</code> now ranks off the index's own
6865
+ doc metadata (name/hash/kind/length all live there already), runs the full
6866
+ ranked list through <code>dedupe_by_content</code> with shadow entries carrying
6867
+ the two fields <code>source_rank</code> reads, and materialises real entries
6868
+ for just the survivors' taps — with a <b>byte-identical-or-fall-back</b>
6869
+ contract: any survivor that fails to materialise reruns the query through the
6870
+ explicit-<code>entries</code> path (the eval-gate path, unchanged). Snippets
6871
+ window on returned hits only, on both paths; <code>dense.ready()</code> stats
6872
+ before importing; <code>_load_raw</code> keys its cache on
6873
+ <code>(mtime_ns, size)</code>. Measured after: <b>0.94 s → 0.49 s cold</b>.
6874
+ Complement of the shipped <i>cache-the-catalog-entry-set-across-rag-queries</i>
6875
+ (PR 114), which memoised <code>all_entries</code> per process — warm repeats
6876
+ were already amortised; this removes the cold-start read entirely.<br><br>
6877
+ Analysed and deliberately <b>deferred</b>: moving the per-doc
6878
+ <code>snip</code> out of <code>rag_index.json</code> into the postings SQLite.
6879
+ <i>bm25-index-is-one-json-blob</i> declined it at 743 entries (14% of the
6880
+ JSON); at 71.6k the premise inverts — snips are ~76% (46 MB → 11.4 MB slim,
6881
+ 103 ms → 37 ms parse) — but an adversarial design review found the v6→v7
6882
+ in-place migration can clobber a concurrently rebuilt pair without a
6883
+ build-id pairing token, and a mixed-version machine (pipx CLI + long-running
6884
+ MCP serve) thrashes full 71k-file reindexes across the version boundary.
6885
+ 66 ms does not buy that; if the recorded (tap, skill_md)-keyed postings
6886
+ follow-up ever lands, fold the snip move into that single format bump.
6887
+ Residual known cost: the "semantic search is off" hint imports the backend
6888
+ (~0.1 s) on machines with the extra installed but no store built — the one
6889
+ state where that line is the advice.</p>
6890
+ <div class="meta">
6891
+ <span class="m">Complexity <b>M</b></span>
6892
+ <span class="m hi">Impact <b>High</b></span>
6893
+ <span class="m">Wow <b class="wow">★★★★</b></span>
6894
+ <span class="m">0.94 s cold search at 71.6k entries — ~0.5 s spent materialising data the top hits never use</span>
6895
+ </div>
6896
+ </article>
6852
6897
  <!-- /ROADMAP:cards -->
6853
6898
 
6854
6899
  </div>
@@ -0,0 +1,40 @@
1
+ """dense.ready() must stat before it imports.
2
+
3
+ On a machine with no vector store — the common BM25-only install — ready()
4
+ used to import sqlite_vec (which drags in numpy, ~120 ms measured) just to
5
+ answer False. The cheap ``db_path().exists()`` check has to come first; the
6
+ backend and provider probes only run once there is a store worth opening.
7
+ """
8
+ from __future__ import annotations
9
+
10
+ import pytest
11
+
12
+ from boost_cli.core import dense, embed, paths
13
+
14
+
15
+ class TestReadyShortCircuit:
16
+ def test_missing_store_answers_false_without_importing(self, sandbox,
17
+ monkeypatch):
18
+ monkeypatch.setattr(
19
+ dense, "_load",
20
+ lambda: pytest.fail("no store on disk — backend must not import"))
21
+ monkeypatch.setattr(
22
+ embed, "available",
23
+ lambda: pytest.fail("no store on disk — provider must not probe"))
24
+ assert not dense.db_path().exists()
25
+ assert dense.ready() is False
26
+
27
+ def test_present_store_still_requires_the_backend(self, sandbox,
28
+ monkeypatch):
29
+ paths.ensure_dirs()
30
+ dense.db_path().write_bytes(b"")
31
+ monkeypatch.setattr(dense, "_load", lambda: None)
32
+ assert dense.ready() is False
33
+
34
+ def test_present_store_still_requires_a_provider(self, sandbox,
35
+ monkeypatch):
36
+ paths.ensure_dirs()
37
+ dense.db_path().write_bytes(b"")
38
+ monkeypatch.setattr(dense, "have_backend", lambda: True)
39
+ monkeypatch.setattr(embed, "available", lambda: False)
40
+ assert dense.ready() is False
@@ -576,6 +576,23 @@ class TestRerank:
576
576
  assert "beta-snippet" in p
577
577
 
578
578
 
579
+ def _wire_live_catalog(monkeypatch, entries):
580
+ """Serve ``entries`` as the machine's live catalogue for ``entries=None``.
581
+
582
+ The fast path sources from ``registry.list_taps()`` + ``catalog.load_tap``
583
+ (never the whole catalogue); its vanished-entry fallback still reads
584
+ ``all_entries``. Wire all three seams so either route sees the same data.
585
+ """
586
+ from boost_cli.core import registry
587
+ taps = sorted({e["tap"] for e in entries})
588
+ monkeypatch.setattr(registry, "list_taps",
589
+ lambda: [registry.Tap(name=t, url="") for t in taps])
590
+ monkeypatch.setattr(
591
+ rag.catalog, "load_tap",
592
+ lambda tap, rebuild=False: [e for e in entries if e["tap"] == tap.name])
593
+ monkeypatch.setattr(rag.catalog, "all_entries", lambda: entries)
594
+
595
+
579
596
  class TestSearchSeam:
580
597
  def test_search_none_without_index(self, sandbox):
581
598
  assert rag.search("x") is None
@@ -583,8 +600,7 @@ class TestSearchSeam:
583
600
  def test_search_smart_false_returns_bm25(self, corpus, monkeypatch):
584
601
  _root, entries = corpus
585
602
  rag.build(entries=entries, force=True)
586
- # search() defaults to all_entries(); point it at our patched taps
587
- monkeypatch.setattr(rag.catalog, "all_entries", lambda: entries)
603
+ _wire_live_catalog(monkeypatch, entries)
588
604
  result = rag.search("testing", limit=5, smart=False)
589
605
  assert result is not None
590
606
  hits, label = result
@@ -594,7 +610,7 @@ class TestSearchSeam:
594
610
  def test_search_smart_degrades_without_ai(self, corpus, monkeypatch):
595
611
  _root, entries = corpus
596
612
  rag.build(entries=entries, force=True)
597
- monkeypatch.setattr(rag.catalog, "all_entries", lambda: entries)
613
+ _wire_live_catalog(monkeypatch, entries)
598
614
  monkeypatch.setattr(rag.ai, "available", lambda: False)
599
615
  _hits, label = rag.search("testing", limit=5)
600
616
  assert label == "BM25 full-content"
@@ -602,7 +618,7 @@ class TestSearchSeam:
602
618
  def test_search_smart_is_default_and_uses_ai(self, corpus, monkeypatch):
603
619
  _root, entries = corpus
604
620
  rag.build(entries=entries, force=True)
605
- monkeypatch.setattr(rag.catalog, "all_entries", lambda: entries)
621
+ _wire_live_catalog(monkeypatch, entries)
606
622
  monkeypatch.setattr(rag.ai, "available", lambda: True)
607
623
  monkeypatch.setattr(rag.ai, "ask",
608
624
  lambda *a, **k: '["pytest-helper", "jest-runner"]')
@@ -621,7 +637,7 @@ class TestSearchSeam:
621
637
  entries.append(_entry(name, skill_md="%s/SKILL.md" % name))
622
638
  monkeypatch.setattr(rag, "_tap_paths", lambda: {"acme/skills": root})
623
639
  monkeypatch.setattr(rag, "_tap_commits", lambda: {"acme__skills": "c1"})
624
- monkeypatch.setattr(rag.catalog, "all_entries", lambda: entries)
640
+ _wire_live_catalog(monkeypatch, entries)
625
641
  monkeypatch.setattr(rag.ai, "available", lambda: False)
626
642
  rag.build(entries=entries, force=True)
627
643
  hits, _label = rag.search("testing common") # default limit == 10