boost-skill-cli 1.2.148__tar.gz → 1.2.150__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 (1114) hide show
  1. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/quality.py +5 -2
  4. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/dense.py +94 -11
  5. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/embed.py +35 -4
  6. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  7. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  8. boost_skill_cli-1.2.150/docs/demo.gif +0 -0
  9. boost_skill_cli-1.2.150/docs/roadmap/items/dense-local-built-store-displaced-by-a-key.md +37 -0
  10. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dense-no-key-guard-is-unreachable.md +9 -7
  11. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap.html +49 -57
  12. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/semantic-search.md +29 -5
  13. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_fix_hint.py +308 -5
  14. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_model_unavailable.py +3 -1
  15. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_status.py +31 -1
  16. boost_skill_cli-1.2.150/tests/unit/test_embed_outranking.py +136 -0
  17. boost_skill_cli-1.2.148/docs/demo.gif +0 -0
  18. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.gitattributes +0 -0
  19. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.gitignore +0 -0
  20. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.gitleaks.toml +0 -0
  21. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.htmlvalidate.json +0 -0
  22. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.lighthouserc.json +0 -0
  23. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.lycheeignore +0 -0
  24. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.markdownlint-cli2.jsonc +0 -0
  25. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.pre-commit-config.yaml +0 -0
  26. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.stylelintrc.json +0 -0
  27. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.vale/styles/boost/AIWriting.yml +0 -0
  28. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.vale/styles/boost/Terminology.yml +0 -0
  29. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  30. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/.vale.ini +0 -0
  31. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/CLAUDE.md +0 -0
  32. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/CODE_OF_CONDUCT.md +0 -0
  33. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/CONTRIBUTING.md +0 -0
  34. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/DCO +0 -0
  35. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/GOVERNANCE.md +0 -0
  36. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/LICENSE +0 -0
  37. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/MAINTAINERS.md +0 -0
  38. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/MANIFEST.in +0 -0
  39. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/Makefile +0 -0
  40. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/README.md +0 -0
  41. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/SECURITY.md +0 -0
  42. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/SUPPORT.md +0 -0
  43. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost +0 -0
  44. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/__init__.py +0 -0
  45. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/__main__.py +0 -0
  46. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/cli.py +0 -0
  47. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/cliparse.py +0 -0
  48. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/__init__.py +0 -0
  49. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/_common.py +0 -0
  50. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/bmad.py +0 -0
  51. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/configuration.py +0 -0
  52. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/discovery.py +0 -0
  53. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/hooks.py +0 -0
  54. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/info.py +0 -0
  55. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/intelligence.py +0 -0
  56. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/pkg.py +0 -0
  57. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/quickstart.py +0 -0
  58. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/run.py +0 -0
  59. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/safety.py +0 -0
  60. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/taps.py +0 -0
  61. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/commands/team.py +0 -0
  62. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/__init__.py +0 -0
  63. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/adapters.py +0 -0
  64. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/agents.py +0 -0
  65. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/ai.py +0 -0
  66. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/aihost.py +0 -0
  67. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/archive.py +0 -0
  68. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/bmad.py +0 -0
  69. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/bootstrap.py +0 -0
  70. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/browse.py +0 -0
  71. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/builtin.py +0 -0
  72. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/capabilities.py +0 -0
  73. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/catalog.py +0 -0
  74. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/catalogbundle.py +0 -0
  75. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/chat.py +0 -0
  76. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/claude_settings.py +0 -0
  77. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/cohort.py +0 -0
  78. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/compact.py +0 -0
  79. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/complete.py +0 -0
  80. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/config.py +0 -0
  81. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/deps.py +0 -0
  82. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/discovery.py +0 -0
  83. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/ed25519.py +0 -0
  84. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/faithfulness.py +0 -0
  85. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/frontmatter.py +0 -0
  86. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/gitutil.py +0 -0
  87. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/hookhost.py +0 -0
  88. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/imperative.py +0 -0
  89. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/injectscan.py +0 -0
  90. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/installscan.py +0 -0
  91. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/integrity.py +0 -0
  92. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/journal.py +0 -0
  93. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/jsonstate.py +0 -0
  94. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/localembed.py +0 -0
  95. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/lockfile.py +0 -0
  96. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/logs.py +0 -0
  97. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/mcp.py +0 -0
  98. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/mcpdecl.py +0 -0
  99. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/mcphost.py +0 -0
  100. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/minisign.py +0 -0
  101. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/nethttp.py +0 -0
  102. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/output.py +0 -0
  103. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/paths.py +0 -0
  104. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/policy.py +0 -0
  105. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/prereq.py +0 -0
  106. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/projectlock.py +0 -0
  107. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/provenance.py +0 -0
  108. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/rag.py +0 -0
  109. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/registry.py +0 -0
  110. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/report.py +0 -0
  111. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/resolve.py +0 -0
  112. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/rules.py +0 -0
  113. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/scopes.py +0 -0
  114. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/secretscan.py +0 -0
  115. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/selfupdate.py +0 -0
  116. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/serve.py +0 -0
  117. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/shards.py +0 -0
  118. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/stackprobe.py +0 -0
  119. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/staleness.py +0 -0
  120. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/store.py +0 -0
  121. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/trustaudit.py +0 -0
  122. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/typedvalue.py +0 -0
  123. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/typosquat.py +0 -0
  124. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/updatediff.py +0 -0
  125. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/util.py +0 -0
  126. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/core/workflows.py +0 -0
  127. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/data/registries.json +0 -0
  128. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/data/rules/boost-first.mdc +0 -0
  129. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/errors.py +0 -0
  130. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_cli/spin.py +0 -0
  131. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_langchain/__init__.py +0 -0
  132. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_langchain/_compat.py +0 -0
  133. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_langchain/graph.py +0 -0
  134. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_langchain/loader.py +0 -0
  135. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_langchain/py.typed +0 -0
  136. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_langchain/retriever.py +0 -0
  137. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  138. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  139. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_skill_cli.egg-info/requires.txt +0 -0
  140. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/boost_skill_cli.egg-info/top_level.txt +0 -0
  141. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/codecov.yml +0 -0
  142. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/DEBUGGING.md +0 -0
  143. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/adapters.html +0 -0
  144. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/architecture/README.md +0 -0
  145. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/architecture/c4-components-core.md +0 -0
  146. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/architecture/c4-containers.md +0 -0
  147. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/architecture/c4-context.md +0 -0
  148. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/architecture/c4-dynamic-install.md +0 -0
  149. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/bmad.md +0 -0
  150. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/gifs/distill.gif +0 -0
  151. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/gifs/doctor.gif +0 -0
  152. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/gifs/explain.gif +0 -0
  153. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/gifs/hooks.gif +0 -0
  154. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/gifs/install.gif +0 -0
  155. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/gifs/pulse.gif +0 -0
  156. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/gifs/search.gif +0 -0
  157. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/gifs/tap.gif +0 -0
  158. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/tapes/distill.tape +0 -0
  159. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/tapes/doctor.tape +0 -0
  160. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/tapes/explain.tape +0 -0
  161. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/tapes/hooks.tape +0 -0
  162. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/tapes/install.tape +0 -0
  163. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/tapes/pulse.tape +0 -0
  164. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/tapes/search.tape +0 -0
  165. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel/tapes/tap.tape +0 -0
  166. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/carousel.html +0 -0
  167. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/chat.html +0 -0
  168. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/code-review.md +0 -0
  169. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/commands.html +0 -0
  170. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/commit-audit.md +0 -0
  171. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/demo-index.json +0 -0
  172. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/demo.html +0 -0
  173. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/demo.tape +0 -0
  174. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/dependencies.md +0 -0
  175. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/design-roadmap.html +0 -0
  176. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/eval-latest.json +0 -0
  177. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/eval.html +0 -0
  178. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/index.html +0 -0
  179. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/langchain.html +0 -0
  180. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/mcp-hub.html +0 -0
  181. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/openssf-badge.md +0 -0
  182. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/openssf-playbook.md +0 -0
  183. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/rag-architecture.md +0 -0
  184. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D01.md +0 -0
  185. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D02.md +0 -0
  186. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D03.md +0 -0
  187. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D04.md +0 -0
  188. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D05.md +0 -0
  189. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D06.md +0 -0
  190. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D07.md +0 -0
  191. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D08.md +0 -0
  192. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D09.md +0 -0
  193. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D10.md +0 -0
  194. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D11.md +0 -0
  195. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D12.md +0 -0
  196. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D13.md +0 -0
  197. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D14.md +0 -0
  198. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D15.md +0 -0
  199. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D16.md +0 -0
  200. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D17.md +0 -0
  201. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D18.md +0 -0
  202. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D19.md +0 -0
  203. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D20.md +0 -0
  204. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D21.md +0 -0
  205. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D22.md +0 -0
  206. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D23.md +0 -0
  207. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D24.md +0 -0
  208. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D25.md +0 -0
  209. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D26.md +0 -0
  210. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/BOOST-D27.md +0 -0
  211. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/a-correct-link-in-a-locked-dir-reads-as-refused.md +0 -0
  212. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/a-new-shipped-card-always-404s-its-own-write-up-link.md +0 -0
  213. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/a-refusal-and-its-remedy-never-wrapped.md +0 -0
  214. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  215. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  216. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  217. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  218. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/agent-dir-shapes-install-still-trips-on.md +0 -0
  219. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  220. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  221. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  222. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  223. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  224. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  225. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  226. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  227. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  228. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  229. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  230. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-attest-findings.md +0 -0
  231. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-audit-findings.md +0 -0
  232. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-bmad-findings.md +0 -0
  233. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-browse-findings.md +0 -0
  234. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  235. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  236. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  237. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  238. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-chat-findings.md +0 -0
  239. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  240. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  241. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  242. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-completions-findings.md +0 -0
  243. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-config-findings.md +0 -0
  244. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  245. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-context-findings.md +0 -0
  246. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  247. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
  248. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-create-findings.md +0 -0
  249. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  250. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-deps-findings.md +0 -0
  251. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-discover-findings.md +0 -0
  252. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  253. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  254. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-drift-findings.md +0 -0
  255. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  256. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-edit-findings.md +0 -0
  257. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  258. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-explain-findings.md +0 -0
  259. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-export-findings.md +0 -0
  260. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  261. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  262. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  263. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  264. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  265. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-health-findings.md +0 -0
  266. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  267. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  268. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-import-findings.md +0 -0
  269. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-index-findings.md +0 -0
  270. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  271. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  272. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-install-findings.md +0 -0
  273. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  274. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  275. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-lint-findings.md +0 -0
  276. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-log-findings.md +0 -0
  277. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  278. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  279. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  280. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  281. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
  282. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  283. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  284. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  285. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  286. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  287. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  288. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-policy-findings.md +0 -0
  289. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-preview-findings.md +0 -0
  290. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-profile-findings.md +0 -0
  291. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  292. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  293. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  294. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  295. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  296. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  297. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  298. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  299. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  300. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-replay-findings.md +0 -0
  301. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-root-findings.md +0 -0
  302. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  303. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-run-findings.md +0 -0
  304. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  305. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-search-findings.md +0 -0
  306. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  307. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
  308. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
  309. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  310. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  311. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  312. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
  313. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  314. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-sync-findings.md +0 -0
  315. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-tag-findings.md +0 -0
  316. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  317. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-tap-findings.md +0 -0
  318. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-taps-findings.md +0 -0
  319. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  320. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-test-findings.md +0 -0
  321. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-trust-findings.md +0 -0
  322. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  323. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  324. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-untap-findings.md +0 -0
  325. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-update-findings.md +0 -0
  326. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  327. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-verify-findings.md +0 -0
  328. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/audit-who-findings.md +0 -0
  329. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  330. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bare-boost-never-names-an-entry-point.md +0 -0
  331. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/because-that-was-not-the-reason.md +0 -0
  332. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bm25-empty-tokenization-kills-catalog-fallback.md +0 -0
  333. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  334. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  335. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  336. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bmad-done-contract-ignores-the-track.md +0 -0
  337. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bmad-gemini-gets-claude-hook-output.md +0 -0
  338. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  339. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bmad-personas-delegate-outside-the-router.md +0 -0
  340. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bmad-roster-drifted-from-bmad-6-12.md +0 -0
  341. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bmad-route-ignores-autopilot-state.md +0 -0
  342. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bmad-router-one-keyword-decides-the-track.md +0 -0
  343. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bmad-router-reads-each-prompt-alone.md +0 -0
  344. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  345. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/boost-first-rule.md +0 -0
  346. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  347. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  348. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/branch-current-gate.md +0 -0
  349. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  350. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  351. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  352. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  353. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  354. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  355. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/cache-writers-that-still-crash-on-a-read-only-cache.md +0 -0
  356. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  357. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
  358. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  359. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  360. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  361. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  362. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  363. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ci-summary-reports-the-wrong-coverage-gate.md +0 -0
  364. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  365. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  366. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/claude-md-instructs-the-wrong-licence-header.md +0 -0
  367. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  368. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  369. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/cli-command-audit.md +0 -0
  370. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  371. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  372. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  373. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/codex-hooks-timeout-units-are-unestablished.md +0 -0
  374. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/codex-is-not-an-mcp-host.md +0 -0
  375. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  376. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/command-carousel-page.md +0 -0
  377. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  378. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/compact-answers-a-named-tap-with-a-global-all-clear.md +0 -0
  379. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  380. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  381. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  382. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
  383. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/config-json-edge-shapes-crash-or-disagree.md +0 -0
  384. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  385. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/corpus-refresh-updates-data-not-prose.md +0 -0
  386. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/corrupt-config-reads-as-ready-to-set-up.md +0 -0
  387. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/count-flags-that-silently-invert.md +0 -0
  388. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  389. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  390. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  391. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  392. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  393. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  394. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  395. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  396. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  397. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dense-kill-switch-has-no-reason-state.md +0 -0
  398. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dense-ready-but-embedder-cannot-run.md +0 -0
  399. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  400. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  401. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  402. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  403. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  404. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  405. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  406. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  407. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  408. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  409. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  410. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  411. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  412. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  413. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/doctor-prescribes-sync-that-deletes-live-links.md +0 -0
  414. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  415. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  416. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  417. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/err-colour-judged-by-stdout.md +0 -0
  418. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/err-multiline-hint-colours-across-the-newline.md +0 -0
  419. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  420. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  421. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-corpus-counted-by-the-method-the-repo-disavows.md +0 -0
  422. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-corpus-duplication-is-intra-tap-not-mirrors.md +0 -0
  423. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  424. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  425. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  426. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  427. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  428. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-floor-calibration-stale-after-pin-refresh.md +0 -0
  429. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-gate-scores-a-body-less-corpus.md +0 -0
  430. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  431. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/exemplar-graded-golden-set-runs-in-no-gate.md +0 -0
  432. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  433. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/explain-outline-has-no-cap.md +0 -0
  434. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  435. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  436. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  437. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  438. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  439. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  440. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  441. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  442. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/free-threaded-canary-warns-about-nothing.md +0 -0
  443. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  444. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/gate-parity-test-ignores-k-and-golden.md +0 -0
  445. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/gated-golden-set-has-zero-exemplars.md +0 -0
  446. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  447. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  448. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  449. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  450. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  451. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/github-community-health-files.md +0 -0
  452. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  453. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  454. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  455. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  456. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  457. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  458. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/hooks-list-drops-the-name-before-the-host.md +0 -0
  459. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  460. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/identifier-columns-shrink-to-a-name-no-command-accepts.md +0 -0
  461. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/import-budget-gate-passes-when-boost-cannot-import.md +0 -0
  462. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/info-deps-materialize-a-dir-they-then-reject.md +0 -0
  463. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  464. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/install-cannot-tell-a-skill-needs-another-one.md +0 -0
  465. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  466. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  467. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  468. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/install-paths-that-still-drop-the-result.md +0 -0
  469. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  470. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  471. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  472. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  473. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  474. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  475. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  476. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/keyed-no-store-hint-disagrees-with-shard-remedy.md +0 -0
  477. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  478. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  479. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  480. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  481. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  482. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  483. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  484. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  485. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  486. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/lighthouse-flips-on-byte-identical-input.md +0 -0
  487. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  488. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/links-job-503s-its-own-write-up-links.md +0 -0
  489. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  490. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  491. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  492. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  493. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/lock-kept-links-it-had-just-removed.md +0 -0
  494. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  495. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  496. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  497. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  498. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  499. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  500. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  501. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  502. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/manifest-in-prunes-only-the-root-copy.md +0 -0
  503. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  504. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  505. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  506. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  507. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  508. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  509. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  510. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-doctor-says-healthy-where-mcp-search-says-nothing-is-tapped.md +0 -0
  511. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  512. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-install-description-omits-antigravity.md +0 -0
  513. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  514. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  515. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-miss-reply-echoes-the-whole-query.md +0 -0
  516. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  517. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  518. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-registration-writes-outside-a-sandboxed-home.md +0 -0
  519. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  520. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-search-cost-overstated-on-keyless-machines.md +0 -0
  521. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  522. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  523. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-server-dies-on-a-valid-json-message-that-is-not-an-object.md +0 -0
  524. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  525. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-session-dies-on-a-deeply-nested-json-line.md +0 -0
  526. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-skip-list-absent-from-tool-descriptions.md +0 -0
  527. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  528. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  529. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  530. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  531. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  532. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  533. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  534. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  535. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  536. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  537. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  538. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  539. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  540. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  541. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
  542. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  543. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  544. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/one-bad-agent-dir-silences-the-whole-doctor-report.md +0 -0
  545. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  546. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  547. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  548. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/one-failed-shard-job-drops-registries-from-the-manifest.md +0 -0
  549. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  550. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  551. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  552. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/openssf-playbook.md +0 -0
  553. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/openssf-silver.md +0 -0
  554. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  555. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  556. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/panel-fits-data-to-an-assumed-80-in-a-pipe.md +0 -0
  557. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  558. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  559. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  560. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  561. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  562. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  563. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  564. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  565. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  566. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  567. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  568. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  569. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  570. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  571. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  572. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  573. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  574. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  575. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
  576. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  577. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  578. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  579. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  580. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  581. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/quickstart-drops-incompatible-shard-status.md +0 -0
  582. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/quickstart-manifest-error-drops-hint-and-misnames-cause.md +0 -0
  583. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/quickstart-rerun-retargets-tapped-registries.md +0 -0
  584. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/quickstart-says-ready-exit-0-after-every-tap-failed.md +0 -0
  585. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/quickstart-shard-download-invisible-in-preview-and-run.md +0 -0
  586. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  587. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  588. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/read-only-boost-home-with-no-cache-dir.md +0 -0
  589. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/readme-81-command-table-lists-80-omits-quickstart.md +0 -0
  590. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/readme-hero-installs-a-name-no-starter-registry-ships.md +0 -0
  591. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  592. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/reclone-leaves-a-clone-on-head-when-it-cannot-reach-the-pin.md +0 -0
  593. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/recommend-recomputes-its-columns-per-row.md +0 -0
  594. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  595. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/refresh-strands-the-natural-set-baseline.md +0 -0
  596. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  597. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/reindex-reported-a-completeness-share-it-could-not-compute.md +0 -0
  598. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  599. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/release-guard-fails-open-when-it-cannot-read-tags.md +0 -0
  600. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  601. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/relicence-apache-2.md +0 -0
  602. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  603. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  604. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  605. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/required-eval-gate-still-grades-by-name.md +0 -0
  606. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  607. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  608. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  609. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/roadmap-boards-advertise-python-39.md +0 -0
  610. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  611. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  612. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  613. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  614. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  615. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  616. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  617. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  618. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  619. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sandbox-fixture-does-not-sandbox-the-working-directory.md +0 -0
  620. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  621. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  622. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  623. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  624. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  625. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  626. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  627. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  628. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  629. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/search-caps-the-two-copyable-identifiers.md +0 -0
  630. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/search-drops-symbol-language-queries-silently.md +0 -0
  631. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/search-footer-not-fitted-to-the-pane-its-rows-were-fitted-to.md +0 -0
  632. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/search-footer-overflows-40-col-pane-gate-passes-by-luck.md +0 -0
  633. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  634. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/search-relevance-meter-is-constant-on-default-page.md +0 -0
  635. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/search-rows-use-term-width-so-piping-drops-the-tap-column.md +0 -0
  636. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  637. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  638. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  639. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  640. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  641. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  642. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  643. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  644. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  645. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  646. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  647. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  648. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  649. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  650. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/shrink-the-published-index.md +0 -0
  651. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  652. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  653. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  654. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  655. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/stale-gate-sizes-in-readme-and-contributing.md +0 -0
  656. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/stale-tap-hint-dead-for-tap-only-installs.md +0 -0
  657. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  658. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  659. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  660. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  661. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/surface-dehyphenation-rationale-is-false.md +0 -0
  662. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  663. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sweep-died-at-a-page-not-at-launch.md +0 -0
  664. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  665. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  666. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  667. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  668. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sync-repairs-a-disabled-agents-row-every-run.md +0 -0
  669. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  670. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/table-fit-widths-floor-destroys-columns-and-still-overflows.md +0 -0
  671. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  672. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  673. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/taps-vouches-for-a-clone-that-is-not-there.md +0 -0
  674. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  675. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/the-install-path-hands-agy-claudes-mcp-argv.md +0 -0
  676. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/the-links-concurrency-cap-did-not-hold.md +0 -0
  677. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/the-model-back-off-mixes-two-clocks.md +0 -0
  678. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  679. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  680. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/the-windows-test-cap-is-five-minutes-from-the-measurement.md +0 -0
  681. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  682. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/tier3-ceiling-unreachable-at-default-n.md +0 -0
  683. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  684. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  685. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  686. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  687. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/typos-reported-as-boost-bugs.md +0 -0
  688. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  689. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  690. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  691. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/unreadable-tap-cache-healthy-doctor-crashing-heal.md +0 -0
  692. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  693. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  694. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/unwritable-agent-dir-has-no-remedy.md +0 -0
  695. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/unwritable-rule-or-workflow-dir-crashes-install.md +0 -0
  696. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  697. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  698. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  699. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  700. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  701. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  702. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  703. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  704. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  705. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  706. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  707. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  708. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  709. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  710. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/workspace-scope-install.md +0 -0
  711. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/zip-strict-audit.md +0 -0
  712. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  713. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  714. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/security-design.md +0 -0
  715. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  716. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/verifying-releases.md +0 -0
  717. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/vex/meta.md +0 -0
  718. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/vex/openvex.json +0 -0
  719. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  720. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  721. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  722. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  723. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/eslint.config.mjs +0 -0
  724. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/README.md +0 -0
  725. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/__init__.py +0 -0
  726. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/baseline.json +0 -0
  727. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/faithfulness.py +0 -0
  728. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/golden_set.json +0 -0
  729. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/make_corpus.py +0 -0
  730. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/make_golden.py +0 -0
  731. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/metrics.py +0 -0
  732. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/publish_golden_dataset.py +0 -0
  733. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/evals/run_evals.py +0 -0
  734. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/examples/README.md +0 -0
  735. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/examples/adapt-demo.sh +0 -0
  736. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/examples/boost-run-prototype.sh +0 -0
  737. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/index.html +0 -0
  738. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/noxfile.py +0 -0
  739. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/pyproject.toml +0 -0
  740. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/coverage-tools.in +0 -0
  741. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/coverage-tools.txt +0 -0
  742. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/lint-tools.in +0 -0
  743. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/lint-tools.txt +0 -0
  744. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/mutation-tools.in +0 -0
  745. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/mutation-tools.txt +0 -0
  746. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/platform-pins.lock +0 -0
  747. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/release-tools.in +0 -0
  748. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/release-tools.txt +0 -0
  749. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/test-tools.in +0 -0
  750. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/requirements/test-tools.txt +0 -0
  751. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/a11y_check.py +0 -0
  752. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/add_spdx_headers.py +0 -0
  753. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/bench_cli.sh +0 -0
  754. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/build_command_reference.py +0 -0
  755. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/build_demo_index.py +0 -0
  756. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/build_registries.py +0 -0
  757. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/build_roadmap.py +0 -0
  758. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/build_scale_corpus.py +0 -0
  759. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/build_vex.py +0 -0
  760. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/check_anchors.py +0 -0
  761. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/check_branch_current.py +0 -0
  762. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/check_dco.py +0 -0
  763. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/check_licenses.py +0 -0
  764. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/check_reproducible.py +0 -0
  765. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/check_required_checks.py +0 -0
  766. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/ensure_eval_corpus.sh +0 -0
  767. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/eval_corpus.py +0 -0
  768. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/eval_explain.py +0 -0
  769. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/eval_gate.py +0 -0
  770. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/eval_recommend.py +0 -0
  771. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/eval_retrieval.py +0 -0
  772. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/eval_stats_summary.py +0 -0
  773. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/eval_tools.py +0 -0
  774. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/import_budget.py +0 -0
  775. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/lock_toolchain.py +0 -0
  776. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/measure_near_duplicate_bound.py +0 -0
  777. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/measure_registry.py +0 -0
  778. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/mutation_gate.py +0 -0
  779. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/mutation_shards.py +0 -0
  780. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/mutation_weights.json +0 -0
  781. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/normalize_sdist.py +0 -0
  782. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/page_budget.py +0 -0
  783. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/perf_gate.py +0 -0
  784. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/post_deploy_smoke.py +0 -0
  785. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/publish_eval_json.py +0 -0
  786. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/publish_shards.py +0 -0
  787. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/release_guard.py +0 -0
  788. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/release_preflight.py +0 -0
  789. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/serve_docs.py +0 -0
  790. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/scripts/shard_plan.py +0 -0
  791. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/setup.cfg +0 -0
  792. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/sonar-project.properties +0 -0
  793. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/style/README.md +0 -0
  794. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/style/boost.css +0 -0
  795. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/style/boost.js +0 -0
  796. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/style/demo.html +0 -0
  797. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/adapt.feature +0 -0
  798. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/browse.feature +0 -0
  799. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/count.feature +0 -0
  800. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/discover.feature +0 -0
  801. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/doctor.feature +0 -0
  802. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/environment.py +0 -0
  803. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/explain.feature +0 -0
  804. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/index.feature +0 -0
  805. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/install.feature +0 -0
  806. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/list.feature +0 -0
  807. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/mcp.feature +0 -0
  808. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/search.feature +0 -0
  809. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/steps/cli_steps.py +0 -0
  810. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/steps/discovery_steps.py +0 -0
  811. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/steps/mcp_steps.py +0 -0
  812. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/bdd/features/steps/quality_steps.py +0 -0
  813. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/conftest.py +0 -0
  814. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/eval/baseline.json +0 -0
  815. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/eval/explain.jsonl +0 -0
  816. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  817. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/eval/golden-natural.jsonl +0 -0
  818. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/eval/golden.jsonl +0 -0
  819. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/eval/recommend.jsonl +0 -0
  820. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/eval/taps-scale.txt +0 -0
  821. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/eval/taps.txt +0 -0
  822. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/eval/tool_calls.jsonl +0 -0
  823. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_bad_input_is_not_a_crash.py +0 -0
  824. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_bmad_all_hosts.py +0 -0
  825. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_bmad_personas_scope.py +0 -0
  826. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_capabilities_policy.py +0 -0
  827. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_adapt.py +0 -0
  828. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_bmad.py +0 -0
  829. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_catalog.py +0 -0
  830. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_chat.py +0 -0
  831. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_configuration.py +0 -0
  832. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_discovery.py +0 -0
  833. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_hooks.py +0 -0
  834. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_hooks_codex.py +0 -0
  835. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_hooks_gemini.py +0 -0
  836. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_identifier_columns.py +0 -0
  837. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_info.py +0 -0
  838. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_intelligence.py +0 -0
  839. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_json_reports.py +0 -0
  840. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_pane_width.py +0 -0
  841. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_pkg.py +0 -0
  842. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_quality.py +0 -0
  843. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_quickstart.py +0 -0
  844. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_tap_pins.py +0 -0
  845. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_taps.py +0 -0
  846. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_cli_team.py +0 -0
  847. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_context_sees_an_unborn_branch.py +0 -0
  848. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_count_flags_reject_nonpositive.py +0 -0
  849. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_everyday_loop.py +0 -0
  850. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_integrity_enforce.py +0 -0
  851. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_keyed_no_store_hint.py +0 -0
  852. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_kind_conformance.py +0 -0
  853. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_property_parsers.py +0 -0
  854. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_recommend_because_is_true.py +0 -0
  855. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_repo_root_guard_covers_real_installs.py +0 -0
  856. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_reports_match_reality.py +0 -0
  857. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_run.py +0 -0
  858. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_tap_signing.py +0 -0
  859. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/functional/test_workspace_scope.py +0 -0
  860. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/README.md +0 -0
  861. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  862. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  863. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  864. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  865. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  866. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  867. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  868. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  869. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  870. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  871. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  872. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  873. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  874. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  875. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  876. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  877. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  878. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  879. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  880. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  881. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  882. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  883. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  884. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/fuzz_frontmatter.py +0 -0
  885. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/fuzz/fuzz_registry.py +0 -0
  886. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/langchain/conftest.py +0 -0
  887. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/langchain/test_graph.py +0 -0
  888. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/langchain/test_loader.py +0 -0
  889. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/langchain/test_retriever.py +0 -0
  890. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/make_fixture.py +0 -0
  891. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/perf/test_benchmarks.py +0 -0
  892. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/smoke.sh +0 -0
  893. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/data/bmad-skills-6.12.0.json +0 -0
  894. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_a11y_check.py +0 -0
  895. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_action_pin_lockstep.py +0 -0
  896. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_adapters.py +0 -0
  897. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_adapters_multi.py +0 -0
  898. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_adapters_runner.py +0 -0
  899. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_agents.py +0 -0
  900. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_ai.py +0 -0
  901. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_aihost.py +0 -0
  902. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_archive.py +0 -0
  903. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_bmad_core.py +0 -0
  904. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_boost_first_offer.py +0 -0
  905. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_bootstrap.py +0 -0
  906. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_bot_pr_dco.py +0 -0
  907. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_branch_current.py +0 -0
  908. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_browse.py +0 -0
  909. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_builtin.py +0 -0
  910. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_canary_deps.py +0 -0
  911. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_capabilities.py +0 -0
  912. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_catalog.py +0 -0
  913. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_catalog_keyword_words.py +0 -0
  914. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_catalogbundle.py +0 -0
  915. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_chat.py +0 -0
  916. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_check_anchors.py +0 -0
  917. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_check_dco.py +0 -0
  918. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_check_licenses.py +0 -0
  919. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_check_reproducible.py +0 -0
  920. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_claude_settings.py +0 -0
  921. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_claude_settings_codex.py +0 -0
  922. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_clean_internal_cache.py +0 -0
  923. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_cli_update_shards.py +0 -0
  924. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_cliparse.py +0 -0
  925. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_codeql_analysis_key.py +0 -0
  926. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_cohort.py +0 -0
  927. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_command_reference_fresh.py +0 -0
  928. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_community_health_files.py +0 -0
  929. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_compact.py +0 -0
  930. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_complete.py +0 -0
  931. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_complete_rc_block.py +0 -0
  932. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_config.py +0 -0
  933. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_content_dedupe.py +0 -0
  934. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_content_identity.py +0 -0
  935. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_corpus_prose.py +0 -0
  936. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_count_flags_use_positive_int.py +0 -0
  937. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_coverage_gate_prose.py +0 -0
  938. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_crash_redaction.py +0 -0
  939. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dedup_trust.py +0 -0
  940. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_demo_index.py +0 -0
  941. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense.py +0 -0
  942. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  943. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_embed_dedupe.py +0 -0
  944. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_entry_reuse.py +0 -0
  945. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_entry_vectors.py +0 -0
  946. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_fallback.py +0 -0
  947. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_progress.py +0 -0
  948. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_quantized.py +0 -0
  949. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_ready_order.py +0 -0
  950. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_shard_real_schema.py +0 -0
  951. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  952. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_shards.py +0 -0
  953. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_status_cheap.py +0 -0
  954. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dense_vector_dedupe.py +0 -0
  955. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dependabot_config.py +0 -0
  956. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_deps.py +0 -0
  957. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_discovery.py +0 -0
  958. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_distill_merge.py +0 -0
  959. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_docs_pages_linked.py +0 -0
  960. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_docsite_chrome.py +0 -0
  961. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_doctor_output_polish.py +0 -0
  962. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_drift_hint.py +0 -0
  963. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_dry_run_parity.py +0 -0
  964. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_ed25519.py +0 -0
  965. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_embed.py +0 -0
  966. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_embed_local.py +0 -0
  967. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_embed_truncated_response.py +0 -0
  968. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_entry_key.py +0 -0
  969. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_errors_and_cli_table.py +0 -0
  970. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_baseline.py +0 -0
  971. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_corpus.py +0 -0
  972. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_corpus_bodies.py +0 -0
  973. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_faithfulness.py +0 -0
  974. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_gate.py +0 -0
  975. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_grading.py +0 -0
  976. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_metrics.py +0 -0
  977. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_query_sets.py +0 -0
  978. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_stats_summary.py +0 -0
  979. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_tools.py +0 -0
  980. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_eval_tools_probe.py +0 -0
  981. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  982. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_faithfulness.py +0 -0
  983. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_first_run_pointer.py +0 -0
  984. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_frontmatter.py +0 -0
  985. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_fuzz_targets.py +0 -0
  986. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  987. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_gitleaks_config.py +0 -0
  988. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_gitutil.py +0 -0
  989. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_gitutil_lfs.py +0 -0
  990. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_gitutil_sparse.py +0 -0
  991. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_gstack_coexistence.py +0 -0
  992. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_help_contracts.py +0 -0
  993. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_hook_settings_hosts.py +0 -0
  994. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_hookhost.py +0 -0
  995. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_hookhost_codex.py +0 -0
  996. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_imperative.py +0 -0
  997. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_import_budget.py +0 -0
  998. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_injectscan.py +0 -0
  999. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_install_permission_error.py +0 -0
  1000. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_installscan.py +0 -0
  1001. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_integrity.py +0 -0
  1002. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_journal.py +0 -0
  1003. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_jsonstate.py +0 -0
  1004. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_langchain_packaging.py +0 -0
  1005. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_launcher_python_floor.py +0 -0
  1006. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_lighthouse_budgets.py +0 -0
  1007. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_link_ownership.py +0 -0
  1008. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_localembed.py +0 -0
  1009. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_localembed_e2e.py +0 -0
  1010. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_lockfile.py +0 -0
  1011. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_logs.py +0 -0
  1012. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_marketing_counts.py +0 -0
  1013. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mcp.py +0 -0
  1014. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mcp_install_sandbox_home.py +0 -0
  1015. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mcp_install_scan.py +0 -0
  1016. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mcp_read.py +0 -0
  1017. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mcpdecl.py +0 -0
  1018. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mcphost.py +0 -0
  1019. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_measure_registry.py +0 -0
  1020. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_minisign.py +0 -0
  1021. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mutation_hardening.py +0 -0
  1022. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mutation_shards.py +0 -0
  1023. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mutation_subfile_shards.py +0 -0
  1024. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_mutmut_source_paths.py +0 -0
  1025. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_near_duplicate_collapse.py +0 -0
  1026. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_nethttp.py +0 -0
  1027. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_normalize_sdist.py +0 -0
  1028. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_output.py +0 -0
  1029. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_output_table_drop.py +0 -0
  1030. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_output_table_whole.py +0 -0
  1031. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_page_budget.py +0 -0
  1032. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_paths.py +0 -0
  1033. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_perf_gate.py +0 -0
  1034. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_pkg_confusions.py +0 -0
  1035. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_pkg_injection.py +0 -0
  1036. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_pkg_secrets.py +0 -0
  1037. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_platform_pins.py +0 -0
  1038. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_policy.py +0 -0
  1039. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_post_deploy_smoke.py +0 -0
  1040. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_prereq.py +0 -0
  1041. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_project_mcp_sidecar.py +0 -0
  1042. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_projectlock.py +0 -0
  1043. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_provenance.py +0 -0
  1044. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_publish_golden_dataset.py +0 -0
  1045. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_quickstart_readiness.py +0 -0
  1046. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_rag.py +0 -0
  1047. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_rag_completeness.py +0 -0
  1048. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_rag_extra_hint.py +0 -0
  1049. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_rag_fastpath.py +0 -0
  1050. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_rag_fusion.py +0 -0
  1051. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_read_text_arg.py +0 -0
  1052. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_registries_fresh.py +0 -0
  1053. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_registry.py +0 -0
  1054. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_registry_categories.py +0 -0
  1055. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_registry_control_chars.py +0 -0
  1056. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_registry_parallel.py +0 -0
  1057. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_release_guard.py +0 -0
  1058. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_release_preflight.py +0 -0
  1059. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_repo_root_guard.py +0 -0
  1060. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_report.py +0 -0
  1061. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_required_checks.py +0 -0
  1062. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_rerank_cache.py +0 -0
  1063. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_resolve.py +0 -0
  1064. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
  1065. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_roadmap_fresh.py +0 -0
  1066. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_rules.py +0 -0
  1067. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_sandbox_fixture_cwd.py +0 -0
  1068. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_scale_corpus.py +0 -0
  1069. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_schedule_plist.py +0 -0
  1070. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_scopes.py +0 -0
  1071. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_sdist_contents.py +0 -0
  1072. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_secretscan.py +0 -0
  1073. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_selfupdate.py +0 -0
  1074. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_serve.py +0 -0
  1075. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_serve_docs.py +0 -0
  1076. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_shard_plan.py +0 -0
  1077. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_shards.py +0 -0
  1078. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_shards_carry_forward.py +0 -0
  1079. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_shards_incremental.py +0 -0
  1080. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_shards_ingest.py +0 -0
  1081. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_shards_matrix.py +0 -0
  1082. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_smoke_covers_every_command.py +0 -0
  1083. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_spdx_headers.py +0 -0
  1084. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_spin.py +0 -0
  1085. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_stackprobe.py +0 -0
  1086. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_staleness.py +0 -0
  1087. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_store.py +0 -0
  1088. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_store_materialize.py +0 -0
  1089. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_sync_blocked_links.py +0 -0
  1090. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_sync_lost_lock.py +0 -0
  1091. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  1092. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_tap_pins.py +0 -0
  1093. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_token_parity.py +0 -0
  1094. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_toolchain_lock.py +0 -0
  1095. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_trustaudit.py +0 -0
  1096. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_typedvalue.py +0 -0
  1097. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_typosquat.py +0 -0
  1098. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_updatediff.py +0 -0
  1099. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_upstream_path.py +0 -0
  1100. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_util.py +0 -0
  1101. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_version.py +0 -0
  1102. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_version_tags.py +0 -0
  1103. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_vex.py +0 -0
  1104. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_visual_harness_capture.py +0 -0
  1105. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_visual_harness_flags.py +0 -0
  1106. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_workflow_concurrency.py +0 -0
  1107. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  1108. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  1109. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_workflow_timeouts.py +0 -0
  1110. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_workflows.py +0 -0
  1111. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  1112. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/visual/a11y_check.mjs +0 -0
  1113. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/visual/console_check.mjs +0 -0
  1114. {boost_skill_cli-1.2.148 → boost_skill_cli-1.2.150}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.148
