boost-skill-cli 1.2.147__tar.gz → 1.2.148__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 (1113) hide show
  1. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/pkg.py +83 -6
  4. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/quality.py +32 -0
  5. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/catalog.py +63 -3
  6. boost_skill_cli-1.2.148/boost_cli/core/deps.py +343 -0
  7. boost_skill_cli-1.2.148/boost_cli/core/prereq.py +226 -0
  8. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  9. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  10. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/commands.html +1 -1
  11. boost_skill_cli-1.2.148/docs/roadmap/items/install-cannot-tell-a-skill-needs-another-one.md +91 -0
  12. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap.html +14 -68
  13. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_pkg.py +262 -0
  14. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_quality.py +40 -0
  15. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_catalog.py +97 -0
  16. boost_skill_cli-1.2.148/tests/unit/test_prereq.py +650 -0
  17. boost_skill_cli-1.2.147/boost_cli/core/deps.py +0 -118
  18. boost_skill_cli-1.2.147/docs/roadmap/items/install-cannot-tell-a-skill-needs-another-one.md +0 -70
  19. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.gitattributes +0 -0
  20. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.gitignore +0 -0
  21. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.gitleaks.toml +0 -0
  22. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.htmlvalidate.json +0 -0
  23. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.lighthouserc.json +0 -0
  24. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.lycheeignore +0 -0
  25. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.markdownlint-cli2.jsonc +0 -0
  26. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.pre-commit-config.yaml +0 -0
  27. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.stylelintrc.json +0 -0
  28. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.vale/styles/boost/AIWriting.yml +0 -0
  29. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.vale/styles/boost/Terminology.yml +0 -0
  30. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  31. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/.vale.ini +0 -0
  32. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/CLAUDE.md +0 -0
  33. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/CODE_OF_CONDUCT.md +0 -0
  34. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/CONTRIBUTING.md +0 -0
  35. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/DCO +0 -0
  36. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/GOVERNANCE.md +0 -0
  37. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/LICENSE +0 -0
  38. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/MAINTAINERS.md +0 -0
  39. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/MANIFEST.in +0 -0
  40. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/Makefile +0 -0
  41. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/README.md +0 -0
  42. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/SECURITY.md +0 -0
  43. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/SUPPORT.md +0 -0
  44. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost +0 -0
  45. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/__init__.py +0 -0
  46. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/__main__.py +0 -0
  47. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/cli.py +0 -0
  48. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/cliparse.py +0 -0
  49. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/__init__.py +0 -0
  50. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/_common.py +0 -0
  51. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/bmad.py +0 -0
  52. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/configuration.py +0 -0
  53. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/discovery.py +0 -0
  54. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/hooks.py +0 -0
  55. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/info.py +0 -0
  56. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/intelligence.py +0 -0
  57. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/quickstart.py +0 -0
  58. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/run.py +0 -0
  59. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/safety.py +0 -0
  60. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/taps.py +0 -0
  61. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/commands/team.py +0 -0
  62. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/__init__.py +0 -0
  63. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/adapters.py +0 -0
  64. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/agents.py +0 -0
  65. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/ai.py +0 -0
  66. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/aihost.py +0 -0
  67. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/archive.py +0 -0
  68. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/bmad.py +0 -0
  69. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/bootstrap.py +0 -0
  70. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/browse.py +0 -0
  71. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/builtin.py +0 -0
  72. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/capabilities.py +0 -0
  73. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/catalogbundle.py +0 -0
  74. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/chat.py +0 -0
  75. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/claude_settings.py +0 -0
  76. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/cohort.py +0 -0
  77. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/compact.py +0 -0
  78. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/complete.py +0 -0
  79. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/config.py +0 -0
  80. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/dense.py +0 -0
  81. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/discovery.py +0 -0
  82. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/ed25519.py +0 -0
  83. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/embed.py +0 -0
  84. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/faithfulness.py +0 -0
  85. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/frontmatter.py +0 -0
  86. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/gitutil.py +0 -0
  87. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/hookhost.py +0 -0
  88. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/imperative.py +0 -0
  89. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/injectscan.py +0 -0
  90. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/installscan.py +0 -0
  91. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/integrity.py +0 -0
  92. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/journal.py +0 -0
  93. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/jsonstate.py +0 -0
  94. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/localembed.py +0 -0
  95. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/lockfile.py +0 -0
  96. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/logs.py +0 -0
  97. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/mcp.py +0 -0
  98. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/mcpdecl.py +0 -0
  99. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/mcphost.py +0 -0
  100. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/minisign.py +0 -0
  101. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/nethttp.py +0 -0
  102. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/output.py +0 -0
  103. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/paths.py +0 -0
  104. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/policy.py +0 -0
  105. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/projectlock.py +0 -0
  106. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/provenance.py +0 -0
  107. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/rag.py +0 -0
  108. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/registry.py +0 -0
  109. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/report.py +0 -0
  110. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/resolve.py +0 -0
  111. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/rules.py +0 -0
  112. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/scopes.py +0 -0
  113. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/secretscan.py +0 -0
  114. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/selfupdate.py +0 -0
  115. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/serve.py +0 -0
  116. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/shards.py +0 -0
  117. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/stackprobe.py +0 -0
  118. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/staleness.py +0 -0
  119. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/store.py +0 -0
  120. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/trustaudit.py +0 -0
  121. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/typedvalue.py +0 -0
  122. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/typosquat.py +0 -0
  123. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/updatediff.py +0 -0
  124. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/util.py +0 -0
  125. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/core/workflows.py +0 -0
  126. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/data/registries.json +0 -0
  127. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/data/rules/boost-first.mdc +0 -0
  128. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/errors.py +0 -0
  129. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_cli/spin.py +0 -0
  130. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_langchain/__init__.py +0 -0
  131. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_langchain/_compat.py +0 -0
  132. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_langchain/graph.py +0 -0
  133. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_langchain/loader.py +0 -0
  134. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_langchain/py.typed +0 -0
  135. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_langchain/retriever.py +0 -0
  136. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  137. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  138. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_skill_cli.egg-info/requires.txt +0 -0
  139. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/boost_skill_cli.egg-info/top_level.txt +0 -0
  140. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/codecov.yml +0 -0
  141. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/DEBUGGING.md +0 -0
  142. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/adapters.html +0 -0
  143. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/architecture/README.md +0 -0
  144. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/architecture/c4-components-core.md +0 -0
  145. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/architecture/c4-containers.md +0 -0
  146. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/architecture/c4-context.md +0 -0
  147. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/architecture/c4-dynamic-install.md +0 -0
  148. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/bmad.md +0 -0
  149. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/gifs/distill.gif +0 -0
  150. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/gifs/doctor.gif +0 -0
  151. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/gifs/explain.gif +0 -0
  152. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/gifs/hooks.gif +0 -0
  153. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/gifs/install.gif +0 -0
  154. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/gifs/pulse.gif +0 -0
  155. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/gifs/search.gif +0 -0
  156. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/gifs/tap.gif +0 -0
  157. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/tapes/distill.tape +0 -0
  158. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/tapes/doctor.tape +0 -0
  159. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/tapes/explain.tape +0 -0
  160. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/tapes/hooks.tape +0 -0
  161. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/tapes/install.tape +0 -0
  162. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/tapes/pulse.tape +0 -0
  163. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/tapes/search.tape +0 -0
  164. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel/tapes/tap.tape +0 -0
  165. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/carousel.html +0 -0
  166. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/chat.html +0 -0
  167. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/code-review.md +0 -0
  168. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/commit-audit.md +0 -0
  169. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/demo-index.json +0 -0
  170. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/demo.gif +0 -0
  171. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/demo.html +0 -0
  172. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/demo.tape +0 -0
  173. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/dependencies.md +0 -0
  174. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/design-roadmap.html +0 -0
  175. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/eval-latest.json +0 -0
  176. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/eval.html +0 -0
  177. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/index.html +0 -0
  178. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/langchain.html +0 -0
  179. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/mcp-hub.html +0 -0
  180. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/openssf-badge.md +0 -0
  181. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/openssf-playbook.md +0 -0
  182. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/rag-architecture.md +0 -0
  183. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D01.md +0 -0
  184. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D02.md +0 -0
  185. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D03.md +0 -0
  186. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D04.md +0 -0
  187. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D05.md +0 -0
  188. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D06.md +0 -0
  189. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D07.md +0 -0
  190. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D08.md +0 -0
  191. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D09.md +0 -0
  192. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D10.md +0 -0
  193. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D11.md +0 -0
  194. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D12.md +0 -0
  195. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D13.md +0 -0
  196. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D14.md +0 -0
  197. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D15.md +0 -0
  198. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D16.md +0 -0
  199. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D17.md +0 -0
  200. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D18.md +0 -0
  201. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D19.md +0 -0
  202. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D20.md +0 -0
  203. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D21.md +0 -0
  204. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D22.md +0 -0
  205. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D23.md +0 -0
  206. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D24.md +0 -0
  207. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D25.md +0 -0
  208. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D26.md +0 -0
  209. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/BOOST-D27.md +0 -0
  210. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/a-correct-link-in-a-locked-dir-reads-as-refused.md +0 -0
  211. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/a-new-shipped-card-always-404s-its-own-write-up-link.md +0 -0
  212. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/a-refusal-and-its-remedy-never-wrapped.md +0 -0
  213. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  214. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  215. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  216. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  217. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/agent-dir-shapes-install-still-trips-on.md +0 -0
  218. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  219. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  220. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  221. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  222. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  223. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  224. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  225. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  226. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  227. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  228. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  229. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-attest-findings.md +0 -0
  230. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-audit-findings.md +0 -0
  231. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-bmad-findings.md +0 -0
  232. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-browse-findings.md +0 -0
  233. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  234. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  235. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  236. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  237. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-chat-findings.md +0 -0
  238. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  239. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  240. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  241. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-completions-findings.md +0 -0
  242. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-config-findings.md +0 -0
  243. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  244. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-context-findings.md +0 -0
  245. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  246. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
  247. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-create-findings.md +0 -0
  248. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  249. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-deps-findings.md +0 -0
  250. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-discover-findings.md +0 -0
  251. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  252. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  253. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-drift-findings.md +0 -0
  254. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  255. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-edit-findings.md +0 -0
  256. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  257. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-explain-findings.md +0 -0
  258. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-export-findings.md +0 -0
  259. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  260. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  261. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  262. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  263. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  264. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-health-findings.md +0 -0
  265. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  266. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  267. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-import-findings.md +0 -0
  268. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-index-findings.md +0 -0
  269. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  270. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  271. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-install-findings.md +0 -0
  272. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  273. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  274. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-lint-findings.md +0 -0
  275. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-log-findings.md +0 -0
  276. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  277. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  278. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  279. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  280. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
  281. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  282. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  283. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  284. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  285. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  286. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  287. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-policy-findings.md +0 -0
  288. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-preview-findings.md +0 -0
  289. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-profile-findings.md +0 -0
  290. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  291. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  292. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  293. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  294. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  295. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  296. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  297. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  298. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  299. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-replay-findings.md +0 -0
  300. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-root-findings.md +0 -0
  301. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  302. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-run-findings.md +0 -0
  303. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  304. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-search-findings.md +0 -0
  305. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  306. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
  307. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
  308. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  309. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  310. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  311. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
  312. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  313. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-sync-findings.md +0 -0
  314. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-tag-findings.md +0 -0
  315. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  316. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-tap-findings.md +0 -0
  317. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-taps-findings.md +0 -0
  318. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  319. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-test-findings.md +0 -0
  320. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-trust-findings.md +0 -0
  321. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  322. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  323. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-untap-findings.md +0 -0
  324. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-update-findings.md +0 -0
  325. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  326. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-verify-findings.md +0 -0
  327. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/audit-who-findings.md +0 -0
  328. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  329. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bare-boost-never-names-an-entry-point.md +0 -0
  330. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/because-that-was-not-the-reason.md +0 -0
  331. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bm25-empty-tokenization-kills-catalog-fallback.md +0 -0
  332. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  333. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  334. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  335. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bmad-done-contract-ignores-the-track.md +0 -0
  336. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bmad-gemini-gets-claude-hook-output.md +0 -0
  337. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  338. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bmad-personas-delegate-outside-the-router.md +0 -0
  339. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bmad-roster-drifted-from-bmad-6-12.md +0 -0
  340. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bmad-route-ignores-autopilot-state.md +0 -0
  341. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bmad-router-one-keyword-decides-the-track.md +0 -0
  342. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bmad-router-reads-each-prompt-alone.md +0 -0
  343. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  344. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/boost-first-rule.md +0 -0
  345. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  346. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  347. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/branch-current-gate.md +0 -0
  348. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  349. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  350. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  351. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  352. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  353. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  354. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/cache-writers-that-still-crash-on-a-read-only-cache.md +0 -0
  355. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  356. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
  357. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  358. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  359. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  360. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  361. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  362. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ci-summary-reports-the-wrong-coverage-gate.md +0 -0
  363. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  364. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  365. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/claude-md-instructs-the-wrong-licence-header.md +0 -0
  366. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  367. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  368. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/cli-command-audit.md +0 -0
  369. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  370. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  371. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  372. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/codex-hooks-timeout-units-are-unestablished.md +0 -0
  373. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/codex-is-not-an-mcp-host.md +0 -0
  374. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  375. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/command-carousel-page.md +0 -0
  376. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  377. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/compact-answers-a-named-tap-with-a-global-all-clear.md +0 -0
  378. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  379. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  380. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  381. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
  382. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/config-json-edge-shapes-crash-or-disagree.md +0 -0
  383. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  384. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/corpus-refresh-updates-data-not-prose.md +0 -0
  385. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/corrupt-config-reads-as-ready-to-set-up.md +0 -0
  386. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/count-flags-that-silently-invert.md +0 -0
  387. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  388. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  389. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  390. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  391. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  392. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  393. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  394. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  395. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  396. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dense-kill-switch-has-no-reason-state.md +0 -0
  397. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dense-no-key-guard-is-unreachable.md +0 -0
  398. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dense-ready-but-embedder-cannot-run.md +0 -0
  399. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  400. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  401. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  402. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  403. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  404. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  405. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  406. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  407. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  408. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  409. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  410. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  411. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  412. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  413. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/doctor-prescribes-sync-that-deletes-live-links.md +0 -0
  414. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  415. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  416. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  417. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/err-colour-judged-by-stdout.md +0 -0
  418. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/err-multiline-hint-colours-across-the-newline.md +0 -0
  419. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  420. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  421. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-corpus-counted-by-the-method-the-repo-disavows.md +0 -0
  422. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-corpus-duplication-is-intra-tap-not-mirrors.md +0 -0
  423. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  424. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  425. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  426. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  427. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  428. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-floor-calibration-stale-after-pin-refresh.md +0 -0
  429. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-gate-scores-a-body-less-corpus.md +0 -0
  430. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  431. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/exemplar-graded-golden-set-runs-in-no-gate.md +0 -0
  432. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  433. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/explain-outline-has-no-cap.md +0 -0
  434. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  435. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  436. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  437. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  438. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  439. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  440. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  441. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  442. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/free-threaded-canary-warns-about-nothing.md +0 -0
  443. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  444. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/gate-parity-test-ignores-k-and-golden.md +0 -0
  445. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/gated-golden-set-has-zero-exemplars.md +0 -0
  446. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  447. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  448. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  449. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  450. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  451. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/github-community-health-files.md +0 -0
  452. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  453. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  454. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  455. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  456. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  457. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  458. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/hooks-list-drops-the-name-before-the-host.md +0 -0
  459. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  460. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/identifier-columns-shrink-to-a-name-no-command-accepts.md +0 -0
  461. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/import-budget-gate-passes-when-boost-cannot-import.md +0 -0
  462. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/info-deps-materialize-a-dir-they-then-reject.md +0 -0
  463. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  464. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  465. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  466. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  467. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/install-paths-that-still-drop-the-result.md +0 -0
  468. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  469. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  470. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  471. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  472. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  473. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  474. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  475. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/keyed-no-store-hint-disagrees-with-shard-remedy.md +0 -0
  476. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  477. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  478. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  479. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  480. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  481. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  482. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  483. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  484. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  485. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/lighthouse-flips-on-byte-identical-input.md +0 -0
  486. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  487. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/links-job-503s-its-own-write-up-links.md +0 -0
  488. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  489. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  490. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  491. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  492. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/lock-kept-links-it-had-just-removed.md +0 -0
  493. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  494. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  495. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  496. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  497. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  498. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  499. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  500. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  501. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/manifest-in-prunes-only-the-root-copy.md +0 -0
  502. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  503. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  504. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  505. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  506. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  507. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  508. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  509. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-doctor-says-healthy-where-mcp-search-says-nothing-is-tapped.md +0 -0
  510. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  511. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-install-description-omits-antigravity.md +0 -0
  512. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  513. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  514. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-miss-reply-echoes-the-whole-query.md +0 -0
  515. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  516. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  517. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-registration-writes-outside-a-sandboxed-home.md +0 -0
  518. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  519. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-search-cost-overstated-on-keyless-machines.md +0 -0
  520. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  521. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  522. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-server-dies-on-a-valid-json-message-that-is-not-an-object.md +0 -0
  523. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  524. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-session-dies-on-a-deeply-nested-json-line.md +0 -0
  525. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-skip-list-absent-from-tool-descriptions.md +0 -0
  526. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  527. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  528. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  529. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  530. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  531. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  532. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  533. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  534. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  535. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  536. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  537. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  538. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  539. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  540. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
  541. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  542. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  543. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/one-bad-agent-dir-silences-the-whole-doctor-report.md +0 -0
  544. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  545. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  546. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  547. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/one-failed-shard-job-drops-registries-from-the-manifest.md +0 -0
  548. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  549. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  550. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  551. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/openssf-playbook.md +0 -0
  552. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/openssf-silver.md +0 -0
  553. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  554. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  555. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/panel-fits-data-to-an-assumed-80-in-a-pipe.md +0 -0
  556. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  557. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  558. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  559. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  560. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  561. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  562. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  563. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  564. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  565. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  566. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  567. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  568. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  569. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  570. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  571. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  572. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  573. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  574. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
  575. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  576. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  577. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  578. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  579. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  580. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/quickstart-drops-incompatible-shard-status.md +0 -0
  581. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/quickstart-manifest-error-drops-hint-and-misnames-cause.md +0 -0
  582. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/quickstart-rerun-retargets-tapped-registries.md +0 -0
  583. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/quickstart-says-ready-exit-0-after-every-tap-failed.md +0 -0
  584. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/quickstart-shard-download-invisible-in-preview-and-run.md +0 -0
  585. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  586. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  587. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/read-only-boost-home-with-no-cache-dir.md +0 -0
  588. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/readme-81-command-table-lists-80-omits-quickstart.md +0 -0
  589. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/readme-hero-installs-a-name-no-starter-registry-ships.md +0 -0
  590. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  591. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/reclone-leaves-a-clone-on-head-when-it-cannot-reach-the-pin.md +0 -0
  592. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/recommend-recomputes-its-columns-per-row.md +0 -0
  593. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  594. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/refresh-strands-the-natural-set-baseline.md +0 -0
  595. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  596. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/reindex-reported-a-completeness-share-it-could-not-compute.md +0 -0
  597. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  598. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/release-guard-fails-open-when-it-cannot-read-tags.md +0 -0
  599. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  600. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/relicence-apache-2.md +0 -0
  601. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  602. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  603. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  604. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/required-eval-gate-still-grades-by-name.md +0 -0
  605. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  606. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  607. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  608. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/roadmap-boards-advertise-python-39.md +0 -0
  609. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  610. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  611. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  612. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  613. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  614. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  615. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  616. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  617. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  618. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sandbox-fixture-does-not-sandbox-the-working-directory.md +0 -0
  619. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  620. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  621. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  622. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  623. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  624. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  625. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  626. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  627. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  628. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/search-caps-the-two-copyable-identifiers.md +0 -0
  629. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/search-drops-symbol-language-queries-silently.md +0 -0
  630. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/search-footer-not-fitted-to-the-pane-its-rows-were-fitted-to.md +0 -0
  631. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/search-footer-overflows-40-col-pane-gate-passes-by-luck.md +0 -0
  632. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  633. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/search-relevance-meter-is-constant-on-default-page.md +0 -0
  634. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/search-rows-use-term-width-so-piping-drops-the-tap-column.md +0 -0
  635. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  636. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  637. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  638. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  639. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  640. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  641. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  642. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  643. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  644. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  645. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  646. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  647. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  648. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  649. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/shrink-the-published-index.md +0 -0
  650. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  651. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  652. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  653. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  654. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/stale-gate-sizes-in-readme-and-contributing.md +0 -0
  655. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/stale-tap-hint-dead-for-tap-only-installs.md +0 -0
  656. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  657. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  658. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  659. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  660. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/surface-dehyphenation-rationale-is-false.md +0 -0
  661. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  662. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sweep-died-at-a-page-not-at-launch.md +0 -0
  663. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  664. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  665. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  666. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  667. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sync-repairs-a-disabled-agents-row-every-run.md +0 -0
  668. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  669. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/table-fit-widths-floor-destroys-columns-and-still-overflows.md +0 -0
  670. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  671. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  672. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/taps-vouches-for-a-clone-that-is-not-there.md +0 -0
  673. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  674. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/the-install-path-hands-agy-claudes-mcp-argv.md +0 -0
  675. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/the-links-concurrency-cap-did-not-hold.md +0 -0
  676. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/the-model-back-off-mixes-two-clocks.md +0 -0
  677. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  678. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  679. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/the-windows-test-cap-is-five-minutes-from-the-measurement.md +0 -0
  680. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  681. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/tier3-ceiling-unreachable-at-default-n.md +0 -0
  682. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  683. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  684. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  685. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  686. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/typos-reported-as-boost-bugs.md +0 -0
  687. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  688. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  689. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  690. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/unreadable-tap-cache-healthy-doctor-crashing-heal.md +0 -0
  691. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  692. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  693. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/unwritable-agent-dir-has-no-remedy.md +0 -0
  694. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/unwritable-rule-or-workflow-dir-crashes-install.md +0 -0
  695. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  696. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  697. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  698. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  699. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  700. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  701. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  702. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  703. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  704. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  705. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  706. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  707. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  708. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  709. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/workspace-scope-install.md +0 -0
  710. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/zip-strict-audit.md +0 -0
  711. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  712. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  713. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/security-design.md +0 -0
  714. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/semantic-search.md +0 -0
  715. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  716. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/verifying-releases.md +0 -0
  717. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/vex/meta.md +0 -0
  718. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/vex/openvex.json +0 -0
  719. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  720. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  721. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  722. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  723. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/eslint.config.mjs +0 -0
  724. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/README.md +0 -0
  725. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/__init__.py +0 -0
  726. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/baseline.json +0 -0
  727. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/faithfulness.py +0 -0
  728. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/golden_set.json +0 -0
  729. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/make_corpus.py +0 -0
  730. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/make_golden.py +0 -0
  731. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/metrics.py +0 -0
  732. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/publish_golden_dataset.py +0 -0
  733. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/evals/run_evals.py +0 -0
  734. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/examples/README.md +0 -0
  735. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/examples/adapt-demo.sh +0 -0
  736. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/examples/boost-run-prototype.sh +0 -0
  737. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/index.html +0 -0
  738. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/noxfile.py +0 -0
  739. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/pyproject.toml +0 -0
  740. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/coverage-tools.in +0 -0
  741. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/coverage-tools.txt +0 -0
  742. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/lint-tools.in +0 -0
  743. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/lint-tools.txt +0 -0
  744. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/mutation-tools.in +0 -0
  745. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/mutation-tools.txt +0 -0
  746. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/platform-pins.lock +0 -0
  747. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/release-tools.in +0 -0
  748. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/release-tools.txt +0 -0
  749. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/test-tools.in +0 -0
  750. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/requirements/test-tools.txt +0 -0
  751. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/a11y_check.py +0 -0
  752. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/add_spdx_headers.py +0 -0
  753. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/bench_cli.sh +0 -0
  754. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/build_command_reference.py +0 -0
  755. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/build_demo_index.py +0 -0
  756. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/build_registries.py +0 -0
  757. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/build_roadmap.py +0 -0
  758. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/build_scale_corpus.py +0 -0
  759. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/build_vex.py +0 -0
  760. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/check_anchors.py +0 -0
  761. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/check_branch_current.py +0 -0
  762. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/check_dco.py +0 -0
  763. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/check_licenses.py +0 -0
  764. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/check_reproducible.py +0 -0
  765. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/check_required_checks.py +0 -0
  766. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/ensure_eval_corpus.sh +0 -0
  767. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/eval_corpus.py +0 -0
  768. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/eval_explain.py +0 -0
  769. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/eval_gate.py +0 -0
  770. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/eval_recommend.py +0 -0
  771. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/eval_retrieval.py +0 -0
  772. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/eval_stats_summary.py +0 -0
  773. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/eval_tools.py +0 -0
  774. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/import_budget.py +0 -0
  775. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/lock_toolchain.py +0 -0
  776. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/measure_near_duplicate_bound.py +0 -0
  777. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/measure_registry.py +0 -0
  778. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/mutation_gate.py +0 -0
  779. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/mutation_shards.py +0 -0
  780. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/mutation_weights.json +0 -0
  781. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/normalize_sdist.py +0 -0
  782. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/page_budget.py +0 -0
  783. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/perf_gate.py +0 -0
  784. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/post_deploy_smoke.py +0 -0
  785. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/publish_eval_json.py +0 -0
  786. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/publish_shards.py +0 -0
  787. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/release_guard.py +0 -0
  788. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/release_preflight.py +0 -0
  789. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/serve_docs.py +0 -0
  790. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/scripts/shard_plan.py +0 -0
  791. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/setup.cfg +0 -0
  792. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/sonar-project.properties +0 -0
  793. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/style/README.md +0 -0
  794. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/style/boost.css +0 -0
  795. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/style/boost.js +0 -0
  796. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/style/demo.html +0 -0
  797. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/adapt.feature +0 -0
  798. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/browse.feature +0 -0
  799. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/count.feature +0 -0
  800. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/discover.feature +0 -0
  801. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/doctor.feature +0 -0
  802. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/environment.py +0 -0
  803. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/explain.feature +0 -0
  804. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/index.feature +0 -0
  805. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/install.feature +0 -0
  806. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/list.feature +0 -0
  807. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/mcp.feature +0 -0
  808. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/search.feature +0 -0
  809. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/steps/cli_steps.py +0 -0
  810. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/steps/discovery_steps.py +0 -0
  811. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/steps/mcp_steps.py +0 -0
  812. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/bdd/features/steps/quality_steps.py +0 -0
  813. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/conftest.py +0 -0
  814. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/eval/baseline.json +0 -0
  815. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/eval/explain.jsonl +0 -0
  816. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  817. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/eval/golden-natural.jsonl +0 -0
  818. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/eval/golden.jsonl +0 -0
  819. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/eval/recommend.jsonl +0 -0
  820. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/eval/taps-scale.txt +0 -0
  821. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/eval/taps.txt +0 -0
  822. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/eval/tool_calls.jsonl +0 -0
  823. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_bad_input_is_not_a_crash.py +0 -0
  824. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_bmad_all_hosts.py +0 -0
  825. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_bmad_personas_scope.py +0 -0
  826. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_capabilities_policy.py +0 -0
  827. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_adapt.py +0 -0
  828. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_bmad.py +0 -0
  829. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_catalog.py +0 -0
  830. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_chat.py +0 -0
  831. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_configuration.py +0 -0
  832. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_discovery.py +0 -0
  833. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_hooks.py +0 -0
  834. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_hooks_codex.py +0 -0
  835. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_hooks_gemini.py +0 -0
  836. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_identifier_columns.py +0 -0
  837. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_info.py +0 -0
  838. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_intelligence.py +0 -0
  839. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_json_reports.py +0 -0
  840. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_pane_width.py +0 -0
  841. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_quickstart.py +0 -0
  842. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_tap_pins.py +0 -0
  843. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_taps.py +0 -0
  844. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_cli_team.py +0 -0
  845. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_context_sees_an_unborn_branch.py +0 -0
  846. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_count_flags_reject_nonpositive.py +0 -0
  847. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_everyday_loop.py +0 -0
  848. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_integrity_enforce.py +0 -0
  849. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_keyed_no_store_hint.py +0 -0
  850. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_kind_conformance.py +0 -0
  851. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_property_parsers.py +0 -0
  852. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_recommend_because_is_true.py +0 -0
  853. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_repo_root_guard_covers_real_installs.py +0 -0
  854. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_reports_match_reality.py +0 -0
  855. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_run.py +0 -0
  856. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_tap_signing.py +0 -0
  857. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/functional/test_workspace_scope.py +0 -0
  858. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/README.md +0 -0
  859. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  860. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  861. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  862. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  863. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  864. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  865. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  866. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  867. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  868. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  869. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  870. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  871. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  872. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  873. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  874. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  875. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  876. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  877. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  878. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  879. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  880. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  881. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  882. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/fuzz_frontmatter.py +0 -0
  883. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/fuzz/fuzz_registry.py +0 -0
  884. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/langchain/conftest.py +0 -0
  885. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/langchain/test_graph.py +0 -0
  886. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/langchain/test_loader.py +0 -0
  887. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/langchain/test_retriever.py +0 -0
  888. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/make_fixture.py +0 -0
  889. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/perf/test_benchmarks.py +0 -0
  890. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/smoke.sh +0 -0
  891. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/data/bmad-skills-6.12.0.json +0 -0
  892. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_a11y_check.py +0 -0
  893. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_action_pin_lockstep.py +0 -0
  894. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_adapters.py +0 -0
  895. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_adapters_multi.py +0 -0
  896. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_adapters_runner.py +0 -0
  897. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_agents.py +0 -0
  898. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_ai.py +0 -0
  899. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_aihost.py +0 -0
  900. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_archive.py +0 -0
  901. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_bmad_core.py +0 -0
  902. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_boost_first_offer.py +0 -0
  903. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_bootstrap.py +0 -0
  904. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_bot_pr_dco.py +0 -0
  905. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_branch_current.py +0 -0
  906. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_browse.py +0 -0
  907. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_builtin.py +0 -0
  908. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_canary_deps.py +0 -0
  909. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_capabilities.py +0 -0
  910. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_catalog_keyword_words.py +0 -0
  911. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_catalogbundle.py +0 -0
  912. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_chat.py +0 -0
  913. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_check_anchors.py +0 -0
  914. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_check_dco.py +0 -0
  915. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_check_licenses.py +0 -0
  916. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_check_reproducible.py +0 -0
  917. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_claude_settings.py +0 -0
  918. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_claude_settings_codex.py +0 -0
  919. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_clean_internal_cache.py +0 -0
  920. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_cli_update_shards.py +0 -0
  921. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_cliparse.py +0 -0
  922. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_codeql_analysis_key.py +0 -0
  923. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_cohort.py +0 -0
  924. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_command_reference_fresh.py +0 -0
  925. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_community_health_files.py +0 -0
  926. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_compact.py +0 -0
  927. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_complete.py +0 -0
  928. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_complete_rc_block.py +0 -0
  929. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_config.py +0 -0
  930. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_content_dedupe.py +0 -0
  931. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_content_identity.py +0 -0
  932. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_corpus_prose.py +0 -0
  933. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_count_flags_use_positive_int.py +0 -0
  934. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_coverage_gate_prose.py +0 -0
  935. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_crash_redaction.py +0 -0
  936. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dedup_trust.py +0 -0
  937. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_demo_index.py +0 -0
  938. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense.py +0 -0
  939. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  940. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_embed_dedupe.py +0 -0
  941. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_entry_reuse.py +0 -0
  942. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_entry_vectors.py +0 -0
  943. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_fallback.py +0 -0
  944. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_fix_hint.py +0 -0
  945. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_model_unavailable.py +0 -0
  946. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_progress.py +0 -0
  947. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_quantized.py +0 -0
  948. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_ready_order.py +0 -0
  949. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_shard_real_schema.py +0 -0
  950. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  951. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_shards.py +0 -0
  952. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_status.py +0 -0
  953. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_status_cheap.py +0 -0
  954. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dense_vector_dedupe.py +0 -0
  955. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dependabot_config.py +0 -0
  956. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_deps.py +0 -0
  957. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_discovery.py +0 -0
  958. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_distill_merge.py +0 -0
  959. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_docs_pages_linked.py +0 -0
  960. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_docsite_chrome.py +0 -0
  961. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_doctor_output_polish.py +0 -0
  962. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_drift_hint.py +0 -0
  963. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_dry_run_parity.py +0 -0
  964. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_ed25519.py +0 -0
  965. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_embed.py +0 -0
  966. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_embed_local.py +0 -0
  967. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_embed_truncated_response.py +0 -0
  968. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_entry_key.py +0 -0
  969. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_errors_and_cli_table.py +0 -0
  970. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_baseline.py +0 -0
  971. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_corpus.py +0 -0
  972. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_corpus_bodies.py +0 -0
  973. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_faithfulness.py +0 -0
  974. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_gate.py +0 -0
  975. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_grading.py +0 -0
  976. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_metrics.py +0 -0
  977. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_query_sets.py +0 -0
  978. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_stats_summary.py +0 -0
  979. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_tools.py +0 -0
  980. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_eval_tools_probe.py +0 -0
  981. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  982. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_faithfulness.py +0 -0
  983. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_first_run_pointer.py +0 -0
  984. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_frontmatter.py +0 -0
  985. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_fuzz_targets.py +0 -0
  986. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  987. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_gitleaks_config.py +0 -0
  988. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_gitutil.py +0 -0
  989. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_gitutil_lfs.py +0 -0
  990. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_gitutil_sparse.py +0 -0
  991. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_gstack_coexistence.py +0 -0
  992. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_help_contracts.py +0 -0
  993. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_hook_settings_hosts.py +0 -0
  994. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_hookhost.py +0 -0
  995. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_hookhost_codex.py +0 -0
  996. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_imperative.py +0 -0
  997. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_import_budget.py +0 -0
  998. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_injectscan.py +0 -0
  999. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_install_permission_error.py +0 -0
  1000. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_installscan.py +0 -0
  1001. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_integrity.py +0 -0
  1002. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_journal.py +0 -0
  1003. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_jsonstate.py +0 -0
  1004. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_langchain_packaging.py +0 -0
  1005. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_launcher_python_floor.py +0 -0
  1006. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_lighthouse_budgets.py +0 -0
  1007. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_link_ownership.py +0 -0
  1008. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_localembed.py +0 -0
  1009. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_localembed_e2e.py +0 -0
  1010. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_lockfile.py +0 -0
  1011. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_logs.py +0 -0
  1012. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_marketing_counts.py +0 -0
  1013. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mcp.py +0 -0
  1014. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mcp_install_sandbox_home.py +0 -0
  1015. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mcp_install_scan.py +0 -0
  1016. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mcp_read.py +0 -0
  1017. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mcpdecl.py +0 -0
  1018. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mcphost.py +0 -0
  1019. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_measure_registry.py +0 -0
  1020. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_minisign.py +0 -0
  1021. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mutation_hardening.py +0 -0
  1022. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mutation_shards.py +0 -0
  1023. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mutation_subfile_shards.py +0 -0
  1024. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_mutmut_source_paths.py +0 -0
  1025. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_near_duplicate_collapse.py +0 -0
  1026. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_nethttp.py +0 -0
  1027. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_normalize_sdist.py +0 -0
  1028. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_output.py +0 -0
  1029. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_output_table_drop.py +0 -0
  1030. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_output_table_whole.py +0 -0
  1031. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_page_budget.py +0 -0
  1032. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_paths.py +0 -0
  1033. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_perf_gate.py +0 -0
  1034. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_pkg_confusions.py +0 -0
  1035. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_pkg_injection.py +0 -0
  1036. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_pkg_secrets.py +0 -0
  1037. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_platform_pins.py +0 -0
  1038. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_policy.py +0 -0
  1039. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_post_deploy_smoke.py +0 -0
  1040. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_project_mcp_sidecar.py +0 -0
  1041. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_projectlock.py +0 -0
  1042. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_provenance.py +0 -0
  1043. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_publish_golden_dataset.py +0 -0
  1044. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_quickstart_readiness.py +0 -0
  1045. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_rag.py +0 -0
  1046. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_rag_completeness.py +0 -0
  1047. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_rag_extra_hint.py +0 -0
  1048. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_rag_fastpath.py +0 -0
  1049. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_rag_fusion.py +0 -0
  1050. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_read_text_arg.py +0 -0
  1051. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_registries_fresh.py +0 -0
  1052. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_registry.py +0 -0
  1053. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_registry_categories.py +0 -0
  1054. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_registry_control_chars.py +0 -0
  1055. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_registry_parallel.py +0 -0
  1056. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_release_guard.py +0 -0
  1057. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_release_preflight.py +0 -0
  1058. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_repo_root_guard.py +0 -0
  1059. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_report.py +0 -0
  1060. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_required_checks.py +0 -0
  1061. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_rerank_cache.py +0 -0
  1062. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_resolve.py +0 -0
  1063. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
  1064. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_roadmap_fresh.py +0 -0
  1065. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_rules.py +0 -0
  1066. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_sandbox_fixture_cwd.py +0 -0
  1067. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_scale_corpus.py +0 -0
  1068. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_schedule_plist.py +0 -0
  1069. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_scopes.py +0 -0
  1070. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_sdist_contents.py +0 -0
  1071. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_secretscan.py +0 -0
  1072. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_selfupdate.py +0 -0
  1073. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_serve.py +0 -0
  1074. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_serve_docs.py +0 -0
  1075. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_shard_plan.py +0 -0
  1076. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_shards.py +0 -0
  1077. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_shards_carry_forward.py +0 -0
  1078. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_shards_incremental.py +0 -0
  1079. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_shards_ingest.py +0 -0
  1080. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_shards_matrix.py +0 -0
  1081. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_smoke_covers_every_command.py +0 -0
  1082. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_spdx_headers.py +0 -0
  1083. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_spin.py +0 -0
  1084. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_stackprobe.py +0 -0
  1085. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_staleness.py +0 -0
  1086. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_store.py +0 -0
  1087. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_store_materialize.py +0 -0
  1088. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_sync_blocked_links.py +0 -0
  1089. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_sync_lost_lock.py +0 -0
  1090. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  1091. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_tap_pins.py +0 -0
  1092. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_token_parity.py +0 -0
  1093. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_toolchain_lock.py +0 -0
  1094. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_trustaudit.py +0 -0
  1095. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_typedvalue.py +0 -0
  1096. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_typosquat.py +0 -0
  1097. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_updatediff.py +0 -0
  1098. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_upstream_path.py +0 -0
  1099. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_util.py +0 -0
  1100. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_version.py +0 -0
  1101. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_version_tags.py +0 -0
  1102. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_vex.py +0 -0
  1103. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_visual_harness_capture.py +0 -0
  1104. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_visual_harness_flags.py +0 -0
  1105. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_workflow_concurrency.py +0 -0
  1106. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  1107. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  1108. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_workflow_timeouts.py +0 -0
  1109. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_workflows.py +0 -0
  1110. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  1111. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/visual/a11y_check.mjs +0 -0
  1112. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/tests/visual/console_check.mjs +0 -0
  1113. {boost_skill_cli-1.2.147 → boost_skill_cli-1.2.148}/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.147
