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