3
+ Version: 1.2.150
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.148'
22
- __version_tuple__ = version_tuple = (1, 2, 148)
21
+ __version__ = version = '1.2.150'
22
+ __version_tuple__ = version_tuple = (1, 2, 150)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -915,9 +915,12 @@ def _report_search_engine(rep) -> None:
915
915
  built = st["built_model"] or st["built_provider"] or "an older build"
916
916
  detail = "built with %s" % built
917
917
  if st["reason"] == "model-changed":
918
- detail += ", live key is %s" % st["model"]
918
+ detail += ", live model is %s" % st["model"]
919
919
  elif st["reason"] == "provider-changed":
920
- detail += ", live key is %s" % st["provider"]
920
+ # "live key is local" named a key that does not exist: the local
921
+ # model is what `provider()` falls through to when every key is
922
+ # gone, which is the commonest way a store reaches this reason.
923
+ detail += ", live provider is %s" % st["provider"]
921
924
  elif st["reason"] == "empty":
922
925
  detail += " but holds no vectors"
923
926
  elif st["reason"] == "model-unavailable":
@@ -568,6 +568,10 @@ _FIX = {
568
568
  # instead: with it in force, this build goes through the paid API.
569
569
  "no-store": "build it: `boost reindex --dense`",
570
570
  "version-changed": "rebuild it: `boost reindex --dense --force`",
571
+ # Only right when the live space is the one the user wants. A store built
572
+ # through a paid provider that has merely lost its key lands here too, and
573
+ # for that user this row is the bill `no-key`'s guard exists to prevent —
574
+ # so `fix_hint` answers it from the status dict before reaching this table.
571
575
  "provider-changed": "rebuild it: `boost reindex --dense --force`",
572
576
  "model-changed": "rebuild it: `boost reindex --dense --force`",
573
577
  "dim-changed": "rebuild it: `boost reindex --dense --force`",
@@ -611,6 +615,55 @@ def free_shard_path(prov: str | None) -> str | None:
611
615
  % (" ".join(keys), "s" if len(keys) > 1 else "", prov))