3
+ Version: 1.2.148
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.147'
22
- __version_tuple__ = version_tuple = (1, 2, 147)
21
+ __version__ = version = '1.2.148'
22
+ __version_tuple__ = version_tuple = (1, 2, 148)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -25,6 +25,7 @@ from ..core import (
25
25
  catalog,
26
26
  complete,
27
27
  config,
28
+ deps,
28
29
  frontmatter,
29
30
  gitutil,
30
31
  installscan,
@@ -32,6 +33,7 @@ from ..core import (
32
33
  journal,
33
34
  lockfile,
34
35
  paths,
36
+ prereq,
35
37
  projectlock,
36
38
  rag,
37
39
  registry,
@@ -381,11 +383,55 @@ def _rel_list(meta: dict, key: str) -> list[str]:
381
383
 
382
384
 
383
385
  def _skill_relations(name: str, key: str) -> list[str]:
384
- """`requires:`/`conflicts:` for a skill by name, from its catalog entry."""
386
+ """`requires:`/`conflicts:` for a skill by name, from its catalog entry.
387
+
388
+ ``requires:`` goes through :func:`deps.requirement_names`, the same
389
+ filter ``boost deps`` applies, so the two cannot disagree about what a
390
+ requirement *is*. Without it this path still fed prose and package
391
+ coordinates to the resolver: `requires: ["gh (GitHub CLI)", "python3"]`
392
+ printed "required skill 'gh (GitHub CLI)' is in no tap — skipped" while
393
+ `boost deps` on the same skill, post-filter, listed nothing. A qualified
394
+ `tap:name` survives the filter verbatim, because this feeds
395
+ ``catalog.find``.
396
+ """
385
397
  matches = catalog.find(name)
386
398
  if not matches:
387
399
  return []
388
- return _rel_list(matches[0].get("meta") or {}, key)
400
+ meta = matches[0].get("meta") or {}
401
+ if key == "requires":
402
+ return deps.requirement_names(meta)
403
+ return _rel_list(meta, key)
404
+
405
+
406
+ def _report_prerequisites(entries: list[dict], *, pbase=None,
407
+ would: bool = False) -> None:
408
+ """Name the catalogued items an install's own frontmatter says it needs.
409
+
410
+ Advisory and after the fact: the ``requires:`` closure is installed for
411
+ you (above), and everything the wider spellings declare — ``skills:``,
412
+ ``dependencies:``, ``prerequisites:``, … — is reported here instead. See
413
+ :mod:`boost_cli.core.prereq` for why reporting rather than installing is
414
+ the answer, and for the census the key set comes from.
415
+
416
+ ``pbase`` is the project base for a ``--local`` install, so a sibling
417
+ installed into *this repo* counts as present. Without it every
418
+ project-scope user got a prerequisite line naming something already
419
+ beside it.
420
+ """
421
+ try:
422
+ rows = prereq.for_entries(entries, pbase=pbase)
423
+ except BoostError:
424
+ # A missing or unreadable catalog must not fail an install that has
425
+ # already happened; the prerequisite line is advice, not a step.
426
+ return
427
+ for row in rows:
428
+ out.warn("%s declares %s boost cannot see installed: %s"
429
+ % (row.name, _plural(len(row.unmet), "prerequisite"),
430
+ ", ".join("%s (%s)" % (m.name, m.tap) for m in row.unmet)),
431
+ wrap=True)
432
+ if rows:
433
+ out.info(("would meet them with: %s" if would else "meet them with: %s")
434
+ % prereq.install_hint(rows), wrap=True)
389
435
 
390
436
 
391
437
  def _expand_dependencies(entries: list[dict]) -> tuple[list[dict], resolve.Resolution]:
@@ -450,11 +496,17 @@ def cmd_install(argv: list[str]) -> int:
450
496
  ap.add_argument("--dry-run", action="store_true",
451
497
  help="show what would happen without changing anything")
452
498
  ap.add_argument("--no-deps", action="store_true",
453
- help="install only the named skills, not their `requires:`")
499
+ help="install only the named skills, not their `requires:` "
500
+ "(the wider spellings are reported, never installed)")
454
501
  ap.add_argument("--no-mcp", action="store_true",
455
502
  help="don't offer to register MCP servers a skill declares")
456
503
  args = ap.parse_args(argv)
457
504
  args.scope = args.scope or scopes.SCOPE_USER
505
+ # Resolved before the dry-run branch, because both sides need it and only
506
+ # one of them used to bind it: the preview returns early, so a `pbase`
507
+ # assigned inside `if args.dry_run:` is unbound by the time the run path
508
+ # reports prerequisites. `None` for every scope but `--local`.
509
+ pbase = scopes.resolve_base(args.scope)
458
510
  only = _check_agents(args.agent)
459
511
  multi = len(args.names) > 1
460
512
  entries, failed = [], 0
@@ -479,8 +531,30 @@ def cmd_install(argv: list[str]) -> int:
479
531
  % (_plural(len(dep_res.added), "dependency"),
480
532
  ", ".join(dep_res.added)))
