boost-skill-cli 1.0.337__tar.gz → 1.0.338__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 (579) hide show
  1. {boost_skill_cli-1.0.337/boost_skill_cli.egg-info → boost_skill_cli-1.0.338}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/rag.py +20 -5
  4. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  5. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  6. boost_skill_cli-1.0.338/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +49 -0
  7. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap.html +46 -1
  8. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_rag.py +8 -3
  9. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_rag_fusion.py +92 -0
  10. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.gitattributes +0 -0
  11. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.gitignore +0 -0
  12. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.gitleaks.toml +0 -0
  13. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.htmlvalidate.json +0 -0
  14. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.lighthouserc.json +0 -0
  15. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.lycheeignore +0 -0
  16. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.markdownlint-cli2.jsonc +0 -0
  17. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.pre-commit-config.yaml +0 -0
  18. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.stylelintrc.json +0 -0
  19. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.vale/styles/boost/Terminology.yml +0 -0
  20. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  21. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/.vale.ini +0 -0
  22. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/CLAUDE.md +0 -0
  23. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/CODE_OF_CONDUCT.md +0 -0
  24. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/CONTRIBUTING.md +0 -0
  25. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/LICENSE +0 -0
  26. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/MANIFEST.in +0 -0
  27. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/Makefile +0 -0
  28. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/README.md +0 -0
  29. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/SECURITY.md +0 -0
  30. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost +0 -0
  31. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/__init__.py +0 -0
  32. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/__main__.py +0 -0
  33. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/cli.py +0 -0
  34. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/cliparse.py +0 -0
  35. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/__init__.py +0 -0
  36. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/_common.py +0 -0
  37. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/bmad.py +0 -0
  38. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/configuration.py +0 -0
  39. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/discovery.py +0 -0
  40. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/hooks.py +0 -0
  41. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/info.py +0 -0
  42. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/intelligence.py +0 -0
  43. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/pkg.py +0 -0
  44. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/quality.py +0 -0
  45. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/run.py +0 -0
  46. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/safety.py +0 -0
  47. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/taps.py +0 -0
  48. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/commands/team.py +0 -0
  49. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/__init__.py +0 -0
  50. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/adapters.py +0 -0
  51. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/agents.py +0 -0
  52. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/ai.py +0 -0
  53. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/capabilities.py +0 -0
  54. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/catalog.py +0 -0
  55. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/claude_settings.py +0 -0
  56. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/config.py +0 -0
  57. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/dense.py +0 -0
  58. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/ed25519.py +0 -0
  59. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/embed.py +0 -0
  60. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/faithfulness.py +0 -0
  61. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/frontmatter.py +0 -0
  62. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/gitutil.py +0 -0
  63. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/imperative.py +0 -0
  64. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/injectscan.py +0 -0
  65. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/installscan.py +0 -0
  66. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/integrity.py +0 -0
  67. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/journal.py +0 -0
  68. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/localembed.py +0 -0
  69. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/lockfile.py +0 -0
  70. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/logs.py +0 -0
  71. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/mcp.py +0 -0
  72. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/mcpdecl.py +0 -0
  73. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/mcphost.py +0 -0
  74. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/minisign.py +0 -0
  75. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/nethttp.py +0 -0
  76. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/output.py +0 -0
  77. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/paths.py +0 -0
  78. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/policy.py +0 -0
  79. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/projectlock.py +0 -0
  80. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/provenance.py +0 -0
  81. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/registry.py +0 -0
  82. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/resolve.py +0 -0
  83. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/rules.py +0 -0
  84. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/scopes.py +0 -0
  85. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/secretscan.py +0 -0
  86. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/selfupdate.py +0 -0
  87. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/serve.py +0 -0
  88. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/stackprobe.py +0 -0
  89. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/staleness.py +0 -0
  90. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/store.py +0 -0
  91. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/trustaudit.py +0 -0
  92. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/typosquat.py +0 -0
  93. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/updatediff.py +0 -0
  94. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/util.py +0 -0
  95. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/core/workflows.py +0 -0
  96. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/data/registries.json +0 -0
  97. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/errors.py +0 -0
  98. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_cli/spin.py +0 -0
  99. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  100. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  101. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_skill_cli.egg-info/requires.txt +0 -0
  102. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/boost_skill_cli.egg-info/top_level.txt +0 -0
  103. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/codecov.yml +0 -0
  104. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/.claude/settings.local.json +0 -0
  105. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/DEBUGGING.md +0 -0
  106. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/adapters.html +0 -0
  107. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/architecture/README.md +0 -0
  108. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/architecture/c4-components-core.md +0 -0
  109. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/architecture/c4-containers.md +0 -0
  110. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/architecture/c4-context.md +0 -0
  111. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/architecture/c4-dynamic-install.md +0 -0
  112. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/gifs/distill.gif +0 -0
  113. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/gifs/doctor.gif +0 -0
  114. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/gifs/explain.gif +0 -0
  115. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/gifs/hooks.gif +0 -0
  116. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/gifs/install.gif +0 -0
  117. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/gifs/pulse.gif +0 -0
  118. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/gifs/search.gif +0 -0
  119. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/gifs/tap.gif +0 -0
  120. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/tapes/distill.tape +0 -0
  121. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/tapes/doctor.tape +0 -0
  122. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/tapes/explain.tape +0 -0
  123. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/tapes/hooks.tape +0 -0
  124. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/tapes/install.tape +0 -0
  125. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/tapes/pulse.tape +0 -0
  126. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/tapes/search.tape +0 -0
  127. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel/tapes/tap.tape +0 -0
  128. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/carousel.html +0 -0
  129. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/commands.html +0 -0
  130. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/demo.gif +0 -0
  131. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/demo.tape +0 -0
  132. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/design-roadmap.html +0 -0
  133. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/eval.html +0 -0
  134. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/index.html +0 -0
  135. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/mcp-hub.html +0 -0
  136. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/rag-architecture.md +0 -0
  137. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D01.md +0 -0
  138. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D02.md +0 -0
  139. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D03.md +0 -0
  140. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D04.md +0 -0
  141. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D05.md +0 -0
  142. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D06.md +0 -0
  143. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D07.md +0 -0
  144. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D08.md +0 -0
  145. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D09.md +0 -0
  146. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D10.md +0 -0
  147. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D11.md +0 -0
  148. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D12.md +0 -0
  149. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D13.md +0 -0
  150. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D14.md +0 -0
  151. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D15.md +0 -0
  152. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D16.md +0 -0
  153. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D17.md +0 -0
  154. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D18.md +0 -0
  155. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D19.md +0 -0
  156. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D20.md +0 -0
  157. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D21.md +0 -0
  158. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D22.md +0 -0
  159. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D23.md +0 -0
  160. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D24.md +0 -0
  161. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D25.md +0 -0
  162. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/BOOST-D26.md +0 -0
  163. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  164. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  165. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  166. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  167. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  168. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  169. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  170. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  171. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  172. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  173. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  174. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  175. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  176. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  177. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  178. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  179. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  180. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  181. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  182. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  183. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  184. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  185. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  186. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/command-carousel-page.md +0 -0
  187. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  188. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  189. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  190. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  191. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  192. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  193. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  194. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  195. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  196. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  197. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  198. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  199. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  200. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  201. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  202. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  203. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  204. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  205. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  206. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  207. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  208. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  209. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  210. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  211. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  212. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  213. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  214. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  215. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  216. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/github-community-health-files.md +0 -0
  217. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  218. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  219. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  220. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  221. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  222. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  223. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  224. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  225. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  226. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  227. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  228. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  229. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  230. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  231. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  232. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  233. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  234. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  235. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  236. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  237. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  238. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  239. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  240. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  241. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  242. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  243. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  244. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  245. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  246. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  247. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  248. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  249. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  250. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  251. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  252. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  253. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  254. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  255. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  256. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  257. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  258. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  259. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  260. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  261. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  262. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  263. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  264. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  265. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  266. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  267. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  268. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  269. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  270. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  271. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  272. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  273. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  274. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  275. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  276. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  277. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  278. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  279. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  280. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  281. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  282. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  283. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  284. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  285. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  286. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  287. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  288. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  289. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  290. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  291. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  292. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  293. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  294. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  295. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  296. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  297. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  298. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  299. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  300. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  301. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  302. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  303. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  304. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  305. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  306. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  307. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  308. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  309. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  310. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  311. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  312. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  313. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  314. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  315. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  316. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  317. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  318. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  319. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  320. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  321. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  322. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  323. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  324. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  325. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  326. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  327. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  328. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  329. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  330. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  331. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  332. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  333. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  334. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  335. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  336. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  337. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  338. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  339. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  340. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  341. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  342. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  343. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  344. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  345. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  346. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  347. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  348. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  349. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  350. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/workspace-scope-install.md +0 -0
  351. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  352. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/eslint.config.mjs +0 -0
  353. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/evals/README.md +0 -0
  354. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/evals/__init__.py +0 -0
  355. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/evals/baseline.json +0 -0
  356. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/evals/faithfulness.py +0 -0
  357. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/evals/golden_set.json +0 -0
  358. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/evals/make_corpus.py +0 -0
  359. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/evals/make_golden.py +0 -0
  360. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/evals/metrics.py +0 -0
  361. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/evals/run_evals.py +0 -0
  362. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/examples/README.md +0 -0
  363. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/examples/adapt-demo.sh +0 -0
  364. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/examples/boost-run-prototype.sh +0 -0
  365. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/index.html +0 -0
  366. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/noxfile.py +0 -0
  367. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/pyproject.toml +0 -0
  368. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/coverage-tools.in +0 -0
  369. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/coverage-tools.txt +0 -0
  370. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/lint-tools.in +0 -0
  371. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/lint-tools.txt +0 -0
  372. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/mutation-tools.in +0 -0
  373. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/mutation-tools.txt +0 -0
  374. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/platform-pins.lock +0 -0
  375. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/release-tools.in +0 -0
  376. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/release-tools.txt +0 -0
  377. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/test-tools.in +0 -0
  378. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/requirements/test-tools.txt +0 -0
  379. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/a11y_check.py +0 -0
  380. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/bench_cli.sh +0 -0
  381. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/build_command_reference.py +0 -0
  382. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/build_registries.py +0 -0
  383. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/build_roadmap.py +0 -0
  384. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/check_anchors.py +0 -0
  385. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/check_licenses.py +0 -0
  386. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/check_required_checks.py +0 -0
  387. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/ensure_eval_corpus.sh +0 -0
  388. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/eval_explain.py +0 -0
  389. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/eval_gate.py +0 -0
  390. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/eval_recommend.py +0 -0
  391. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/eval_retrieval.py +0 -0
  392. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/eval_stats_summary.py +0 -0
  393. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/import_budget.py +0 -0
  394. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/lock_toolchain.py +0 -0
  395. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/mutation_gate.py +0 -0
  396. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/mutation_shards.py +0 -0
  397. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/mutation_weights.json +0 -0
  398. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/perf_gate.py +0 -0
  399. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/post_deploy_smoke.py +0 -0
  400. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/release_guard.py +0 -0
  401. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/scripts/release_preflight.py +0 -0
  402. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/setup.cfg +0 -0
  403. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/sonar-project.properties +0 -0
  404. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/style/README.md +0 -0
  405. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/style/boost.css +0 -0
  406. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/style/boost.js +0 -0
  407. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/style/demo.html +0 -0
  408. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/adapt.feature +0 -0
  409. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/browse.feature +0 -0
  410. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/count.feature +0 -0
  411. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/discover.feature +0 -0
  412. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/doctor.feature +0 -0
  413. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/environment.py +0 -0
  414. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/explain.feature +0 -0
  415. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/index.feature +0 -0
  416. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/install.feature +0 -0
  417. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/list.feature +0 -0
  418. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/mcp.feature +0 -0
  419. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/search.feature +0 -0
  420. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/steps/cli_steps.py +0 -0
  421. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/steps/discovery_steps.py +0 -0
  422. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/steps/mcp_steps.py +0 -0
  423. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/bdd/features/steps/quality_steps.py +0 -0
  424. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/conftest.py +0 -0
  425. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/eval/baseline.json +0 -0
  426. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/eval/explain.jsonl +0 -0
  427. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/eval/golden-natural.jsonl +0 -0
  428. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/eval/golden.jsonl +0 -0
  429. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/eval/recommend.jsonl +0 -0
  430. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/eval/taps.txt +0 -0
  431. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_capabilities_policy.py +0 -0
  432. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_adapt.py +0 -0
  433. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_bmad.py +0 -0
  434. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_configuration.py +0 -0
  435. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_discovery.py +0 -0
  436. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_hooks.py +0 -0
  437. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_info.py +0 -0
  438. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_intelligence.py +0 -0
  439. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_pkg.py +0 -0
  440. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_quality.py +0 -0
  441. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_taps.py +0 -0
  442. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_cli_team.py +0 -0
  443. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_everyday_loop.py +0 -0
  444. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_integrity_enforce.py +0 -0
  445. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_property_parsers.py +0 -0
  446. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_run.py +0 -0
  447. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_tap_signing.py +0 -0
  448. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/functional/test_workspace_scope.py +0 -0
  449. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/README.md +0 -0
  450. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  451. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  452. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  453. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  454. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  455. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  456. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  457. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  458. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  459. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  460. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  461. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  462. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  463. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  464. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  465. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  466. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  467. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  468. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  469. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  470. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/fuzz_frontmatter.py +0 -0
  471. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/fuzz/fuzz_registry.py +0 -0
  472. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/make_fixture.py +0 -0
  473. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/perf/test_benchmarks.py +0 -0
  474. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/smoke.sh +0 -0
  475. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_a11y_check.py +0 -0
  476. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_adapters.py +0 -0
  477. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_adapters_multi.py +0 -0
  478. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_adapters_runner.py +0 -0
  479. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_agents.py +0 -0
  480. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_ai.py +0 -0
  481. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_capabilities.py +0 -0
  482. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_catalog.py +0 -0
  483. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_check_anchors.py +0 -0
  484. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_check_licenses.py +0 -0
  485. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_claude_settings.py +0 -0
  486. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_cliparse.py +0 -0
  487. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_codeql_analysis_key.py +0 -0
  488. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_command_reference_fresh.py +0 -0
  489. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_community_health_files.py +0 -0
  490. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_config.py +0 -0
  491. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_content_dedupe.py +0 -0
  492. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_dedup_trust.py +0 -0
  493. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_dense.py +0 -0
  494. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_dense_fallback.py +0 -0
  495. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_dense_fix_hint.py +0 -0
  496. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_dense_shards.py +0 -0
  497. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_dense_status.py +0 -0
  498. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_dependabot_config.py +0 -0
  499. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_docs_pages_linked.py +0 -0
  500. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_docsite_chrome.py +0 -0
  501. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_ed25519.py +0 -0
  502. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_embed.py +0 -0
  503. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_embed_local.py +0 -0
  504. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_entry_key.py +0 -0
  505. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_errors_and_cli_table.py +0 -0
  506. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_eval_baseline.py +0 -0
  507. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_eval_faithfulness.py +0 -0
  508. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_eval_gate.py +0 -0
  509. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_eval_metrics.py +0 -0
  510. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_eval_stats_summary.py +0 -0
  511. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_faithfulness.py +0 -0
  512. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_frontmatter.py +0 -0
  513. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_fuzz_targets.py +0 -0
  514. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_gitleaks_config.py +0 -0
  515. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_gitutil.py +0 -0
  516. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_imperative.py +0 -0
  517. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_import_budget.py +0 -0
  518. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_injectscan.py +0 -0
  519. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_installscan.py +0 -0
  520. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_integrity.py +0 -0
  521. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_journal.py +0 -0
  522. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_localembed.py +0 -0
  523. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_lockfile.py +0 -0
  524. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_logs.py +0 -0
  525. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_marketing_counts.py +0 -0
  526. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_mcp.py +0 -0
  527. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_mcp_install_scan.py +0 -0
  528. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_mcpdecl.py +0 -0
  529. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_mcphost.py +0 -0
  530. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_minisign.py +0 -0
  531. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_mutation_hardening.py +0 -0
  532. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_mutation_shards.py +0 -0
  533. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_mutation_subfile_shards.py +0 -0
  534. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_mutmut_source_paths.py +0 -0
  535. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_nethttp.py +0 -0
  536. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_output.py +0 -0
  537. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_paths.py +0 -0
  538. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_perf_gate.py +0 -0
  539. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_pkg_confusions.py +0 -0
  540. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_pkg_injection.py +0 -0
  541. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_pkg_secrets.py +0 -0
  542. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_platform_pins.py +0 -0
  543. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_policy.py +0 -0
  544. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_post_deploy_smoke.py +0 -0
  545. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_project_mcp_sidecar.py +0 -0
  546. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_projectlock.py +0 -0
  547. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_provenance.py +0 -0
  548. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_registries_fresh.py +0 -0
  549. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_registry.py +0 -0
  550. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_registry_categories.py +0 -0
  551. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_release_guard.py +0 -0
  552. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_release_preflight.py +0 -0
  553. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_required_checks.py +0 -0
  554. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_resolve.py +0 -0
  555. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_roadmap_fresh.py +0 -0
  556. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_rules.py +0 -0
  557. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_scopes.py +0 -0
  558. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_secretscan.py +0 -0
  559. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_selfupdate.py +0 -0
  560. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_serve.py +0 -0
  561. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_spin.py +0 -0
  562. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_stackprobe.py +0 -0
  563. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_staleness.py +0 -0
  564. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_store.py +0 -0
  565. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_token_parity.py +0 -0
  566. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_toolchain_lock.py +0 -0
  567. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_trustaudit.py +0 -0
  568. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_typosquat.py +0 -0
  569. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_updatediff.py +0 -0
  570. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_util.py +0 -0
  571. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_version.py +0 -0
  572. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_workflow_concurrency.py +0 -0
  573. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_workflow_timeouts.py +0 -0
  574. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/unit/test_workflows.py +0 -0
  575. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/visual/a11y_check.mjs +0 -0
  576. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/visual/console_check.mjs +0 -0
  577. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/visual/package-lock.json +0 -0
  578. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/visual/package.json +0 -0
  579. {boost_skill_cli-1.0.337 → boost_skill_cli-1.0.338}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.337