612
616
 
613
617
 
618
+ def _restore_built_space(built: str, env: str) -> str | None:
619
+ """How to put a store's own provider back in force, or None if nothing can.
620
+
621
+ ``built`` is the provider the vectors were embedded with and ``env`` its
622
+ key variable. Like :func:`free_shard_path` above, a pure function of the
623
+ environment: both facts it needs are read from ``os.environ`` through
624
+ :data:`embed.KEY_ENV`, so its answer cannot disagree with what
625
+ :func:`embed.provider` will do next.
626
+
627
+ **Two independent things can be wrong, and an earlier draft ordered them
628
+ instead of combining them.** The key can be gone, and a key the resolver
629
+ prefers can be in force; either alone, or both at once:
630
+
631
+ * the key is gone — ``export`` brings it back;
632
+ * something outranks it — ``unset`` what is in front hands the store back
633
+ its own provider;
634
+ * both — an OpenAI-built store with no OpenAI key on a machine holding a
635
+ Voyage one. Answering only the first is what the ordered version did,
636
+ and ``export OPENAI_API_KEY=...`` moves ``provider()`` not at all: the
637
+ user runs it, lands on the same reason, and is then told to unset the
638
+ other key. A remedy that has to be followed twice to do anything is the
639
+ no-op this branch exists to replace, arrived at one step at a time.
640
+
641
+ None when the key is in force and nothing outranks it: whatever else is
642
+ wrong with that store, a key is not it.
643
+ """
644
+ gone = not os.environ.get(env)
645
+ # Not `live != built`: inequality says another provider won, not that it
646
+ # would *keep* winning once this one's key came back. A voyage-built store
647
+ # displaced by an OpenAI key needs the export alone, because voyage
648
+ # outranks openai — `unset OPENAI_API_KEY` there is a step that buys
649
+ # nothing. `outranking` reads the one preference order there is.
650
+ drop = embed.outranking(built)
651
+ # `unset A B` rather than one command per key: it is a single shell verb
652
+ # taking a list, and the surfaces that print this have one line. No
653
+ # `if drop else ""` guard — every branch that reads this one has already
654
+ # tested `drop`, so the guard was a value nothing could observe, which is
655
+ # a mutant no test can kill rather than a safety net.
656
+ unset = "`unset %s`" % " ".join(drop)
657
+ if gone and drop:
658
+ return ("set the key it was built with: `export %s=...`, then %s "
659
+ "puts it back in front" % (env, unset))
660
+ if gone:
661
+ return "set the key it was built with: `export %s=...`" % env
662
+ if drop:
663
+ return "%s puts the store's own key back in front" % unset
664
+ return None
665
+
666
+
614
667
  def fix_hint(reason: str, status: dict | None = None) -> str:
615
668
  """The single next action for a `status()` reason, or a safe default.
616
669
 
@@ -622,11 +675,26 @@ def fix_hint(reason: str, status: dict | None = None) -> str:
622
675
  status into ``provider-changed`` — a full re-embed of every vector they
623
676
  already paid for. Seen in the wild at 750,416 chunks.
624
677
 
625
- The reason ladder cannot distinguish these two states on its own, because
626
- ``no-key`` is checked before the store is even looked at: an unfinished
627
- install with no store and a complete install whose key merely went missing
628
- both land here. ``built_provider`` is what separates them, and it lives in
629
- the status dict.
678
+ ``no-key`` means no key *and* no local backend, which in practice is a
679
+ partial install. A complete install whose key merely went missing does
680
+ **not** land there — ``provider()`` falls through to the local model that
681
+ the ``[rag]`` extra ships, so the ladder reaches ``provider-changed``
682
+ instead, whose table row is that same full re-embed. The guard was written
683
+ for a reason it could not be reached through: measured on a voyage-4 store
684
+ with the key unexported, `boost doctor` prescribed
685
+ `boost reindex --dense --force`. So both reasons consult the status, and
686
+ ``built_provider`` is what separates a store worth reviving from an
687
+ unfinished install with nothing to revive.
688
+
689
+ The two remedies differ in their tail, because the cost differs. Under
690
+ ``no-key`` the local model is missing, so the alternative is installing it
691
+ — which is what re-embeds everything. Under ``provider-changed`` a
692
+ provider resolved, so *some* backend is already in force and "reinstall
693
+ the extra" names a remedy for a state this is not. (Not "the user already
694
+ has the local model": the provider that displaced this store may well be
695
+ another key, and that machine need never have installed it.) The
696
+ alternative there is the explicit rebuild, named with the space it would
697
+ land in.
630
698
 
631
699
  ``no-store`` needs the status too. With a key in force and the local model
632
700
  installed, the table's "build it" is the paid build, while `boost
@@ -644,8 +712,12 @@ def fix_hint(reason: str, status: dict | None = None) -> str:
644
712
  free = free_shard_path(status.get("provider"))
645
713
  if free:
646
714
  return free
647
- if reason == "no-key" and status:
648
- env = embed.KEY_ENV.get(status.get("built_provider") or "")
715
+ if reason in ("no-key", "provider-changed") and status:
716
+ # `or ""` rather than a `get` default: a status that carries the key
717
+ # explicitly set to None must reach the same lookup as one that omits
718
+ # it, and `KEY_ENV` is missed either way.
719
+ built = status.get("built_provider") or ""
720
+ env = embed.KEY_ENV.get(built)
649
721
  # `chunks` guards the unfinished-install case: without vectors on disk
650
722
  # there is nothing a key would revive, and "build it" is the real next
651
723
  # step. A store built by the local model has no env var and correctly
@@ -656,10 +728,21 @@ def fix_hint(reason: str, status: dict | None = None) -> str:
656
728
  # vectors to revive; reading unknown as zero would send exactly the
657
729
  # user this branch exists to protect to the re-embed-everything answer.
658
730
  if env and (count is None or count > 0):
659
- n = f"{int(count):,} vectors" if count else "vectors"
660
- return ("set the key it was built with: `export %s=...` — "
661
- "reinstalling the extra swaps in the local model and "
662
- "forces all %s to be re-embedded" % (env, n))
731
+ n = (f"{int(count):,} vector{'' if count == 1 else 's'}"
732
+ if count else "vectors")
733
+ if reason == "no-key":
734
+ return ("set the key it was built with: `export %s=...` — "
735
+ "reinstalling the extra swaps in the local model and "
736
+ "forces all %s to be re-embedded" % (env, n))
737
+ live = status.get("provider")
738
+ restore = _restore_built_space(built, env)
739
+ if restore:
740
+ # Names the live space rather than "the local model": the
741
+ # provider that displaced this store is whatever `provider()`
742
+ # picked, and a rebuild lands the vectors in *its* space.
743
+ return ("%s — or `boost reindex --dense --force` re-embeds "
744
+ "all %s in %s's space"
745
+ % (restore, n, live or "the live provider"))
663
746
  if (reason == "model-unavailable" and status
664
747
  and (status.get("model_failure") or {}).get("stage") == "load"):
665
748
  # The files are on disk and the load itself failed: promising a
@@ -49,6 +49,15 @@ from . import nethttp
49
49
  # exact variable that would revive a store built with a given provider — and a
50
50
  # second copy of that string is precisely how a surface ends up naming the
51
51
  # wrong one at the only moment the name matters.
52
+ #
53
+ # **Insertion order is preference order**, and it is the only *executable*
54
+ # statement of it (`dense._FIX["no-key"]` and this module's own docstring
55
+ # restate it in prose, where nothing can act on the wrong copy):
56
+ # `provider` and `outranking` both walk this dict rather than testing the two
57
+ # keys in a hardcoded sequence. Stating it twice is what let `fix_hint`
58
+ # prescribe `export OPENAI_API_KEY=...` to an OpenAI-built store on a machine
59
+ # holding a Voyage key — a remedy that leaves `provider()` exactly where it
60
+ # was. `tests/unit/test_embed_outranking.py` pins the order itself.
52
61
  KEY_ENV = {"voyage": "VOYAGE_API_KEY", "openai": "OPENAI_API_KEY"}
53
62
 
54
63
  VOYAGE_URL = "https://api.voyageai.com/v1/embeddings"
@@ -194,15 +203,37 @@ def provider() -> str | None:
194
203
  """