481
533
  for name in dep_res.unresolved:
482
- out.warn("required skill %r is in no tap — skipped "
483
- "(install it manually or `boost tap` its source)" % name)
534
+ # "in no tap" is only true when the catalog has no row for it.
535
+ # `_expand_dependencies` also lands here when `resolve_one`
536
+ # refuses a name *several* taps carry, and calling that absent
537
+ # contradicted the prerequisite line printed a few lines below,
538
+ # which names a tap and gives a command that works. 77% of the
539
+ # ambiguous values in the census resolve this way, so the
540
+ # contradiction was the common case, not the corner.
541
+ cands = catalog.distinct_candidates(catalog.find(name))
542
+ if not cands:
543
+ out.warn("required skill %r is in no tap — skipped "
544
+ "(install it manually or `boost tap` its source)"
545
+ % name)
546
+ continue
547
+ taps = sorted({str(e.get("tap") or "") for e in cands})
548
+ # Only offer `tap:name` when that would actually disambiguate:
549
+ # one tap vendoring the same name twice is ambiguous too, and
550
+ # there `tap:name` is as unresolvable as the bare name.
551
+ fix = ("name one of %s" % ", ".join("%s:%s" % (t, name)
552
+ for t in taps)
553
+ if len(taps) == len(cands)
554
+ else "`boost search %s` and install the one you want"
555
+ % name)
556
+ out.warn("required skill %r matches %d catalog entries — "
557
+ "skipped (%s)" % (name, len(cands), fix), wrap=True)
484
558
  for skill, clash in dep_res.conflicts:
485
559
  out.warn("%s declares a conflict with %s (also present)" % (skill, clash))
486
560
  # Pulling in dependencies can turn a single-name request into a multi-item
@@ -497,7 +571,6 @@ def cmd_install(argv: list[str]) -> int:
497
571
  # of `install x --agent cursor` drop the "available to … (reads the
498
572
  # store directly)" line the run then prints.
499
573
  native_targets = list(agents.native_store_agents())
500
- pbase = scopes.resolve_base(args.scope)
501
574
  if args.scope == scopes.SCOPE_PROJECT and pbase is None:
502
575
  raise BoostError(
503
576
  "there is no project here to install into",
@@ -619,6 +692,7 @@ def cmd_install(argv: list[str]) -> int:
619
692
  out.warn("%s: %s" % (e["name"], err.message))
620
693
  failed += 1
621
694
  continue
695
+ _report_prerequisites(entries, pbase=pbase, would=True)
622
696
  out.info("dry run — nothing was changed")
623
697
  return 1 if failed else 0
624
698
 
@@ -637,6 +711,9 @@ def cmd_install(argv: list[str]) -> int:
637
711
  _report_result(res, no_mcp=args.no_mcp)
638
712
  results.append(res)
639
713
  if results:
714
+ _report_prerequisites([e for e in entries
715
+ if e["name"] in {r.name for r in results}],
716
+ pbase=pbase)
640
717
  kinds = {r.kind for r in results}
641
718
  noun = next(iter(kinds)) if len(kinds) == 1 else "item"
642
719
  new = sum(1 for r in results if not r.upgraded)
@@ -37,6 +37,7 @@ from ..core import (
37
37
  lockfile,
38
38
  logs,
39
39
  paths,
40
+ prereq,
40
41
  provenance,
41
42
  registry,
42
43
  report,
@@ -729,6 +730,37 @@ def cmd_doctor(argv):
729
730
  "(%s) — left alone; `boost hooks` only touches its own"
730
731
  % (len(others), _s(len(others)), ", ".join(events)), wrap=True)
731
732
 
733
+ try:
734
+ prereq_rows = prereq.for_installed()
735
+ except BoostError:
736
+ # doctor's contract is to *report* problems, not to raise on one. A
737
+ # BoostError out of the catalog or the lock would otherwise abort the
738
+ # health report part-way through, and this check is the least
739
+ # important thing in it.
740
+ prereq_rows = []
741
+ if prereq_rows:
742
+ # Declared in the items' own frontmatter and resolvable to real
743
+ # catalogued items that are not installed. `rep.note`, not `bad`: it
744
+ # is somebody else's frontmatter, and boost will not install it for
745
+ # them (see `core/prereq`), so counting it would leave doctor
746
+ # permanently red on something no boost command clears on its own.
747
+ #
748
+ # One line, truncated, like `orphans` above — not one per item. The
749
+ # census found 1,323 `skills:` values across 18 taps, so a note per
750
+ # declaring item buries the rest of the report and repeats a single
751
+ # `name` down the whole `--json` `checks` array. The hint stays
752
+ # whole: it is a command, and a truncated command does not run.
753
+ missing = sorted({m.spec for row in prereq_rows for m in row.unmet})
754
+ rep.note("unmet-prerequisite",
755
+ "%d installed item%s declare%s %d prerequisite%s not "
756
+ "installed (%s%s) — `%s`"
757
+ % (len(prereq_rows), _s(len(prereq_rows)),
758
+ "" if len(prereq_rows) > 1 else "s",
759
+ len(missing), _s(len(missing)),
760
+ ", ".join(missing[:5]),
761
+ ", …" if len(missing) > 5 else "",
762
+ prereq.install_hint(prereq_rows)), wrap=True)
763
+
732
764
  for dup in store.duplicate_discovery():
733
765
  # An agent that reads the canonical store natively, holding its own
734
766
  # entry for a skill that store already carries. Boost did not put it
@@ -469,6 +469,30 @@ def all_entries() -> list[dict]:
469
469
  return out
470
470
 
471
471
 
472
+ def cached_entries() -> list[dict]:
473
+ """:func:`all_entries`, but never writing — whatever the caches hold.
474
+
475
+ :func:`load_tap` *rescans* a missing or stale cache and writes it, which is
476
+ the right default for a command whose answer depends on the catalogue. It
477
+ is the wrong default for a read-only check bolted onto another command:
478
+ ``boost doctor`` reports a missing cache as an issue and ``boost heal``
479
+ rebuilds it, so a doctor that quietly rebuilt it first turned heal's
480
+ "rebuilt catalog cache" into "nothing to heal" — doctor curing the thing it
481
+ had just diagnosed.
482
+
483
+ A tap with no cache contributes nothing rather than being scanned. Callers
484
+ of this get a possibly-incomplete corpus by construction, so it suits a
485
+ check that only ever *adds* an advisory line and must stay silent when it
486
+ cannot see enough to be sure.
487
+ """
488
+ out: list[dict] = []
489
+ for tap in registry.list_taps():
490
+ cached = _cached_tap(tap)
491
+ if cached is not None:
492
+ out.extend(cached[0])
493
+ return out
494
+
495
+
472
496
  def kind_counts() -> dict[str, int]:
473
497
  """Per-kind entry counts across every configured tap.
474
498
 
@@ -518,12 +542,19 @@ def tap_matches(tap_name: str, qualifier: str) -> bool:
518
542
  return bool(tap_name) and qualifier in (tap_name, tap_name.split("/")[-1])
519
543
 
520
544
 
521
- def find(name: str, tap: str | None = None) -> list[dict]:
522
- """Exact-name lookup. Supports 'owner/repo:skill' qualified form."""
545
+ def find(name: str, tap: str | None = None,
546
+ entries: list[dict] | None = None) -> list[dict]:
547
+ """Exact-name lookup. Supports 'owner/repo:skill' qualified form.
548
+
549
+ ``entries`` searches a corpus the caller already has instead of reading
550
+ every tap again: a caller resolving many names in a row (one per installed
551
+ item) would otherwise pay a full :func:`all_entries` per name.
552
+ """
523
553
  qualifier, bare = split_name(name)
524
554
  if qualifier is not None:
525
555
  tap, name = qualifier, bare
526
- matches = [e for e in all_entries() if e["name"] == name]
556
+ pool = all_entries() if entries is None else entries
557
+ matches = [e for e in pool if e["name"] == name]
527
558
  if tap:
528
559
  # Same tiering as registry.get: a qualified owner/repo beats a bare
529
560
  # repo tail, so `angular/skills:x` never picks up `microsoft/skills:x`.
@@ -688,6 +719,35 @@ def _fuzzy_suggestions(query: str, entries: list[dict], limit: int = 3) -> list[
688
719
  return difflib.get_close_matches(query, names, n=limit)
689
720
 
690
721
 
722
+ def distinct_candidates(matches: list[dict]) -> list[dict]:
723
+ """The candidates :func:`resolve_one` would still have to choose between.
724
+
725
+ The same two collapses ``resolve_one`` makes, without raising or picking:
726
+ inside one tap, rows that render identically are a vendored copy
727
+ (:func:`_identity`); across taps, rows that agree on a non-empty content
728
+ digest are a mirror (:func:`_same_thing`). What is left is genuine
729
+ ambiguity, and more than one of it means an unqualified ``boost install
730
+ <name>`` exits 1.
731
+
732
+ A caller that only wants to know whether a name is *installable by name*
733
+ needs exactly that count. Asking ``resolve_one`` instead would mean
734
+ catching an exception per name, and counting ``find()`` rows instead
735
+ over-reports every mirrored skill in the catalogue.
736
+ """
737
+ if len(matches) <= 1:
738
+ return matches.copy()
739
+ # `.get`, like `_identity`: this is an advisory read behind `install`
740
+ # and `doctor`, and a synthesised entry missing `tap` must not raise
741
+ # KeyError out of a hint.
742
+ taps = list(dict.fromkeys(e.get("tap") for e in matches))
743
+ if len(taps) == 1:
744
+ if len({_identity(e) for e in matches}) == 1:
745
+ return [_canonical(matches)]
746
+ return matches.copy()
747
+ best = _same_thing(matches)
748
+ return [best] if best is not None else matches.copy()
749
+
750
+
691
751
  def resolve_one(name: str, path: str | None = None) -> dict:
692
752
  """Find exactly one entry or raise with a helpful hint.
693
753
 
@@ -0,0 +1,343 @@
1
+ # Copyright the boost contributors.
2
+ # SPDX-License-Identifier: Apache-2.0
3
+ """Requirement & conflict *facts* for ``boost deps``/``boost info`` — what is
4
+ declared, and whether it is currently satisfied.
5
+
6
+ Distinct from :mod:`boost_cli.core.resolve`, which turns ``requires:`` into an
7
+ install *order*. This module never decides what to install; it answers "given
8
+ what is installed right now, is this skill's declared graph satisfied?" — the
9
+ question ``boost deps`` renders and scores an exit code on. Pure and I/O-free,
10
+ like :mod:`boost_cli.core.mcpdecl`: callers read frontmatter and pass the
11
+ parsed value in, so every branch here is unit- and mutation-testable with no
12
+ lock file or filesystem access.
13
+
14
+ The bug this closes: ``boost deps <name>`` used to test only *that skill's own*
15
+ ``requires:`` against the installed set, then separately render one level of
16
+ *its dependencies'* own unmet requirements underneath — so a transitively unmet
17
+ requirement printed a "✗ not installed" line the exit code never counted.
18
+ :func:`has_unmet` is the one place that walks the same nesting the renderer
19
+ does, so the two can never disagree again.
20
+ """
21
+ from __future__ import annotations
22
+
23
+ import re
24
+ from collections.abc import Callable, Sequence
25
+ from dataclasses import dataclass
26
+
27
+
28
+ def as_list(value) -> list[str]:
29
+ """Normalize a frontmatter value to a list of non-empty names.
30
+
31
+ Accepts a YAML list, a comma-separated string, or a blank/``False``
32
+ value ("declares nothing") — the shared contract ``requires:`` and
33
+ ``conflicts:`` both use.
34
+ """
35
+ if value in (None, "", False):
36
+ return []
37
+ if isinstance(value, list):
38
+ return [str(x).strip() for x in value if str(x).strip()]
39
+ return [s.strip() for s in str(value).split(",") if s.strip()]
40
+
41
+
42
+ def requirement_names(meta: dict | None) -> list[str]:
43
+ """The plain skill/rule/workflow names a ``requires:`` frontmatter value
44
+ lists.
45
+
46
+ Deliberately blind to the MCP-server shape a ``requires:`` block can also
47
+ carry (``requires: {mcp: [...]}`` in an author's source) — boost's
48
+ stdlib-only frontmatter parser has no nested-mapping support, so a value
49
+ written that way never survives parsing as a mapping at all: it is
50
+ hoisted, leaving the *parsed* ``requires`` empty and the MCP names on the
51
+ top-level ``mcp`` key instead (see :mod:`boost_cli.core.mcpdecl`'s module
52
+ docstring). That is precisely why a plain ``requires:`` reader must not
53
+ also expect a mapping here — there is never one to find — and why an MCP
54
+ requirement is a separate fact, read from ``mcp`` via
55
+ :mod:`boost_cli.core.mcpdecl`, not from this function.
56
+
57
+ Values that cannot be an item name are dropped by
58
+ :func:`classify_token`. That is a fix rather than tidying: of the 101
59
+ ``requires:`` values in the tapped corpus, 37 are prose ("GitHub CLI (gh)
60
+ installed and authenticated") and several more are package coordinates
61
+ (``dspy>=0.34.0``, ``python3``) — and every one was rendered by ``boost
62
+ deps`` as a skill that is "✗ not installed" and warned about by ``boost
63
+ install`` as "in no tap". Both were naming a missing skill that was never
64
+ a skill.
65
+
66
+ Tokens come back **as written** (:func:`item_tokens`, not
67
+ :func:`item_names`) because this feeds a resolver: a qualified
68
+ ``acme/skills:brainstorming`` has to stay qualified all the way to
69
+ ``catalog.find``.
70
+ """
71
+ return item_tokens(as_list((meta or {}).get("requires")))
72
+
73
+
74
+ def conflict_names(meta: dict | None) -> list[str]:
75
+ """The names a ``conflicts:`` frontmatter value lists."""
76
+ return as_list((meta or {}).get("conflicts"))
77
+
78
+
79
+ def requirement_row(name: str, have: set, sub_names: Sequence[str] = ()) -> dict:
80
+ """One ``{name, installed, requires}`` record.
81
+
82
+ The shape both ``boost deps <name>`` (top level and nested, one level
83
+ deep) and ``boost deps`` (all-installed) now emit for a requirement, so a
84
+ ``--json`` consumer reads the same fields regardless of nesting depth —
85
+ the nested form used to be a bare string with no ``installed`` flag,
86
+ which is what let a genuinely unmet transitive requirement render
87
+ invisibly to any JSON consumer. ``requires`` is always present (``[]``
88
+ when ``sub_names`` is empty) rather than omitted, matching the envelope
89
+ shape this command already committed to.
90
+ """
91
+ return {"name": name, "installed": name in have,
92
+ "requires": [requirement_row(n, have) for n in sub_names]}
93
+
94
+
95
+ def conflict_row(name: str, have: set) -> dict:
96
+ """One ``{name, installed}`` conflict record."""
97
+ return {"name": name, "installed": name in have}
98
+
99
+
100
+ def has_unmet(rows) -> bool:
101
+ """True if any requirement row, at any nesting depth, is unmet.
102
+
103
+ Walks ``row["requires"]`` the same way the renderer does, so a skill whose
104
+ own direct requirement is installed but whose requirement's requirement
105
+ is not still reports a problem — the exit-code bug this module exists to
106
+ close.
107
+ """
108
+ for row in rows:
109
+ if not row["installed"] or has_unmet(row.get("requires") or []):
110
+ return True
111
+ return False
112
+
113
+
114
+ def active_conflicts(rows) -> bool:
115
+ """True if any conflict row names something actually installed."""
116
+ return any(row["installed"] for row in rows)
117
+
118
+
119
+ def unmet_names(rows) -> list[str]:
120
+ """Every unmet name across requirement rows, flattened and de-duplicated,
121
+ sorted for deterministic output — the ``boost install <name>`` hint reads
122
+ straight off this list.
123
+ """
124
+ names: list[str] = []
125
+ seen: set = set()
126
+ for row in rows:
127
+ if not row["installed"] and row["name"] not in seen:
128
+ seen.add(row["name"])
129
+ names.append(row["name"])
130
+ for sub in row.get("requires") or []:
131
+ if not sub["installed"] and sub["name"] not in seen:
132
+ seen.add(sub["name"])
133
+ names.append(sub["name"])
134
+ return sorted(names)
135
+
136
+
137
+ # ── prerequisite declarations ────────────────────────────────────────────
138
+ #
139
+ # `requires:` is the spelling boost has always read, and a census of the 461
140
+ # tapped registries on a real machine (62,310 entries) says it is the
141
+ # *narrowest* real one: 101 declared values across 6 taps. The two that carry
142
+ # almost all of the signal were invisible — `skills:` (1,323 values, 18 taps)
143
+ # and `dependencies:` (1,065 values, 17 taps). So the key set is widened here
144
+ # rather than in a caller, and the two keys that merely *look* like
145
+ # declarations are excluded by name:
146
+ #
147
+ # `required:` 130 entries, and not a dependency list at all — it is an
148
+ # argument-schema field, valued `true`/`false` or naming
149
+ # parameters (`["task_type", "requirements"]`, `["type:
150
+ # file"]`). Reading it would invent 130 prerequisites.
151
+ # `tools_required:` names Claude *tool permissions* (`Bash`, `Read`,
152
+ # `mcp__github__*`), which are not installable items.
153
+ # `requires_tools:` names PATH binaries (`kubectl`, `terraform`).
154
+ # `requires-extras:` names Python extras (`dspy[optuna]`, `faiss-cpu`).
155
+ #
156
+ # `requirements:` and `dependency:` are listed for the same reason even though
157
+ # every occurrence measured empty: a key that is skipped on purpose should say
158
+ # so, so the next census does not have to re-derive it.
159
+ PREREQUISITE_KEYS = ("requires", "dependencies", "depends-on", "depends_on",
160
+ "prerequisites", "uses", "skills", "needs")
161
+
162
+ NON_PREREQUISITE_KEYS = ("required", "tools_required", "requires_tools",
163
+ "requires-extras", "requirements", "dependency")
164
+
165
+ # A declared value is not automatically a name. Over the same corpus the 2,658
166
+ # values under those keys split four ways, and only the first is addressable:
167
+ # 1,944 resolve to a catalogued item, 193 are package specs (`torch>=2.0.0`,
168
+ # `dspy[mcp]`, `actions/upload-artifact@v7.0.1`), 62 are prose sentences
169
+ # ("GitHub CLI (gh) installed and authenticated") and 42 are file paths
170
+ # (`01-base-agentic.rules.md`). Classification is therefore per *value*, never
171
+ # per key: `dependencies:` is packages in `Galaxy-Dawn/claude-scholar` and
172
+ # sibling skills in `athola/claude-night-market`.
173
+ ITEM = "item"
174
+ PACKAGE = "package"
175
+ PROSE = "prose"
176
+ FILE = "file"
177
+
178
+ _FILE_SUFFIXES = (".md", ".mdc", ".py", ".sh", ".json", ".yml", ".yaml", ".txt")
179
+ # A version constraint, an extras bracket or an `@ref` — every shape that
180
+ # makes a token a package coordinate rather than an item name.
181
+ _PACKAGE = re.compile(r"(>=|<=|==|~=|!=|@|\[)|(?<=[A-Za-z0-9])\s*[<>]\s*\d")
182
+ # Namespaced forms are real and common: `imbue:proof-of-work`,
183
+ # `superpowers:writing-skills`, `marketing-skill/skills/aeo`. 380 of the 1,944
184
+ # resolvable values arrive this way, and in every measured case the item lives
185
+ # in the *declaring* tap — which is also what keeps a GitHub-Actions `uses:`
186
+ # such as `actions/checkout` from resolving against an unrelated registry.
187
+ _NAMESPACE = re.compile(r"[:/]")
188
+ _MAX_NAME_WORDS = 4
189
+
190
+
191
+ def item_names(tokens: Sequence[str]) -> list[str]:
192
+ """The bare item names among ``tokens``, in order, keeping duplicates.
193
+
194
+ A namespaced token is reduced to its tail, which is what the *report*
195
+ path wants: :func:`declared_prerequisites` pairs that tail with
196
+ ``same_tap_only`` and resolves it inside the declaring tap. See
197
+ :func:`item_tokens` for the caller that must not do that.
198
+ """
199
+ names = []
200
+ for token in tokens:
201
+ kind, name = classify_token(token)
202
+ if kind == ITEM:
203
+ names.append(name)
204
+ return names
205
+
206
+
207
+ def item_tokens(tokens: Sequence[str]) -> list[str]:
208
+ """The item-naming tokens among ``tokens``, **exactly as written**.
209
+
210
+ The same filter as :func:`item_names` without the namespace split, for
211
+ the one caller that feeds a resolver rather than a message.
212
+ ``owner/repo:x`` is boost's own qualified form and
213
+ ``pkg._expand_dependencies`` hands it straight to ``catalog.find``:
214
+ reducing it to ``x`` there would turn an unambiguous spec into a bare
215
+ name two taps can carry, which boost refuses rather than guesses.
216
+ Dropping the qualifier is only safe once something else supplies the tap.
217
+ """
218
+ return [t for t in tokens if classify_token(t)[0] == ITEM]
219
+
220
+
221
+ @dataclass(frozen=True)
222
+ class Prerequisite:
223
+ """One declared value that names an installable item.
224
+
225
+ ``key`` is the frontmatter key it came from (so a message can say which
226
+ spelling it read), ``token`` the value as written, ``name`` the bare name
227
+ to look up, and ``same_tap_only`` marks a namespaced token, which may only
228
+ resolve inside the tap that declared it.
229
+ """
230
+
231
+ key: str
232
+ token: str
233
+ name: str
234
+ same_tap_only: bool
235
+
236
+
237
+ def classify_token(token: str) -> tuple[str, str]:
238
+ """Classify one declared value as ``(class, bare_name)``.
239
+
240
+ ``bare_name`` is meaningful only for :data:`ITEM`; the other classes
241
+ return the token unchanged so a caller can report what it skipped. Order
242
+ matters: `dspy[mcp]` is a package before it is a short name, and
243
+ `01-base-agentic.rules.md` is a file before it is either.
244
+
245
+ A URL is checked before anything else because it defeats every later
246
+ rule at once: `https://docs.example.com/hooks` has no file suffix, no
247
+ package marker and one word, so the namespace split would hand back
248
+ `hooks` — a plausible skill name in almost any registry.
249
+ """
250
+ tok = token.strip()
251
+ if not tok:
252
+ return PROSE, tok
253
+ if "://" in tok:
254
+ return PROSE, tok
255
+ if tok.lower().endswith(_FILE_SUFFIXES):
256
+ return FILE, tok
257
+ if _PACKAGE.search(tok):
258
+ return PACKAGE, tok
259
+ if len(tok.split()) > _MAX_NAME_WORDS or tok.endswith(".") or "(" in tok:
260
+ return PROSE, tok
261
+ if _NAMESPACE.search(tok):
262
+ tail = _NAMESPACE.split(tok)[-1].strip()
263
+ return (ITEM, tail) if tail else (PROSE, tok)
264
+ return ITEM, tok
265
+
266
+
267
+ def declared_prerequisites(meta: dict | None,
268
+ own_name: str | None = None) -> list[Prerequisite]:
269
+ """Every value under :data:`PREREQUISITE_KEYS` that names an item.
270
+
271
+ Package specs, prose and file paths are dropped, as is a self-reference —
272
+ 31 entries in the corpus list their own name, and "install x before x" is
273
+ never a useful line. De-duplicated on the resolved name, first key wins,
274
+ so a skill declaring the same sibling under both `requires:` and `skills:`
275
+ is one prerequisite rather than two.
276
+ """
277
+ found: list[Prerequisite] = []
278
+ seen: set[str] = set()
279
+ for key in PREREQUISITE_KEYS:
280
+ for token in as_list((meta or {}).get(key)):
281
+ kind, name = classify_token(token)
282
+ if kind != ITEM or name == own_name or name in seen:
283
+ continue
284
+ seen.add(name)
285
+ found.append(Prerequisite(key, token, name,
286
+ bool(_NAMESPACE.search(token))))
287
+ return found
288
+
289
+
290
+ @dataclass(frozen=True)
291
+ class Unmet:
292
+ """A prerequisite that resolves to a real catalogued item nobody installed.
293
+
294
+ ``spec`` is what to hand `boost install`: qualified as ``tap:name`` when
295
+ the name exists in more than one tap, because boost refuses an unqualified
296
+ name in that case — 422 of the resolvable values are ambiguous that way,
297
+ so an unqualified hint would be a command that does not run.
298
+ """
299
+
300
+ name: str
301
+ tap: str
302
+ spec: str
303
+ key: str
304
+
305
+
306
+ def unmet_prerequisites(prereqs: Sequence[Prerequisite], *, tap: str,
307
+ installed, taps_for: Callable[[str], Sequence[str]],
308
+ ) -> list[Unmet]:
309
+ """Which declared prerequisites name a catalogued item that is not installed.
310
+
311
+ ``taps_for(name)`` returns **one tap per candidate boost would still have
312
+ to choose between** — so a name a single registry ships twice under
313
+ different content appears twice, because that is what
314
+ ``catalog.resolve_one`` refuses. Resolution is **same tap first** —
315
+ measured against the 422 ambiguous values, the declaring tap also carries
316
+ the name in 326 of them (77%) — then a unique other tap.
317
+
318
+ Anything else is dropped *silently*, and that is the load-bearing
319
+ decision: 413 of the declared values are bare tokens matching nothing in
320
+ any tap (`chromadb`, `torch`, `litgpt`), so a line reading "required skill
321
+ 'chromadb' is in no tap" would be wrong far more often than saying
322
+ nothing. Silence is the floor this has to beat — and it is why a row only
323
+ survives when the ``spec`` it carries is a command that runs. Two
324
+ differing copies inside the declaring tap make ``boost install <name>``
325
+ exit 1 with "matches 2 different skills", so that row is dropped rather
326
+ than turned into advice the user cannot follow.
327
+ """
328
+ out_rows: list[Unmet] = []
329
+ for pre in prereqs:
330
+ if pre.name in installed:
331
+ continue
332
+ candidates = list(taps_for(pre.name) or ())
333
+ own = [c for c in candidates if c == tap]
334
+ if len(own) == 1:
335
+ source = tap
336
+ elif own or pre.same_tap_only or len(candidates) != 1:
337
+ continue
338
+ else:
339
+ source = candidates[0]
340
+ spec = ("%s:%s" % (source, pre.name) if len(set(candidates)) > 1
341
+ else pre.name)
342
+ out_rows.append(Unmet(pre.name, source, spec, pre.key))
343
+ return out_rows