3
+ Version: 1.0.338
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.0.337'
22
- __version_tuple__ = version_tuple = (1, 0, 337)
21
+ __version__ = version = '1.0.338'
22
+ __version_tuple__ = version_tuple = (1, 0, 338)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -674,11 +674,22 @@ def retrieve(query: str, k: int = 60, kind: Optional[str] = None,
674
674
  return dedupe_by_content(hits, k)
675
675
 
676
676
 
677
- def rerank(query: str, hits: List[Hit], limit: int = 10) -> Tuple[List[Hit], str]:
678
- """Reorder the shortlist with the LLM bridge; degrade to BM25 order."""
677
+ def rerank(query: str, hits: List[Hit], limit: int = 10,
678
+ engine: str = "BM25 full-content") -> Tuple[List[Hit], str]:
679
+ """Reorder the shortlist with the LLM bridge; degrade to ``engine`` order.
680
+
681
+ ``engine`` is the label from whichever retrieval actually produced ``hits``.
682
+ Both degrade paths below return it rather than a hard-coded string: this
683
+ function does not know how the shortlist was built, and guessing was wrong
684
+ for every user whose dense store worked. Naming a specific wrong engine is
685
+ worse than naming none — the label is the only signal about which engine
686
+ answered, so a confident "BM25 full-content" sent debugging somewhere else.
687
+
688
+ The default keeps direct callers unchanged; ``search`` passes the real one.
689
+ """
679
690
  top = hits[:max(limit, 15)]
680
691
  if not ai.available():
681
- return hits[:limit], "BM25 full-content"
692
+ return hits[:limit], engine
682
693
  listing = "\n".join(
683
694
  "- %s [%s]: %s" % (h["entry"]["name"], h["entry"].get("kind", "skill"),
684
695
  (h["snippet"] or h["entry"].get("description", ""))[:180])
@@ -691,7 +702,9 @@ def rerank(query: str, hits: List[Hit], limit: int = 10) -> Tuple[List[Hit], str
691
702
  max_tokens=400)
692
703
  order = _json_array(reply)
693
704
  if not order:
694
- return hits[:limit], "BM25 full-content"
705
+ # The model answered but not with a JSON array, so the ordering falls
706
+ # back to whatever retrieval produced — and so must the label.
707
+ return hits[:limit], engine
695
708
  by_name = {h["entry"]["name"]: h for h in hits}
696
709
  picked = [by_name[str(n)] for n in order if str(n) in by_name]
697
710
  rest = [h for h in hits if h["entry"]["name"]
@@ -832,7 +845,9 @@ def search(query: str, limit: int = 10, kind: Optional[str] = None,
832
845
  if hits is None:
833
846
  return None
834
847
  if smart:
835
- return rerank(query, hits, limit)
848
+ # Hand the retrieval label down rather than dropping it: when the
849
+ # rerank degrades, this is the only thing that knows what actually ran.
850
+ return rerank(query, hits, limit, engine=engine)
836
851
  return hits[:limit], engine
837
852
 
838
853
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.337
3
+ Version: 1.0.338
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -303,6 +303,7 @@ docs/roadmap/items/required-checks-config-drift.md
303
303
  docs/roadmap/items/retrieval-quality-eval-harness.md
304
304
  docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md
305
305
  docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md
306
+ docs/roadmap/items/roadmap-page-weight-grows-without-bound.md
306
307
  docs/roadmap/items/robust-tag-argument-parsing.md
307
308
  docs/roadmap/items/ruff-016-widens-the-default-rule-set.md
308
309
  docs/roadmap/items/rule-install-native-materialization.md
@@ -0,0 +1,49 @@
1
+ ---
2
+ id: roadmap-page-weight-grows-without-bound
3
+ board: code
4
+ section: docsite
5
+ status: planned
6
+ category: Docs · Performance
7
+ complexity: M
8
+ impact: Med
9
+ wow: 2
10
+ note: 302 KB to 410 KB in one session; 164 shipped cards render in full
11
+ order: 76
12
+ owner:
13
+ pr:
14
+ title: <code>roadmap.html</code> grew 36% in one session and nothing bounds it
15
+ ---
16
+ The generated board is <b>407.6&nbsp;KB, of which 404.7&nbsp;KB is markup</b> — 189
17
+ <code>&lt;article&gt;</code> cards rendered eagerly into one DOM. Measured across this session's
18
+ merges it went <b>301.6&nbsp;KB &rarr; 409.9&nbsp;KB, a 36% rise</b>, monotonically increasing with
19
+ every card documented.
20
+
21
+ <b>The mechanism is that shipped work never stops costing.</b> Sizing the sections: <code>shipped</code>
22
+ 17.6&nbsp;KB / 16 cards, <code>next</code> 1.1&nbsp;KB / 1, <code>planned</code>
23
+ <b>383.0&nbsp;KB / 172</b> — but 164 of those 172 carry a <code>shipped</code> pill. They are finished
24
+ items grouped under their original section, each still rendering its full body, and those bodies grow
25
+ because closing an item well means recording what was measured and what turned out to be wrong. The
26
+ board is now mostly an archive that every visitor downloads in full.
27
+
28
+ <b>This is NOT what failed <code>lighthouse</code> on <code>#386</code>, and that is worth stating
29
+ because the correlation is seductive.</b> <code>#388</code> passed the same gate at
30
+ <b>409.9&nbsp;KB</b> — very slightly <em>larger</em> than <code>#386</code>'s 409.8&nbsp;KB, which
31
+ failed. A bigger page scoring better rules out page weight as that failure's cause; it was runner
32
+ variance, exactly as <code>lighthouse.yml</code>'s own comment predicts ("a single sample dips into
33
+ the 80s under runner load, which the median absorbs"). The performance floor is
34
+ <code>minScore 0.85</code> against a normal score of ~99–100, so there is real headroom today.
35
+
36
+ <b>The case for doing it anyway is the trend, not the current number.</b> At roughly +6&nbsp;KB per
37
+ merged card the page crosses 500&nbsp;KB within a few working sessions, and DOM size is precisely
38
+ what Lighthouse's performance category penalises — so this becomes the cause eventually even though
39
+ it is not the cause now.
40
+
41
+ <b>Likely levers, cheapest first.</b> Collapse shipped card bodies behind
42
+ <code>&lt;details&gt;</code> so the text ships but does not render — that alone addresses the
43
+ 383&nbsp;KB block and keeps every word searchable in the source. Failing that, render shipped items
44
+ as one-line entries linking to their item file, or paginate by section. All three live in
45
+ <code>scripts/build_roadmap.py</code>; none require touching an item file, which matters because the
46
+ item files are the merge-conflict-free part of this design.
47
+
48
+ <b>Do not raise the Lighthouse floor to fix this.</b> The floor is calibrated and honest; a page that
49
+ outgrows it should be made smaller, not re-graded.
@@ -111,7 +111,7 @@
111
111
  <div class="stat"><b>16</b><span>Shipped</span></div>
112
112
  <div class="stat"><b>1</b><span>Next up</span></div>
113
113
  <div class="stat"><b>4</b><span>Planned</span></div>
114
- <div class="stat"><b>189</b><span>Loop finds</span></div>
114
+ <div class="stat"><b>190</b><span>Loop finds</span></div>
115
115
  <!-- /ROADMAP:stats -->
116
116
  </div>
117
117
  </section>
@@ -5215,6 +5215,51 @@ so they were green on CI and red on any machine that had installed it.</p>
5215
5215
  <span class="m">silent BM25-only is the default outcome</span>
5216
5216
  </div>
5217
5217
  </article>
5218
+
5219
+ <article class="cap rcard" id="roadmap-page-weight-grows-without-bound">
5220
+ <div class="head"><span class="pill planned">Planned</span><span class="cat">Docs · Performance</span></div>
5221
+ <h3><code>roadmap.html</code> grew 36% in one session and nothing bounds it</h3>
5222
+ <p>The generated board is <b>407.6&nbsp;KB, of which 404.7&nbsp;KB is markup</b> — 189
5223
+ <code>&lt;article&gt;</code> cards rendered eagerly into one DOM. Measured across this session's
5224
+ merges it went <b>301.6&nbsp;KB &rarr; 409.9&nbsp;KB, a 36% rise</b>, monotonically increasing with
5225
+ every card documented.
5226
+
5227
+ <b>The mechanism is that shipped work never stops costing.</b> Sizing the sections: <code>shipped</code>
5228
+ 17.6&nbsp;KB / 16 cards, <code>next</code> 1.1&nbsp;KB / 1, <code>planned</code>
5229
+ <b>383.0&nbsp;KB / 172</b> — but 164 of those 172 carry a <code>shipped</code> pill. They are finished
5230
+ items grouped under their original section, each still rendering its full body, and those bodies grow
5231
+ because closing an item well means recording what was measured and what turned out to be wrong. The
5232
+ board is now mostly an archive that every visitor downloads in full.
5233
+
5234
+ <b>This is NOT what failed <code>lighthouse</code> on <code>#386</code>, and that is worth stating
5235
+ because the correlation is seductive.</b> <code>#388</code> passed the same gate at
5236
+ <b>409.9&nbsp;KB</b> — very slightly <em>larger</em> than <code>#386</code>'s 409.8&nbsp;KB, which
5237
+ failed. A bigger page scoring better rules out page weight as that failure's cause; it was runner
5238
+ variance, exactly as <code>lighthouse.yml</code>'s own comment predicts ("a single sample dips into
5239
+ the 80s under runner load, which the median absorbs"). The performance floor is
5240
+ <code>minScore 0.85</code> against a normal score of ~99–100, so there is real headroom today.
5241
+
5242
+ <b>The case for doing it anyway is the trend, not the current number.</b> At roughly +6&nbsp;KB per
5243
+ merged card the page crosses 500&nbsp;KB within a few working sessions, and DOM size is precisely
5244
+ what Lighthouse's performance category penalises — so this becomes the cause eventually even though
5245
+ it is not the cause now.
5246
+
5247
+ <b>Likely levers, cheapest first.</b> Collapse shipped card bodies behind
5248
+ <code>&lt;details&gt;</code> so the text ships but does not render — that alone addresses the
5249
+ 383&nbsp;KB block and keeps every word searchable in the source. Failing that, render shipped items
5250
+ as one-line entries linking to their item file, or paginate by section. All three live in
5251
+ <code>scripts/build_roadmap.py</code>; none require touching an item file, which matters because the
5252
+ item files are the merge-conflict-free part of this design.
5253
+
5254
+ <b>Do not raise the Lighthouse floor to fix this.</b> The floor is calibrated and honest; a page that
5255
+ outgrows it should be made smaller, not re-graded.</p>
5256
+ <div class="meta">
5257
+ <span class="m">Complexity <b>M</b></span>
5258
+ <span class="m">Impact <b>Med</b></span>
5259
+ <span class="m">Wow <b class="wow">★★</b></span>
5260
+ <span class="m">302 KB to 410 KB in one session; 164 shipped cards render in full</span>
5261
+ </div>
5262
+ </article>
5218
5263
  <!-- /ROADMAP:cards -->
5219
5264
 
5220
5265
  </div>
@@ -965,18 +965,23 @@ class TestSearchForwarding:
965
965
  rag.search("q", limit=1, smart=False)
966
966
  assert cap["k"] == 60 # max(60, 4)
967
967
 
968
- def test_forwards_query_and_limit_to_rerank(self, sandbox, monkeypatch):
968
+ def test_forwards_query_limit_and_engine_to_rerank(self, sandbox, monkeypatch):
969
+ # `engine` joined the signature so a degraded rerank can report what
970
+ # actually retrieved instead of assuming BM25; asserted here because
971
+ # dropping it again would be silent — search would still return a
972
+ # plausible label, just the wrong one.
969
973
  self._ready_index()
970
974
  monkeypatch.setattr(rag, "retrieve", lambda *a, **k: [_hit("a", 1.0)])
971
975
  cap = {}
972
976
 
973
- def spyr(query, hits, limit=10):
974
- cap.update(query=query, limit=limit)
977
+ def spyr(query, hits, limit=10, engine="BM25 full-content"):
978
+ cap.update(query=query, limit=limit, engine=engine)
975
979
  return ([], "x")
976
980
  monkeypatch.setattr(rag, "rerank", spyr)
977
981
  rag.search("theq", limit=5) # smart defaults to True
978
982
  assert cap["query"] == "theq"
979
983
  assert cap["limit"] == 5
984
+ assert cap["engine"] == "BM25 full-content" # what this index is
980
985
 
981
986
 
982
987
  class TestIndexPath:
@@ -209,3 +209,95 @@ class TestRetrieveAnyFuses:
209
209
  rag.retrieve_any("q", kind="rule", entries=ents)
210
210
  assert ("bm25", "rule", ents) in seen
211
211
  assert ("dense", "rule", ents) in seen
212
+
213
+
214
+ class TestRerankPreservesTheEngineLabel:
215
+ """The engine that actually retrieved must survive the rerank stage.
216
+
217
+ ``rerank`` hard-coded ``"BM25 full-content"`` on both of its degrade paths,
218
+ and ``search`` discards ``retrieve_any``'s label whenever ``smart`` is on —
219
+ which is the default, and what the MCP ``boost_search`` tool uses. So a user
220
+ whose dense store and fusion were working perfectly, but who had no
221
+ ``ANTHROPIC_API_KEY``, was told they were on BM25.
222
+
223
+ That is the same class of silent misreport the dense-status work existed to
224
+ kill: the label is the only signal a user has about which engine answered,
225
+ and a wrong one sends the investigation somewhere else entirely. Worse here
226
+ than a missing label, because it names a specific wrong engine confidently.
227
+ """
228
+
229
+ @staticmethod
230
+ def _hits():
231
+ return [_hit("a", 2.0), _hit("b", 1.0)]
232
+
233
+ def test_no_ai_reports_the_engine_that_retrieved(self, monkeypatch):
234
+ # THE regression. Fusion ran, the LLM was absent, and the old code
235
+ # answered "BM25 full-content" — naming an engine that did not rank
236
+ # these hits alone.
237
+ monkeypatch.setattr(rag.ai, "available", lambda: False)
238
+ _out, label = rag.rerank("q", self._hits(), limit=5,
239
+ engine="hybrid RRF (BM25 + dense)")
240
+ assert label == "hybrid RRF (BM25 + dense)"
241
+
242
+ def test_no_ai_reports_dense_when_dense_retrieved(self, monkeypatch):
243
+ monkeypatch.setattr(rag.ai, "available", lambda: True)
244
+ monkeypatch.setattr(rag.ai, "ask", lambda *_a, **_k: "not json at all")
245
+ _out, label = rag.rerank("q", self._hits(), limit=5,
246
+ engine="dense vectors")
247
+ assert label == "dense vectors"
248
+
249
+ def test_an_unparseable_reply_keeps_the_engine_too(self, monkeypatch):
250
+ # The second degrade path: the model answered, but not with a JSON
251
+ # array. Ordering falls back, so the label must fall back with it.
252
+ monkeypatch.setattr(rag.ai, "available", lambda: True)
253
+ monkeypatch.setattr(rag.ai, "ask", lambda *_a, **_k: "sorry, I can't")
254
+ _out, label = rag.rerank("q", self._hits(), limit=5,
255
+ engine="hybrid RRF (BM25 + dense)")
256
+ assert label == "hybrid RRF (BM25 + dense)"
257
+
258
+ def test_a_successful_rerank_still_says_claude(self, monkeypatch):
259
+ # The LLM really did decide the order here, so crediting the retrieval
260
+ # engine instead would be the same bug pointing the other way.
261
+ monkeypatch.setattr(rag.ai, "available", lambda: True)
262
+ monkeypatch.setattr(rag.ai, "ask", lambda *_a, **_k: '["b", "a"]')
263
+ out, label = rag.rerank("q", self._hits(), limit=5,
264
+ engine="hybrid RRF (BM25 + dense)")
265
+ assert _names(out) == ["b", "a"]
266
+ assert label == "Claude relevance"
267
+
268
+ def test_the_default_keeps_existing_callers_honest(self, monkeypatch):
269
+ # Back-compat: an omitted engine still reads "BM25 full-content", so
270
+ # this is additive for anything that calls rerank directly.
271
+ monkeypatch.setattr(rag.ai, "available", lambda: False)
272
+ _out, label = rag.rerank("q", self._hits(), limit=5)
273
+ assert label == "BM25 full-content"
274
+
275
+
276
+ class TestSearchReportsTheTruthEndToEnd:
277
+ """`search` is where the label is chosen, so the bug is only really fixed
278
+ if it survives the whole path an MCP call takes."""
279
+
280
+ @staticmethod
281
+ def _wire(monkeypatch, engine_hits, ai_ok):
282
+ from boost_cli.core import dense as dense_mod
283
+ monkeypatch.setattr(rag, "ready", lambda: True)
284
+ monkeypatch.setattr(rag, "retrieve", lambda *_a, **_k: list(engine_hits))
285
+ monkeypatch.setattr(dense_mod, "ready", lambda: True)
286
+ monkeypatch.setattr(dense_mod, "retrieve", lambda *_a, **_k: list(engine_hits))
287
+ monkeypatch.setattr(rag.ai, "available", lambda: ai_ok)
288
+
289
+ def test_fused_retrieval_without_a_key_is_not_called_bm25(self, monkeypatch):
290
+ # Exactly the MCP boost_search path: smart defaults on, no key.
291
+ self._wire(monkeypatch, [_hit("a"), _hit("b")], ai_ok=False)
292
+ result = rag.search("q", limit=5)
293
+ assert result is not None
294
+ _hits, label = result
295
+ assert label != "BM25 full-content"
296
+ assert "dense" in label, label
297
+
298
+ def test_smart_off_is_unaffected(self, monkeypatch):
299
+ self._wire(monkeypatch, [_hit("a")], ai_ok=True)
300
+ result = rag.search("q", limit=5, smart=False)
301
+ assert result is not None
302
+ _hits, label = result
303
+ assert "dense" in label, label