195
204
  if not enabled():
196
205
  return None
197
- if os.environ.get(KEY_ENV["voyage"]):
198
- return "voyage"
199
- if os.environ.get(KEY_ENV["openai"]):
200
- return "openai"
206
+ for name, env in KEY_ENV.items():
207
+ if os.environ.get(env):
208
+ return name
201
209
  if local_available():
202
210
  return "local"
203
211
  return None
204
212
 
205
213
 
214
+ def outranking(name: str) -> tuple[str, ...]:
215
+ """The set keys :func:`provider` would pick ahead of ``name``, in order.
216
+
217
+ Empty when ``name`` is already first among the keys in force — including
218
+ when it is the only one. Every key for a name outside :data:`KEY_ENV`,
219
+ since local comes last and any key displaces it.
220
+
221
+ It exists so a caller can ask what stands between a store and its own
222
+ provider without re-deriving the preference order. ``provider`` alone
223
+ cannot answer that: it names the winner, not what would have to go for
224
+ somebody else to win, and an OpenAI-built store whose own key is *also*
225
+ missing needs both facts — the export and the unset — where the winner's
226
+ name implies only one of them.
227
+ """
228
+ ahead = []
229
+ for other, env in KEY_ENV.items():
230
+ if other == name:
231
+ break
232
+ if os.environ.get(env):
233
+ ahead.append(env)
234
+ return tuple(ahead)
235
+
236
+
206
237
  def available() -> bool:
207
238
  """True when embeddings are enabled and a provider key is present."""
208
239
  return provider() is not None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.148
3
+ Version: 1.2.150
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -395,6 +395,7 @@ docs/roadmap/items/demo-cannot-open-its-own-pr.md
395
395
  docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md
396
396
  docs/roadmap/items/demo-workflow-cancels-other-prs.md
397
397
  docs/roadmap/items/dense-kill-switch-has-no-reason-state.md
398
+ docs/roadmap/items/dense-local-built-store-displaced-by-a-key.md
398
399
  docs/roadmap/items/dense-no-key-guard-is-unreachable.md
399
400
  docs/roadmap/items/dense-ready-but-embedder-cannot-run.md
400
401
  docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md
@@ -959,6 +960,7 @@ tests/unit/test_dry_run_parity.py
959
960
  tests/unit/test_ed25519.py
960
961
  tests/unit/test_embed.py
961
962
  tests/unit/test_embed_local.py
963
+ tests/unit/test_embed_outranking.py
962
964
  tests/unit/test_embed_truncated_response.py
963
965
  tests/unit/test_entry_key.py
964
966
  tests/unit/test_errors_and_cli_table.py
Binary file
@@ -0,0 +1,37 @@
1
+ ---
2
+ id: dense-local-built-store-displaced-by-a-key
3
+ board: code
4
+ section: planned
5
+ status: planned
6
+ category: Quality · Retrieval eval
7
+ complexity: S
8
+ impact: High
9
+ wow: 4
10
+ note: Exporting an API key takes a locally built store off the air, and doctor answers with a paid re-embed where `unset` is free. Every user who came in through `boost quickstart` is one `export` away from this.
11
+ order: 353
12
+ title: A locally built vector store displaced by a new API key is told to re-embed through the paid provider, where unsetting the key is free
13
+ ---
14
+ <b>The mirror of #989, and the expensive direction.</b> #989 taught <code>fix_hint</code> that a store built with an API key can be displaced two ways, and to name the <code>export</code> or the <code>unset</code> that restores it. A store built by the <b>local</b> model is displaced by exactly the same mechanism — a key the resolver prefers appears on the machine — and gets none of it: the branch is gated on <code>env = embed.KEY_ENV.get(built)</code> being truthy, and <code>local</code> has no env var, so it falls through to the table.
15
+
16
+ <b>Measured.</b> Two stores of 645,592 chunks, same machine, only <code>VOYAGE_API_KEY</code> set. Verbatim, through the real <code>dense.status()</code> ladder:
17
+
18
+ <code>##### store built with 'local', live key = VOYAGE</code><br>
19
+ <code> status reason : provider-changed</code><br>
20
+ <code> outranking('local') : ('VOYAGE_API_KEY',)</code><br>
21
+ <code> DOCTOR | ! semantic search silently off — 645592-chunk vector store built with</code><br>
22
+ <code> DOCTOR | rebuild it: `boost reindex --dense --force`</code><br>
23
+ <br>
24
+ <code>##### store built with 'openai', live key = VOYAGE</code><br>
25
+ <code> status reason : provider-changed</code><br>
26
+ <code> DOCTOR | set the key it was built with: `export OPENAI_API_KEY=...`, then</code><br>
27
+ <code> DOCTOR | `unset VOYAGE_API_KEY` puts it back in front — or …</code>
28
+
29
+ <code>embed.outranking('local')</code> already computes the answer — <code>unset VOYAGE_API_KEY</code> — and restores that store instantly and for nothing. The line boost actually prints re-embeds 645,592 chunks through a metered API.
30
+
31
+ <b>Why it is not a corner case.</b> <code>boost quickstart</code> imports the published vector shards, and those are keyless: <code>BAAI/bge-small-en-v1.5</code> at 384 dimensions, built by the local model. So the default on-ramp leaves every user with a local-built store, and the first time one of them exports a Voyage or OpenAI key for anything at all, semantic search goes quiet and doctor bills them to get it back.
32
+
33
+ <b>The constraint any fix has to clear</b>, and the reason this is a separate card rather than a line in #989: <code>unset</code> is only the right advice for a local-built store <b>if the local model is installed</b>. On a partial <code>[rag]</code> install, unsetting the one key in force sends <code>provider()</code> to <code>None</code> and the ladder to <code>no-key</code> — the advice would switch off the only thing making search work. So the predicate needs to ask whether the local model is there — and the one to ask is <code>embed.local_installed()</code>, not <code>embed.local_available()</code>: <code>local_available</code> answers by importing the ONNX runtime, which is right for a caller about to embed and wrong for one about to word a sentence. <code>dense.free_shard_path</code>, the sibling that words the other keyed-machine hint, already uses <code>local_installed</code> for exactly that reason. Either way it is a check the key-built branches do not need.
34
+
35
+ Two more things fall out of that. The sentence needs a third variant — "puts the store's own key back in front" is false for a store that has no key; it is the local model being put back in front. And the admission test must be <code>built in embed.KEY_ENV or built == "local"</code>, never "has a recorded provider": <code>embed.outranking("")</code> returns <b>every</b> set key, so a store whose meta records no provider would be told to unset the machine's entire keyring on the strength of a blank field.
36
+
37
+ <b>Where it was found.</b> The adversarial verification pass on #989, which is also why the measurement exists. #989's PR body originally scoped this out as "not measured here"; it is measured now, and <code>docs/semantic-search.md</code> carries a qualifier pointing at this card until it lands.
@@ -1,18 +1,20 @@
1
1
  ---
2
2
  id: dense-no-key-guard-is-unreachable
3
3
  board: code
4
- section: planned
5
- status: planned
4
+ section: shipped
5
+ status: shipped
6
6
  category: Quality · Retrieval eval
7
7
  complexity: L
8
8
  impact: High
9
9
  wow: 4
10
- note: dense.status() checks prov is None before it looks at the store (dense.py:618-621), b…
10
+ note: A complete [rag] extra falls through a missing key to the local model, so the ladder reaches provider-changed and prescribes the full re-embed the guard exists to prevent. Two things can displace a store, and the fix answers both.
11
11
  order: 204
12
- owner:
13
- pr:
12
+ owner: loop/dense-no-key-guard
13
+ pr: 989
14
14
  title: fix_hint's no-key guard has been unreachable since the day it was written; a missing API key now prescribes the full re-embed the guard exists to prevent
15
15
  ---
16
+ <b>Shipped in #989.</b> <code>fix_hint</code> now fires on <code>provider-changed</code> as well as <code>no-key</code>, with a different tail for each, and <code>embed.KEY_ENV</code> became the single statement of the provider preference order that <code>provider()</code> and the new <code>embed.outranking()</code> both walk. Adversarial verification of the first cut caught a second defect in the fix itself: two independent things can stand between a store and its own provider — its key being gone, and a key the resolver prefers being in force — and ordering them instead of combining them prescribed <code>export OPENAI_API_KEY=...</code> to an OpenAI-built store on a Voyage-keyed machine, which moves <code>provider()</code> not at all. All eight key combinations are now pinned whole.
17
+
16
18
  <b>Measured.</b> On a complete <code>[rag]</code> extra with a voyage-4-built vector store and no API key exported, <code>dense.status()</code> returns <code>reason='provider-changed'</code> (not <code>no-key</code>), so all three status-passing surfaces print <code>rebuild it: \</code>boost reindex --dense --force\`<code> and </code>boost doctor<code> exits 1 — measured verbatim, including doctor's "live key is local; searches are using BM25" line — while the guard written to prevent exactly that (</code>21f28223<code>, #444) fires only under </code>BOOST_NO_EMBED=1` or a partial install, both confirmed by direct probe.
17
19
 
18
20
  <b>Reproduce it.</b>
@@ -54,6 +56,6 @@ THE REAL MACHINE IS NOT CURRENTLY IN THE BUG STATE. <code>~/.boost/cache/rag_vec
54
56
 
55
57
  THE MISDIAGNOSIS WAS REFUTABLE FROM THE SAME FILE. The <code>_FIX</code> comment — "This reason means 'no key AND no local backend', which in practice is a partial install or BOOST_NO_EMBED" — was already in <code>dense.py</code> from 86163e03 (07-31) when #444 (08-03) added a guard whose docstring asserts the opposite: "an unfinished install with no store and a complete install whose key merely went missing both land here." Two claims about <code>no-key</code>, 30 lines apart, that contradict each other.
56
58
 
57
- <b>Why it is worth doing.</b> A user who opens a new shell without exporting their key is told by doctor, search and the MCP server to re-embed their whole store. On the real machine in this repo that is 645,592 chunks / 1.20 GB, which CLAUDE.md prices at ~1.2 s per chunk on CPU — hours of compute, or a real API bill — to fix a problem whose actual remedy is one <code>export</code>. The repo already decided this was unacceptable and wrote six tests plus a paragraph of docstring to prevent it; the guard has simply never been able to fire.
59
+ <b>Why it is worth doing.</b> A user who opens a new shell without exporting their key is told by doctor, search and the MCP server to re-embed their whole store. On the real machine in this repo that is 645,592 chunks / 1.20 GB, which the roadmap prices at ~1.2 s per chunk on CPU (<code>keyless-semantic-search-for-everyone.md:298</code> — not CLAUDE.md, per correction 1 above) — hours of compute, or a real API bill — to fix a problem whose actual remedy is one <code>export</code>. The repo already decided this was unacceptable and wrote six tests plus a paragraph of docstring to prevent it; the guard has simply never been able to fire.
58
60
 
59
- <em>Found by an automated audit of retrieval/eval quality, the search &amp; browse surfaces, and first-run onboarding; every finding was then re-measured from scratch by an independent adversarial verifier whose instruction was to refute it. Verdict: <b>CORRECTED</b>. No fix is prescribed here — the measurement is the contribution.</em>
61
+ <em>Found by an automated audit of retrieval/eval quality, the search &amp; browse surfaces, and first-run onboarding; every finding was then re-measured from scratch by an independent adversarial verifier whose instruction was to refute it. Verdict: <b>CORRECTED</b>. The measurement was the first contribution; the fix followed in #989, and was itself sent back once by the same adversarial pass.</em>
@@ -140,10 +140,10 @@
140
140
  <section class="block reveal">
141
141
  <div class="stats">
142
142
  <!-- ROADMAP:stats -->
143
- <div class="stat"><b>21</b><span>Shipped</span></div>
143
+ <div class="stat"><b>22</b><span>Shipped</span></div>
144
144
  <div class="stat"><b>1</b><span>Next up</span></div>
145
145
  <div class="stat"><b>79</b><span>Planned</span></div>
146
- <div class="stat"><b>504</b><span>Loop finds</span></div>
146
+ <div class="stat"><b>505</b><span>Loop finds</span></div>
147
147
  <!-- /ROADMAP:stats -->
148
148
  </div>
149
149
  </section>
@@ -396,6 +396,18 @@
396
396
  </div>
397
397
  </article>
398
398
 
399
+ <article class="cap rcard" id="dense-no-key-guard-is-unreachable">
400
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Retrieval eval</span></div>
401
+ <h3>fix_hint's no-key guard has been unreachable since the day it was written; a missing API key now prescribes the full re-embed the guard exists to prevent</h3>
402
+ <p class="cardbody"><a class="writeup" href="https://github.com/jonnyeclectic/boost/blob/main/docs/roadmap/items/dense-no-key-guard-is-unreachable.md">Write-up &middot; dense-no-key-guard-is-unreachable.md</a></p>
403
+ <div class="meta">
404
+ <span class="m">Complexity <b>L</b></span>
405
+ <span class="m hi">Impact <b>High</b></span>
406
+ <span class="m">Wow <b class="wow">★★★★</b></span>
407
+ <span class="m">A complete [rag] extra falls through a missing key to the local model, so the ladder reaches provider-changed and prescribes the full re-embed the guard exists to prevent. Two things can displace a store, and the fix answers both.</span>
408
+ </div>
409
+ </article>
410
+
399
411
  <article class="cap rcard" id="install-cannot-tell-a-skill-needs-another-one">
400
412
  <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Install · Research</span></div>
401
413
  <h3>Research: how <code>boost install</code> could tell that a skill needs something else installed first</h3>
@@ -1100,61 +1112,6 @@ space before trusting a number in it.</p>
1100
1112
  </div>
1101
1113
  </article>
1102
1114
 
1103
- <article class="cap rcard" id="dense-no-key-guard-is-unreachable">
1104
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Quality · Retrieval eval</span></div>
1105
- <h3>fix_hint's no-key guard has been unreachable since the day it was written; a missing API key now prescribes the full re-embed the guard exists to prevent</h3>
1106
- <p><b>Measured.</b> On a complete <code>[rag]</code> extra with a voyage-4-built vector store and no API key exported, <code>dense.status()</code> returns <code>reason='provider-changed'</code> (not <code>no-key</code>), so all three status-passing surfaces print <code>rebuild it: \</code>boost reindex --dense --force\`<code> and </code>boost doctor<code> exits 1 — measured verbatim, including doctor's "live key is local; searches are using BM25" line — while the guard written to prevent exactly that (</code>21f28223<code>, #444) fires only under </code>BOOST_NO_EMBED=1` or a partial install, both confirmed by direct probe.
1107
-
1108
- <b>Reproduce it.</b>
1109
-
1110
- <code>cd &lt;repo&gt;</code><br>
1111
- <code>export HOME=$TMPDIR/verify-dense-f1; export BOOST_HOME=$HOME/.boost; mkdir -p "$HOME"</code><br>
1112
- <code>unset VOYAGE_API_KEY OPENAI_API_KEY BOOST_NO_EMBED</code><br>
1113
- <code>python3 tests/make_fixture.py $TMPDIR/verify-dense-f1-fix &gt;/dev/null</code><br>
1114
- <code>./boost tap $TMPDIR/verify-dense-f1-fix &gt;/dev/null</code><br>
1115
- <code># NOTE: ./boost execs system python3, which has no sqlite_vec, so it always says</code><br>
1116
- <code># "no-backend". Every dense command below MUST run under .venv.</code><br>
1117
- <code>.venv/bin/python - &lt;&lt;'PY'</code><br>
1118
- <code>import hashlib, sys; sys.path.insert(0, ".")</code><br>
1119
- <code>from boost_cli.core import catalog, dense, embed</code><br>
1120
- <code>DIM = 1024</code><br>
1121
- <code>def fake(texts, input_type=None, timeout=60): # no network, no API spend</code><br>
1122
- <code> out = []</code><br>
1123
- <code> for t in texts:</code><br>
1124
- <code> h = hashlib.sha256(t.encode()).digest()</code><br>
1125
- …
1126
-
1127
- <b>What adversarial verification corrected.</b> This card's numbers are the re-measured ones, not the ones first reported.
1128
-
1129
- The defect is real and reproduced verbatim, but five stated details are wrong:
1130
-
1131
- 1. SOURCE ATTRIBUTION OF THE COST FIGURE. <code>why_it_matters</code> says "which CLAUDE.md prices at ~1.2 s per chunk on CPU". <code>grep -n 'per chunk\|1\.2 s' CLAUDE.md</code> returns nothing. The figure is real but lives in the roadmap: <code>docs/roadmap/items/keyless-semantic-search-for-everyone.md:298</code> ("4,431 s — 74 minutes, about 1.2 s per chunk") and <code>:308</code>, plus <code>the-shard-job-that-could-not-finish.md:17</code> and <code>keyless-dense-tier-local-static-embeddings.md:75</code>. Cite the roadmap, not CLAUDE.md.
1132
-
1133
- 2. <code>quality.py:769</code> is wrong -&gt; the fix_hint call is <code>boost_cli/commands/quality.py:780</code> (<code>fix = dense.fix_hint(st["reason"], st)</code>). Line 769 sits inside the unrelated <code>search-quantization</code> warning.
1134
-
1135
- 3. <code>pyproject.toml:55-57</code> is wrong -&gt; the three pins are at lines <b>56, 67 and 68</b> (<code>sqlite-vec&gt;=0.1.6</code>, <code>onnxruntime&gt;=1.17</code>, <code>tokenizers&gt;=0.15</code>), split by a 10-line comment justifying the fastembed rejection. They are in one extra, which is the load-bearing part, but the range is not 55-57.
1136
-
1137
- 4. THE CAUSAL-ORDER COMMIT PAIR NAMES THE WRONG COMMIT FOR THE GUARD. <code>86163e03</code> (2026-07-31, #364) created <code>test_dense_fix_hint.py</code> <b>and the <code>_FIX</code> table</b>, but not the guard.
1138
-
1139
- <b>What is NOT established.</b> Recorded because a card that overstates its own evidence is worse than no card.
1140
-
1141
- PRECONDITION — state it on the card so nobody reads it as unconditional. The misroute needs (a) a store built with an API provider, (b) the complete <code>[rag]</code> extra so <code>provider()</code> falls through to <code>local</code>, and (c) the key absent from the *process* environment. #444's own commit message documents that shape as recurring in the wild: "the shell exports one; the spawned server does not inherit it."
1142
-
1143
- THE REAL MACHINE IS NOT CURRENTLY IN THE BUG STATE. <code>~/.boost/cache/rag_vectors.sqlite</code> reads provider="local", model="BAAI/bge-small-en-v1.5", dim=384 — so <code>provider()</code> matches <code>built_provider</code> and its reason is None. The 645,592-chunk / 1.20 GB / 440-tap figure is <b>cost-if-the-hint-is-followed</b>, not present harm. Do not let the card imply the machine is broken today. (The 750,416-chunk voyage-4 store in the #444 message and the test docstring is a past state of the same machine.)
1144
-
1145
- THE MISDIAGNOSIS WAS REFUTABLE FROM THE SAME FILE. The <code>_FIX</code> comment — "This reason means 'no key AND no local backend', which in practice is a partial install or BOOST_NO_EMBED" — was already in <code>dense.py</code> from 86163e03 (07-31) when #444 (08-03) added a guard whose docstring asserts the opposite: "an unfinished install with no store and a complete install whose key merely went missing both land here." Two claims about <code>no-key</code>, 30 lines apart, that contradict each other.
1146
-
1147
- <b>Why it is worth doing.</b> A user who opens a new shell without exporting their key is told by doctor, search and the MCP server to re-embed their whole store. On the real machine in this repo that is 645,592 chunks / 1.20 GB, which CLAUDE.md prices at ~1.2 s per chunk on CPU — hours of compute, or a real API bill — to fix a problem whose actual remedy is one <code>export</code>. The repo already decided this was unacceptable and wrote six tests plus a paragraph of docstring to prevent it; the guard has simply never been able to fire.
1148
-
1149
- <em>Found by an automated audit of retrieval/eval quality, the search &amp; browse surfaces, and first-run onboarding; every finding was then re-measured from scratch by an independent adversarial verifier whose instruction was to refute it. Verdict: <b>CORRECTED</b>. No fix is prescribed here — the measurement is the contribution.</em></p>
1150
- <div class="meta">
1151
- <span class="m">Complexity <b>L</b></span>
1152
- <span class="m hi">Impact <b>High</b></span>
1153
- <span class="m">Wow <b class="wow">★★★★</b></span>
1154
- <span class="m">dense.status() checks prov is None before it looks at the store (dense.py:618-621), b…</span>
1155
- </div>
1156
- </article>
1157
-
1158
1115
  <article class="cap rcard" id="dense-ready-but-embedder-cannot-run">
1159
1116
  <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Retrieval eval</span></div>
1160
1117
  <h3>status() has no state for "ready but the embedder does not work": doctor green-ticks a tier that never ran, the search hint is suppressed, and every search re-pays the failed model fetch</h3>
@@ -2214,6 +2171,41 @@ instead of on a user's machine.</p>
2214
2171
  <span class="m">Two functions built the same `mcp add` command line, one had never heard of agy, and both got Gemini wrong…</span>
2215
2172
  </div>
2216
2173
  </article>
2174
+
2175
+ <article class="cap rcard" id="dense-local-built-store-displaced-by-a-key">
2176
+ <div class="head"><span class="pill planned">Planned</span><span class="cat">Quality · Retrieval eval</span></div>
2177
+ <h3>A locally built vector store displaced by a new API key is told to re-embed through the paid provider, where unsetting the key is free</h3>
2178
+ <p><b>The mirror of #989, and the expensive direction.</b> #989 taught <code>fix_hint</code> that a store built with an API key can be displaced two ways, and to name the <code>export</code> or the <code>unset</code> that restores it. A store built by the <b>local</b> model is displaced by exactly the same mechanism — a key the resolver prefers appears on the machine — and gets none of it: the branch is gated on <code>env = embed.KEY_ENV.get(built)</code> being truthy, and <code>local</code> has no env var, so it falls through to the table.
2179
+
2180
+ <b>Measured.</b> Two stores of 645,592 chunks, same machine, only <code>VOYAGE_API_KEY</code> set. Verbatim, through the real <code>dense.status()</code> ladder:
2181
+
2182
+ <code>##### store built with 'local', live key = VOYAGE</code><br>
2183
+ <code> status reason : provider-changed</code><br>
2184
+ <code> outranking('local') : ('VOYAGE_API_KEY',)</code><br>
2185
+ <code> DOCTOR | ! semantic search silently off — 645592-chunk vector store built with</code><br>
2186
+ <code> DOCTOR | rebuild it: `boost reindex --dense --force`</code><br>
2187
+ <br>
2188
+ <code>##### store built with 'openai', live key = VOYAGE</code><br>
2189
+ <code> status reason : provider-changed</code><br>
2190
+ <code> DOCTOR | set the key it was built with: `export OPENAI_API_KEY=...`, then</code><br>
2191
+ <code> DOCTOR | `unset VOYAGE_API_KEY` puts it back in front — or …</code>
2192
+
2193
+ <code>embed.outranking('local')</code> already computes the answer — <code>unset VOYAGE_API_KEY</code> — and restores that store instantly and for nothing. The line boost actually prints re-embeds 645,592 chunks through a metered API.
2194
+
2195
+ <b>Why it is not a corner case.</b> <code>boost quickstart</code> imports the published vector shards, and those are keyless: <code>BAAI/bge-small-en-v1.5</code> at 384 dimensions, built by the local model. So the default on-ramp leaves every user with a local-built store, and the first time one of them exports a Voyage or OpenAI key for anything at all, semantic search goes quiet and doctor bills them to get it back.
2196
+
2197
+ <b>The constraint any fix has to clear</b>, and the reason this is a separate card rather than a line in #989: <code>unset</code> is only the right advice for a local-built store <b>if the local model is installed</b>. On a partial <code>[rag]</code> install, unsetting the one key in force sends <code>provider()</code> to <code>None</code> and the ladder to <code>no-key</code> — the advice would switch off the only thing making search work. So the predicate needs to ask whether the local model is there — and the one to ask is <code>embed.local_installed()</code>, not <code>embed.local_available()</code>: <code>local_available</code> answers by importing the ONNX runtime, which is right for a caller about to embed and wrong for one about to word a sentence. <code>dense.free_shard_path</code>, the sibling that words the other keyed-machine hint, already uses <code>local_installed</code> for exactly that reason. Either way it is a check the key-built branches do not need.
2198
+
2199
+ Two more things fall out of that. The sentence needs a third variant — "puts the store's own key back in front" is false for a store that has no key; it is the local model being put back in front. And the admission test must be <code>built in embed.KEY_ENV or built == "local"</code>, never "has a recorded provider": <code>embed.outranking("")</code> returns <b>every</b> set key, so a store whose meta records no provider would be told to unset the machine's entire keyring on the strength of a blank field.
2200
+
2201
+ <b>Where it was found.</b> The adversarial verification pass on #989, which is also why the measurement exists. #989's PR body originally scoped this out as "not measured here"; it is measured now, and <code>docs/semantic-search.md</code> carries a qualifier pointing at this card until it lands.</p>
2202
+ <div class="meta">
2203
+ <span class="m">Complexity <b>S</b></span>
2204
+ <span class="m hi">Impact <b>High</b></span>
2205
+ <span class="m">Wow <b class="wow">★★★★</b></span>
2206
+ <span class="m">Exporting an API key takes a locally built store off the air, and doctor answers with a paid re-embed where `unset` is free. Every user who came in through `boost quickstart` is one `export` away from this.</span>
2207
+ </div>
2208
+ </article>
2217
2209
  <!-- /ROADMAP:cards -->
2218
2210
 
2219
2211
  </div>
@@ -185,13 +185,37 @@ deliberately no vectors, for the same reason.
185
185
  | no backend | `pip install "boost-skill-cli[rag]"` (`pipx inject boost-skill-cli "boost-skill-cli[rag]"` under pipx) |
186
186
  | no store | `boost reindex --dense` |
187
187
  | store is empty | `boost reindex --dense --force` |
188
- | version, model, provider or dimension changed | `boost reindex --dense --force` |
188
+ | version, model or dimension changed | `boost reindex --dense --force` |
189
+ | provider changed, and a store built with a key | put that key back in force. The rebuild is offered as the alternative, and it re-embeds everything |
189
190
  | no key, and a store built with one | set the key it was built with. Reinstalling the extra swaps in the local model and forces a full re-embed |
190
191
 
191
- That last row is the one worth reading twice. If your store was built against
192
- Voyage or OpenAI and the key later goes missing, the fix is to put the key back.
193
- The generic "reinstall the extra" answer would install the local model, change
194
- the provider, and re-embed every vector you already paid for.
192
+ Those last two rows are the ones worth reading twice, and the first of them is
193
+ the one you are likely to meet. If your store was built against Voyage or
194
+ OpenAI and the key later goes missing, doctor reports **provider changed**, not
195
+ **no key**: the `[rag]` extra ships a local model, so a provider still
196
+ resolves — it is simply not the one your vectors are in. The fix is to put the
197
+ key back, and the generic "rebuild" answer would re-embed every vector you
198
+ already paid for.
199
+
200
+ For a store **built with a key**, two separate things can stand between it and
201
+ its own provider, and doctor names whichever applies:
202
+
203
+ - the key is gone, so `export` brings it back;
204
+ - a key boost prefers is in force. The order is Voyage, then OpenAI, then the
205
+ local model, so an OpenAI-built store goes dark the moment a Voyage key
206
+ appears on the machine — `unset VOYAGE_API_KEY` is what hands it back.
207
+
208
+ Both can be true at once, and then doctor names both steps. Running only the
209
+ export would leave the resolver exactly where it was.
210
+
211
+ A store built by the **local** model is displaced the same way — exporting a
212
+ key on a machine whose vectors are local ones takes semantic search off — but
213
+ doctor does not yet name the `unset` for it, and offers the rebuild instead.
214
+ Tracked as a follow-up; `unset` is the free fix in the meantime.
215
+
216
+ If you would rather move to the live provider than restore the old one,
217
+ `boost reindex --dense --force` is the command, and doctor names the space it
218
+ would land the vectors in.
195
219
 
196
220
  ## Search is slow
197
221