boost-skill-cli 1.2.87__tar.gz → 1.2.89__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 (959) hide show
  1. {boost_skill_cli-1.2.87/boost_skill_cli.egg-info → boost_skill_cli-1.2.89}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/_common.py +32 -4
  4. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/configuration.py +7 -1
  5. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/discovery.py +1 -1
  6. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/hooks.py +2 -2
  7. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/info.py +3 -2
  8. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/intelligence.py +41 -13
  9. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/pkg.py +36 -10
  10. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/quality.py +38 -15
  11. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/safety.py +5 -1
  12. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/taps.py +1 -1
  13. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/team.py +30 -7
  14. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/catalog.py +46 -3
  15. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/gitutil.py +66 -5
  16. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/output.py +17 -7
  17. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/store.py +17 -0
  18. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/util.py +19 -0
  19. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  20. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/commands.html +5 -4
  21. boost_skill_cli-1.2.89/docs/demo.gif +0 -0
  22. boost_skill_cli-1.2.89/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +81 -0
  23. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +3 -3
  24. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-fingerprint-findings.md +3 -3
  25. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +3 -3
  26. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +3 -3
  27. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +4 -4
  28. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +3 -3
  29. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +3 -3
  30. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +3 -3
  31. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/one-dead-tap-broke-every-update.md +10 -0
  32. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap.html +69 -16
  33. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_chat.py +8 -0
  34. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_configuration.py +20 -0
  35. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_discovery.py +4 -2
  36. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_hooks.py +11 -0
  37. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_info.py +9 -3
  38. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_intelligence.py +56 -10
  39. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_pane_width.py +3 -2
  40. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_pkg.py +118 -1
  41. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_quality.py +60 -0
  42. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_taps.py +8 -0
  43. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_team.py +31 -0
  44. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_workspace_scope.py +52 -0
  45. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_catalog.py +58 -0
  46. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_gitutil.py +100 -0
  47. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_output.py +12 -0
  48. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_store.py +29 -0
  49. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_util.py +24 -0
  50. boost_skill_cli-1.2.87/docs/demo.gif +0 -0
  51. boost_skill_cli-1.2.87/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -42
  52. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.gitattributes +0 -0
  53. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.gitignore +0 -0
  54. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.gitleaks.toml +0 -0
  55. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.htmlvalidate.json +0 -0
  56. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.lighthouserc.json +0 -0
  57. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.lycheeignore +0 -0
  58. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.markdownlint-cli2.jsonc +0 -0
  59. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.pre-commit-config.yaml +0 -0
  60. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.stylelintrc.json +0 -0
  61. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.vale/styles/boost/AIWriting.yml +0 -0
  62. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.vale/styles/boost/Terminology.yml +0 -0
  63. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  64. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/.vale.ini +0 -0
  65. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/CLAUDE.md +0 -0
  66. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/CODE_OF_CONDUCT.md +0 -0
  67. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/CONTRIBUTING.md +0 -0
  68. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/DCO +0 -0
  69. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/GOVERNANCE.md +0 -0
  70. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/LICENSE +0 -0
  71. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/MAINTAINERS.md +0 -0
  72. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/MANIFEST.in +0 -0
  73. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/Makefile +0 -0
  74. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/README.md +0 -0
  75. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/SECURITY.md +0 -0
  76. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/SUPPORT.md +0 -0
  77. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost +0 -0
  78. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/__init__.py +0 -0
  79. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/__main__.py +0 -0
  80. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/cli.py +0 -0
  81. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/cliparse.py +0 -0
  82. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/__init__.py +0 -0
  83. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/bmad.py +0 -0
  84. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/quickstart.py +0 -0
  85. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/commands/run.py +0 -0
  86. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/__init__.py +0 -0
  87. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/adapters.py +0 -0
  88. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/agents.py +0 -0
  89. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/ai.py +0 -0
  90. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/aihost.py +0 -0
  91. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/bmad.py +0 -0
  92. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/bootstrap.py +0 -0
  93. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/browse.py +0 -0
  94. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/builtin.py +0 -0
  95. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/capabilities.py +0 -0
  96. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/catalogbundle.py +0 -0
  97. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/chat.py +0 -0
  98. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/claude_settings.py +0 -0
  99. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/complete.py +0 -0
  100. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/config.py +0 -0
  101. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/dense.py +0 -0
  102. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/ed25519.py +0 -0
  103. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/embed.py +0 -0
  104. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/faithfulness.py +0 -0
  105. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/frontmatter.py +0 -0
  106. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/hookhost.py +0 -0
  107. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/imperative.py +0 -0
  108. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/injectscan.py +0 -0
  109. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/installscan.py +0 -0
  110. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/integrity.py +0 -0
  111. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/journal.py +0 -0
  112. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/localembed.py +0 -0
  113. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/lockfile.py +0 -0
  114. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/logs.py +0 -0
  115. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/mcp.py +0 -0
  116. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/mcpdecl.py +0 -0
  117. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/mcphost.py +0 -0
  118. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/minisign.py +0 -0
  119. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/nethttp.py +0 -0
  120. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/paths.py +0 -0
  121. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/policy.py +0 -0
  122. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/projectlock.py +0 -0
  123. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/provenance.py +0 -0
  124. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/rag.py +0 -0
  125. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/registry.py +0 -0
  126. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/resolve.py +0 -0
  127. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/rules.py +0 -0
  128. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/scopes.py +0 -0
  129. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/secretscan.py +0 -0
  130. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/selfupdate.py +0 -0
  131. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/serve.py +0 -0
  132. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/shards.py +0 -0
  133. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/stackprobe.py +0 -0
  134. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/staleness.py +0 -0
  135. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/trustaudit.py +0 -0
  136. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/typedvalue.py +0 -0
  137. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/typosquat.py +0 -0
  138. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/updatediff.py +0 -0
  139. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/core/workflows.py +0 -0
  140. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/data/registries.json +0 -0
  141. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/data/rules/boost-first.mdc +0 -0
  142. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/errors.py +0 -0
  143. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_cli/spin.py +0 -0
  144. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_langchain/__init__.py +0 -0
  145. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_langchain/_compat.py +0 -0
  146. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_langchain/graph.py +0 -0
  147. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_langchain/loader.py +0 -0
  148. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_langchain/py.typed +0 -0
  149. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_langchain/retriever.py +0 -0
  150. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  151. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  152. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  153. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/requires.txt +0 -0
  154. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/top_level.txt +0 -0
  155. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/codecov.yml +0 -0
  156. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/.claude/settings.local.json +0 -0
  157. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/DEBUGGING.md +0 -0
  158. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/adapters.html +0 -0
  159. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/architecture/README.md +0 -0
  160. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/architecture/c4-components-core.md +0 -0
  161. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/architecture/c4-containers.md +0 -0
  162. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/architecture/c4-context.md +0 -0
  163. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/architecture/c4-dynamic-install.md +0 -0
  164. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/bmad.md +0 -0
  165. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/gifs/distill.gif +0 -0
  166. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/gifs/doctor.gif +0 -0
  167. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/gifs/explain.gif +0 -0
  168. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/gifs/hooks.gif +0 -0
  169. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/gifs/install.gif +0 -0
  170. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/gifs/pulse.gif +0 -0
  171. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/gifs/search.gif +0 -0
  172. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/gifs/tap.gif +0 -0
  173. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/tapes/distill.tape +0 -0
  174. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/tapes/doctor.tape +0 -0
  175. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/tapes/explain.tape +0 -0
  176. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/tapes/hooks.tape +0 -0
  177. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/tapes/install.tape +0 -0
  178. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/tapes/pulse.tape +0 -0
  179. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/tapes/search.tape +0 -0
  180. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel/tapes/tap.tape +0 -0
  181. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/carousel.html +0 -0
  182. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/chat.html +0 -0
  183. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/code-review.md +0 -0
  184. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/commit-audit.md +0 -0
  185. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/demo-index.json +0 -0
  186. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/demo.html +0 -0
  187. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/demo.tape +0 -0
  188. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/dependencies.md +0 -0
  189. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/design-roadmap.html +0 -0
  190. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/eval-latest.json +0 -0
  191. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/eval.html +0 -0
  192. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/index.html +0 -0
  193. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/langchain.html +0 -0
  194. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/mcp-hub.html +0 -0
  195. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/openssf-badge.md +0 -0
  196. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/openssf-playbook.md +0 -0
  197. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/rag-architecture.md +0 -0
  198. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D01.md +0 -0
  199. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D02.md +0 -0
  200. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D03.md +0 -0
  201. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D04.md +0 -0
  202. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D05.md +0 -0
  203. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D06.md +0 -0
  204. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D07.md +0 -0
  205. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D08.md +0 -0
  206. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D09.md +0 -0
  207. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D10.md +0 -0
  208. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D11.md +0 -0
  209. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D12.md +0 -0
  210. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D13.md +0 -0
  211. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D14.md +0 -0
  212. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D15.md +0 -0
  213. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D16.md +0 -0
  214. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D17.md +0 -0
  215. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D18.md +0 -0
  216. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D19.md +0 -0
  217. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D20.md +0 -0
  218. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D21.md +0 -0
  219. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D22.md +0 -0
  220. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D23.md +0 -0
  221. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D24.md +0 -0
  222. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D25.md +0 -0
  223. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D26.md +0 -0
  224. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D27.md +0 -0
  225. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  226. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  227. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  228. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  229. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  230. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  231. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  232. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  233. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  234. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  235. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  236. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  237. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  238. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  239. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  240. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-attest-findings.md +0 -0
  241. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-audit-findings.md +0 -0
  242. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-bmad-findings.md +0 -0
  243. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-browse-findings.md +0 -0
  244. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  245. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  246. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  247. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  248. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-chat-findings.md +0 -0
  249. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  250. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  251. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  252. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-completions-findings.md +0 -0
  253. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-config-findings.md +0 -0
  254. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  255. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-context-findings.md +0 -0
  256. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  257. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-create-findings.md +0 -0
  258. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  259. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-deps-findings.md +0 -0
  260. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-discover-findings.md +0 -0
  261. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  262. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  263. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-drift-findings.md +0 -0
  264. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  265. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-edit-findings.md +0 -0
  266. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  267. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-explain-findings.md +0 -0
  268. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-export-findings.md +0 -0
  269. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  270. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  271. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-health-findings.md +0 -0
  272. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  273. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-import-findings.md +0 -0
  274. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-index-findings.md +0 -0
  275. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  276. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-install-findings.md +0 -0
  277. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  278. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  279. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-lint-findings.md +0 -0
  280. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-log-findings.md +0 -0
  281. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  282. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  283. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  284. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  285. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  286. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  287. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  288. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  289. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  290. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-policy-findings.md +0 -0
  291. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-preview-findings.md +0 -0
  292. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-profile-findings.md +0 -0
  293. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  294. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  295. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  296. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  297. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  298. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  299. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  300. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  301. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  302. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-replay-findings.md +0 -0
  303. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-root-findings.md +0 -0
  304. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  305. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-run-findings.md +0 -0
  306. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  307. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-search-findings.md +0 -0
  308. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  309. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
  310. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  311. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  312. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  313. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
  314. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  315. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-sync-findings.md +0 -0
  316. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-tag-findings.md +0 -0
  317. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  318. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-tap-findings.md +0 -0
  319. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-taps-findings.md +0 -0
  320. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  321. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-test-findings.md +0 -0
  322. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-trust-findings.md +0 -0
  323. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  324. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  325. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-untap-findings.md +0 -0
  326. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-update-findings.md +0 -0
  327. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  328. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-verify-findings.md +0 -0
  329. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-who-findings.md +0 -0
  330. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  331. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  332. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  333. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  334. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  335. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  336. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/boost-first-rule.md +0 -0
  337. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  338. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  339. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/branch-current-gate.md +0 -0
  340. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  341. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  342. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  343. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  344. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  345. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  346. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  347. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
  348. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  349. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  350. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  351. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  352. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  353. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  354. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  355. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  356. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  357. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/cli-command-audit.md +0 -0
  358. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  359. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  360. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  361. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  362. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/command-carousel-page.md +0 -0
  363. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  364. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  365. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  366. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  367. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
  368. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  369. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  370. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  371. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  372. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  373. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  374. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  375. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  376. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  377. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  378. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  379. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  380. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  381. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  382. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  383. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  384. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  385. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  386. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  387. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  388. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  389. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  390. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  391. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  392. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  393. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  394. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  395. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  396. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  397. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  398. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  399. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  400. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  401. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  402. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  403. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  404. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  405. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  406. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  407. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  408. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  409. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  410. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  411. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  412. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  413. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  414. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  415. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  416. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  417. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  418. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/github-community-health-files.md +0 -0
  419. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  420. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  421. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  422. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  423. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  424. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  425. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  426. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  427. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  428. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  429. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  430. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  431. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  432. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  433. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  434. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  435. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  436. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  437. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  438. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  439. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  440. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  441. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  442. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  443. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  444. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  445. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  446. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  447. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  448. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  449. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  450. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  451. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  452. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  453. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  454. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  455. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  456. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  457. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  458. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  459. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  460. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  461. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  462. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  463. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  464. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  465. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  466. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  467. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  468. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  469. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  470. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  471. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  472. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  473. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  474. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  475. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  476. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  477. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  478. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  479. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  480. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  481. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  482. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  483. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  484. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  485. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  486. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  487. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  488. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  489. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
  490. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  491. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  492. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  493. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  494. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  495. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  496. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  497. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/openssf-playbook.md +0 -0
  498. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/openssf-silver.md +0 -0
  499. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  500. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  501. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  502. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  503. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  504. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  505. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  506. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  507. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  508. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  509. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  510. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  511. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  512. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  513. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  514. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  515. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  516. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  517. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  518. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  519. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
  520. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  521. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  522. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  523. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  524. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  525. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  526. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  527. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  528. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  529. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  530. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  531. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  532. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/relicence-apache-2.md +0 -0
  533. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  534. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  535. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  536. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  537. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  538. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  539. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  540. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  541. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  542. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  543. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  544. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  545. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  546. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  547. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  548. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  549. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  550. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  551. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  552. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  553. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  554. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  555. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  556. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  557. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  558. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  559. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  560. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  561. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  562. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  563. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  564. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  565. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  566. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  567. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  568. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  569. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  570. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  571. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  572. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/shrink-the-published-index.md +0 -0
  573. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  574. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  575. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  576. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  577. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  578. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  579. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  580. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  581. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  582. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  583. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  584. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  585. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  586. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  587. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  588. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  589. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  590. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  591. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  592. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  593. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  594. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  595. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  596. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  597. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  598. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  599. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  600. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  601. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  602. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  603. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  604. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  605. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  606. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  607. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  608. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  609. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  610. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  611. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  612. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  613. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  614. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  615. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  616. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/workspace-scope-install.md +0 -0
  617. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/zip-strict-audit.md +0 -0
  618. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  619. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  620. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/security-design.md +0 -0
  621. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/semantic-search.md +0 -0
  622. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  623. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/verifying-releases.md +0 -0
  624. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/vex/meta.md +0 -0
  625. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/vex/openvex.json +0 -0
  626. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  627. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  628. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  629. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  630. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/eslint.config.mjs +0 -0
  631. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/README.md +0 -0
  632. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/__init__.py +0 -0
  633. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/baseline.json +0 -0
  634. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/faithfulness.py +0 -0
  635. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/golden_set.json +0 -0
  636. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/make_corpus.py +0 -0
  637. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/make_golden.py +0 -0
  638. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/metrics.py +0 -0
  639. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/publish_golden_dataset.py +0 -0
  640. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/evals/run_evals.py +0 -0
  641. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/examples/README.md +0 -0
  642. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/examples/adapt-demo.sh +0 -0
  643. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/examples/boost-run-prototype.sh +0 -0
  644. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/index.html +0 -0
  645. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/noxfile.py +0 -0
  646. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/pyproject.toml +0 -0
  647. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/coverage-tools.in +0 -0
  648. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/coverage-tools.txt +0 -0
  649. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/lint-tools.in +0 -0
  650. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/lint-tools.txt +0 -0
  651. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/mutation-tools.in +0 -0
  652. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/mutation-tools.txt +0 -0
  653. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/platform-pins.lock +0 -0
  654. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/release-tools.in +0 -0
  655. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/release-tools.txt +0 -0
  656. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/test-tools.in +0 -0
  657. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/requirements/test-tools.txt +0 -0
  658. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/a11y_check.py +0 -0
  659. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/add_spdx_headers.py +0 -0
  660. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/bench_cli.sh +0 -0
  661. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/build_command_reference.py +0 -0
  662. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/build_demo_index.py +0 -0
  663. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/build_registries.py +0 -0
  664. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/build_roadmap.py +0 -0
  665. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/build_scale_corpus.py +0 -0
  666. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/build_vex.py +0 -0
  667. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/check_anchors.py +0 -0
  668. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/check_branch_current.py +0 -0
  669. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/check_dco.py +0 -0
  670. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/check_licenses.py +0 -0
  671. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/check_reproducible.py +0 -0
  672. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/check_required_checks.py +0 -0
  673. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/ensure_eval_corpus.sh +0 -0
  674. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/eval_corpus.py +0 -0
  675. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/eval_explain.py +0 -0
  676. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/eval_gate.py +0 -0
  677. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/eval_recommend.py +0 -0
  678. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/eval_retrieval.py +0 -0
  679. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/eval_stats_summary.py +0 -0
  680. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/eval_tools.py +0 -0
  681. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/import_budget.py +0 -0
  682. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/lock_toolchain.py +0 -0
  683. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/measure_near_duplicate_bound.py +0 -0
  684. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/measure_registry.py +0 -0
  685. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/mutation_gate.py +0 -0
  686. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/mutation_shards.py +0 -0
  687. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/mutation_weights.json +0 -0
  688. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/normalize_sdist.py +0 -0
  689. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/page_budget.py +0 -0
  690. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/perf_gate.py +0 -0
  691. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/post_deploy_smoke.py +0 -0
  692. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/publish_eval_json.py +0 -0
  693. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/publish_shards.py +0 -0
  694. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/release_guard.py +0 -0
  695. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/release_preflight.py +0 -0
  696. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/serve_docs.py +0 -0
  697. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/scripts/shard_plan.py +0 -0
  698. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/setup.cfg +0 -0
  699. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/sonar-project.properties +0 -0
  700. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/style/README.md +0 -0
  701. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/style/boost.css +0 -0
  702. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/style/boost.js +0 -0
  703. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/style/demo.html +0 -0
  704. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/adapt.feature +0 -0
  705. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/browse.feature +0 -0
  706. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/count.feature +0 -0
  707. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/discover.feature +0 -0
  708. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/doctor.feature +0 -0
  709. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/environment.py +0 -0
  710. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/explain.feature +0 -0
  711. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/index.feature +0 -0
  712. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/install.feature +0 -0
  713. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/list.feature +0 -0
  714. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/mcp.feature +0 -0
  715. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/search.feature +0 -0
  716. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/steps/cli_steps.py +0 -0
  717. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/steps/discovery_steps.py +0 -0
  718. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/steps/mcp_steps.py +0 -0
  719. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/bdd/features/steps/quality_steps.py +0 -0
  720. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/conftest.py +0 -0
  721. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/eval/baseline.json +0 -0
  722. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/eval/explain.jsonl +0 -0
  723. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  724. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/eval/golden-natural.jsonl +0 -0
  725. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/eval/golden.jsonl +0 -0
  726. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/eval/recommend.jsonl +0 -0
  727. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/eval/taps-scale.txt +0 -0
  728. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/eval/taps.txt +0 -0
  729. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/eval/tool_calls.jsonl +0 -0
  730. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_bmad_all_hosts.py +0 -0
  731. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_capabilities_policy.py +0 -0
  732. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_adapt.py +0 -0
  733. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_bmad.py +0 -0
  734. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_catalog.py +0 -0
  735. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_hooks_gemini.py +0 -0
  736. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_quickstart.py +0 -0
  737. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_cli_tap_pins.py +0 -0
  738. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_everyday_loop.py +0 -0
  739. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_integrity_enforce.py +0 -0
  740. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_kind_conformance.py +0 -0
  741. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_property_parsers.py +0 -0
  742. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_run.py +0 -0
  743. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/functional/test_tap_signing.py +0 -0
  744. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/README.md +0 -0
  745. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  746. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  747. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  748. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  749. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  750. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  751. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  752. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  753. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  754. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  755. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  756. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  757. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  758. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  759. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  760. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  761. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  762. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  763. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  764. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  765. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  766. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  767. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  768. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/fuzz_frontmatter.py +0 -0
  769. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/fuzz/fuzz_registry.py +0 -0
  770. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/langchain/conftest.py +0 -0
  771. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/langchain/test_graph.py +0 -0
  772. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/langchain/test_loader.py +0 -0
  773. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/langchain/test_retriever.py +0 -0
  774. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/make_fixture.py +0 -0
  775. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/perf/test_benchmarks.py +0 -0
  776. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/smoke.sh +0 -0
  777. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_a11y_check.py +0 -0
  778. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_action_pin_lockstep.py +0 -0
  779. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_adapters.py +0 -0
  780. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_adapters_multi.py +0 -0
  781. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_adapters_runner.py +0 -0
  782. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_agents.py +0 -0
  783. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_ai.py +0 -0
  784. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_aihost.py +0 -0
  785. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_bmad_core.py +0 -0
  786. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_boost_first_offer.py +0 -0
  787. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_bootstrap.py +0 -0
  788. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_bot_pr_dco.py +0 -0
  789. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_branch_current.py +0 -0
  790. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_browse.py +0 -0
  791. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_builtin.py +0 -0
  792. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_capabilities.py +0 -0
  793. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_catalogbundle.py +0 -0
  794. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_chat.py +0 -0
  795. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_check_anchors.py +0 -0
  796. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_check_dco.py +0 -0
  797. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_check_licenses.py +0 -0
  798. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_check_reproducible.py +0 -0
  799. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_claude_settings.py +0 -0
  800. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_clean_internal_cache.py +0 -0
  801. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_cli_update_shards.py +0 -0
  802. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_cliparse.py +0 -0
  803. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_codeql_analysis_key.py +0 -0
  804. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_command_reference_fresh.py +0 -0
  805. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_community_health_files.py +0 -0
  806. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_compact.py +0 -0
  807. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_complete.py +0 -0
  808. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_complete_rc_block.py +0 -0
  809. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_config.py +0 -0
  810. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_content_dedupe.py +0 -0
  811. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_content_identity.py +0 -0
  812. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_crash_redaction.py +0 -0
  813. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dedup_trust.py +0 -0
  814. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_demo_index.py +0 -0
  815. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense.py +0 -0
  816. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  817. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_embed_dedupe.py +0 -0
  818. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_entry_reuse.py +0 -0
  819. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_entry_vectors.py +0 -0
  820. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_fallback.py +0 -0
  821. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_fix_hint.py +0 -0
  822. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_progress.py +0 -0
  823. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_quantized.py +0 -0
  824. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_ready_order.py +0 -0
  825. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_shard_real_schema.py +0 -0
  826. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  827. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_shards.py +0 -0
  828. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_status.py +0 -0
  829. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_status_cheap.py +0 -0
  830. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dense_vector_dedupe.py +0 -0
  831. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_dependabot_config.py +0 -0
  832. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_distill_merge.py +0 -0
  833. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_docs_pages_linked.py +0 -0
  834. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_docsite_chrome.py +0 -0
  835. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_doctor_output_polish.py +0 -0
  836. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_ed25519.py +0 -0
  837. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_embed.py +0 -0
  838. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_embed_local.py +0 -0
  839. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_embed_truncated_response.py +0 -0
  840. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_entry_key.py +0 -0
  841. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_errors_and_cli_table.py +0 -0
  842. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_eval_baseline.py +0 -0
  843. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_eval_corpus.py +0 -0
  844. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_eval_faithfulness.py +0 -0
  845. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_eval_gate.py +0 -0
  846. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_eval_grading.py +0 -0
  847. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_eval_metrics.py +0 -0
  848. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_eval_stats_summary.py +0 -0
  849. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_eval_tools.py +0 -0
  850. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_eval_tools_probe.py +0 -0
  851. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  852. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_faithfulness.py +0 -0
  853. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_frontmatter.py +0 -0
  854. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_fuzz_targets.py +0 -0
  855. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  856. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_gitleaks_config.py +0 -0
  857. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_gitutil_lfs.py +0 -0
  858. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_gitutil_sparse.py +0 -0
  859. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_gstack_coexistence.py +0 -0
  860. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_hook_settings_hosts.py +0 -0
  861. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_hookhost.py +0 -0
  862. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_imperative.py +0 -0
  863. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_import_budget.py +0 -0
  864. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_injectscan.py +0 -0
  865. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_install_permission_error.py +0 -0
  866. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_installscan.py +0 -0
  867. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_integrity.py +0 -0
  868. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_journal.py +0 -0
  869. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_langchain_packaging.py +0 -0
  870. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_link_ownership.py +0 -0
  871. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_localembed.py +0 -0
  872. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_localembed_e2e.py +0 -0
  873. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_lockfile.py +0 -0
  874. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_logs.py +0 -0
  875. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_marketing_counts.py +0 -0
  876. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_mcp.py +0 -0
  877. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_mcp_install_scan.py +0 -0
  878. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_mcp_read.py +0 -0
  879. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_mcpdecl.py +0 -0
  880. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_mcphost.py +0 -0
  881. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_measure_registry.py +0 -0
  882. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_minisign.py +0 -0
  883. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_mutation_hardening.py +0 -0
  884. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_mutation_shards.py +0 -0
  885. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_mutation_subfile_shards.py +0 -0
  886. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_mutmut_source_paths.py +0 -0
  887. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_near_duplicate_collapse.py +0 -0
  888. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_nethttp.py +0 -0
  889. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_normalize_sdist.py +0 -0
  890. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_page_budget.py +0 -0
  891. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_paths.py +0 -0
  892. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_perf_gate.py +0 -0
  893. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_pkg_confusions.py +0 -0
  894. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_pkg_injection.py +0 -0
  895. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_pkg_secrets.py +0 -0
  896. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_platform_pins.py +0 -0
  897. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_policy.py +0 -0
  898. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_post_deploy_smoke.py +0 -0
  899. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_project_mcp_sidecar.py +0 -0
  900. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_projectlock.py +0 -0
  901. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_provenance.py +0 -0
  902. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_publish_golden_dataset.py +0 -0
  903. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_rag.py +0 -0
  904. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_rag_fastpath.py +0 -0
  905. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_rag_fusion.py +0 -0
  906. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_registries_fresh.py +0 -0
  907. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_registry.py +0 -0
  908. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_registry_categories.py +0 -0
  909. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_registry_control_chars.py +0 -0
  910. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_registry_parallel.py +0 -0
  911. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_release_guard.py +0 -0
  912. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_release_preflight.py +0 -0
  913. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_required_checks.py +0 -0
  914. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_rerank_cache.py +0 -0
  915. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_resolve.py +0 -0
  916. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
  917. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_roadmap_fresh.py +0 -0
  918. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_rules.py +0 -0
  919. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_scale_corpus.py +0 -0
  920. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_scopes.py +0 -0
  921. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_secretscan.py +0 -0
  922. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_selfupdate.py +0 -0
  923. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_serve.py +0 -0
  924. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_serve_docs.py +0 -0
  925. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_shard_plan.py +0 -0
  926. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_shards.py +0 -0
  927. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_shards_incremental.py +0 -0
  928. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_shards_ingest.py +0 -0
  929. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_shards_matrix.py +0 -0
  930. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_smoke_covers_every_command.py +0 -0
  931. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_spdx_headers.py +0 -0
  932. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_spin.py +0 -0
  933. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_stackprobe.py +0 -0
  934. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_staleness.py +0 -0
  935. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_store_materialize.py +0 -0
  936. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_sync_blocked_links.py +0 -0
  937. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  938. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_tap_pins.py +0 -0
  939. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_token_parity.py +0 -0
  940. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_toolchain_lock.py +0 -0
  941. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_trustaudit.py +0 -0
  942. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_typedvalue.py +0 -0
  943. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_typosquat.py +0 -0
  944. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_updatediff.py +0 -0
  945. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_version.py +0 -0
  946. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_version_tags.py +0 -0
  947. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_vex.py +0 -0
  948. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_visual_harness_flags.py +0 -0
  949. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_workflow_concurrency.py +0 -0
  950. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  951. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  952. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_workflow_timeouts.py +0 -0
  953. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_workflows.py +0 -0
  954. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  955. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/visual/a11y_check.mjs +0 -0
  956. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/visual/console_check.mjs +0 -0
  957. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/visual/package-lock.json +0 -0
  958. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/tests/visual/package.json +0 -0
  959. {boost_skill_cli-1.2.87 → boost_skill_cli-1.2.89}/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.87
3
+ Version: 1.2.89
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.87'
22
- __version_tuple__ = version_tuple = (1, 2, 87)
21
+ __version__ = version = '1.2.89'
22
+ __version_tuple__ = version_tuple = (1, 2, 89)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -8,6 +8,9 @@ place lets the modules split without either importing back into the other.
8
8
  """
9
9
  from __future__ import annotations
10
10
 
11
+ import difflib
12
+ from itertools import chain
13
+
11
14
  from ..core import lockfile, store
12
15
  from ..errors import BoostError
13
16
 
@@ -17,6 +20,28 @@ def _s(n: int) -> str:
17
20
  return "" if n == 1 else "s"
18
21
 
19
22
 
23
+ def _not_installed_hint(missing: list[str], candidates: list[str]) -> str:
24
+ """The "see what is with `boost list`" hint, fronted by a close-match guess.
25
+
26
+ A typo one character off an installed name (``lint brainstormin`` with
27
+ only ``brainstorming`` installed) used to get the same bare hint as
28
+ genuinely nonsense input — the fixed pointer to ``boost list`` says
29
+ nothing a fuzzy match could have said directly. Checked against every
30
+ missing name so a multi-name call still surfaces a guess for the one that
31
+ has one, and deduplicated in case two misses guess the same candidate.
32
+ """
33
+ names = sorted(set(candidates))
34
+ close: list[str] = []
35
+ for n in missing:
36
+ for c in difflib.get_close_matches(n, names, n=3):
37
+ if c not in close:
38
+ close.append(c)
39
+ if not close:
40
+ return "see what is with `boost list`"
41
+ return ("closest matches: %s — see what is with `boost list`"
42
+ % ", ".join(close))
43
+
44
+
20
45
  def _require_lock_integrity() -> None:
21
46
  """Fail loudly, before iterating, if the lock file itself is broken.
22
47
 
@@ -71,8 +96,9 @@ def _iter_installed(names: list[str] | None = None) -> list[tuple[str, dict]]:
71
96
  hint="rules and workflows are governed by pin / quarantine / "
72
97
  "verify / update")
73
98
  if missing:
74
- raise BoostError("not installed: %s" % ", ".join(missing),
75
- hint="see what is with `boost list`")
99
+ raise BoostError(
100
+ "not installed: %s" % ", ".join(missing),
101
+ hint=_not_installed_hint(missing, list(skills)))
76
102
  return [(n, skills[n]) for n in names]
77
103
  return sorted(skills.items())
78
104
 
@@ -100,8 +126,10 @@ def _iter_installed_all(
100
126
  else:
101
127
  out.append((found[0], n, found[1]))
102
128
  if missing:
103
- raise BoostError("not installed: %s" % ", ".join(missing),
104
- hint="see what is with `boost list`")
129
+ all_names = chain.from_iterable(lockfile.all_installed().values())
130
+ raise BoostError(
131
+ "not installed: %s" % ", ".join(missing),
132
+ hint=_not_installed_hint(missing, list(all_names)))
105
133
  return out
106
134
  return [(kind, n, e)
107
135
  for kind, section in lockfile.all_installed().items()
@@ -394,8 +394,14 @@ def cmd_create(argv) -> int:
394
394
  journal.log("create", name, path=str(target))
395
395
  out.ok("created %s" % _tilde(skill_md))
396
396
  if args.install:
397
+ owner = store.existing_skill_owner(name)
398
+ if owner and not out.confirm(
399
+ "%s is already installed from %s — replace it?" % (name, owner)):
400
+ out.warn("not installed: %s is already installed from %s" % (name, owner))
401
+ out.dim(" next: edit it, then `boost import %s`" % _tilde(target))
402
+ return 0
397
403
  res = store.install_from_path(target, name=name)
398
- out.ok("installed %s → %s" % (name, _tilde(res.dest)))
404
+ out.ok("%s %s → %s" % ("replaced" if owner else "installed", name, _tilde(res.dest)))
399
405
  if res.linked:
400
406
  out.info("linked: " + ", ".join(agents.display_name(a) for a in res.linked))
401
407
  else:
@@ -170,7 +170,7 @@ def cmd_search(argv):
170
170
  if reranked:
171
171
  scored, ranker = reranked, "Claude Haiku relevance"
172
172
  else:
173
- out.warn(ai.fallback_note(), wrap=True)
173
+ out.warn(ai.fallback_note(), wrap=True, stream=sys.stderr)
174
174
  shown = scored[:args.limit]
175
175
  # The dot marks "a skill by this name is installed" — a name match, with
176
176
  # the known homonym caveat (13 real skills share `code-reviewer`). A lock
@@ -26,7 +26,7 @@ from __future__ import annotations
26
26
 
27
27
  from .. import cliparse
28
28
  from ..core import claude_settings as cs
29
- from ..core import hookhost, journal
29
+ from ..core import hookhost, journal, util
30
30
  from ..core import output as out
31
31
  from ..errors import BoostError
32
32
 
@@ -50,7 +50,7 @@ def cmd_hooks(argv) -> int:
50
50
  help="settings scope (default: project; list shows both)")
51
51
  p.add_argument("-m", "--matcher",
52
52
  help="Claude matcher, e.g. 'startup|resume|clear'")
53
- p.add_argument("--timeout", type=int, default=10,
53
+ p.add_argument("--timeout", type=util.positive_int, default=10,
54
54
  help="hook timeout in seconds (default: 10)")
55
55
  args = p.parse_args(argv)
56
56
 
@@ -725,9 +725,10 @@ def cmd_explain(argv):
725
725
  # it and fall through to the grounded extractive summary below.
726
726
  out.warn("AI explanation looked ungrounded (%s) — showing the "
727
727
  "extractive summary instead"
728
- % ", ".join(faithfulness.ungrounded_terms(reply, text)[:4]))
728
+ % ", ".join(faithfulness.ungrounded_terms(reply, text)[:4]),
729
+ stream=sys.stderr)
729
730
  else:
730
- out.warn(ai.fallback_note(), wrap=True)
731
+ out.warn(ai.fallback_note(), wrap=True, stream=sys.stderr)
731
732
  meta, body = frontmatter.parse(text)
732
733
  desc = str(meta.get("description") or "").strip()
733
734
  if desc:
@@ -14,6 +14,7 @@ import difflib
14
14
  import fnmatch
15
15
  import json
16
16
  import re
17
+ import sys
17
18
  import tempfile
18
19
  import textwrap
19
20
  from collections import Counter
@@ -46,10 +47,16 @@ _warned_fallback = False
46
47
 
47
48
 
48
49
  def _note_fallback() -> None:
49
- """Warn once per invocation that the AI path is unavailable."""
50
+ """Warn once per invocation that the AI path is unavailable.
51
+
52
+ Routed to stderr: `infer`/`absorb` write generated SKILL.md content to
53
+ stdout when neither `--install` nor `-o` is given, and this note used to
54
+ print as stdout's first line — `boost infer > SKILL.md` wrote a file
55
+ whose body opened with the warning instead of the frontmatter.
56
+ """
50
57
  global _warned_fallback
51
58
  if not _warned_fallback:
52
- out.warn(ai.fallback_note(), wrap=True)
59
+ out.warn(ai.fallback_note(), wrap=True, stream=sys.stderr)
53
60
  _warned_fallback = True
54
61
 
55
62
 
@@ -101,6 +108,13 @@ def _save_state(fname: str, data: dict) -> None:
101
108
  (paths.state_dir() / fname).write_text(json.dumps(data, indent=2) + "\n", encoding="utf-8")
102
109
 
103
110
 
111
+ def _save_generated_fallback(name: str, text: str, reason: str) -> None:
112
+ fallback = Path.cwd() / ("%s.SKILL.md" % name)
113
+ fallback.write_text(text, encoding="utf-8")
114
+ out.warn("not installed: %s" % reason)
115
+ out.info("generated skill saved to %s" % _tilde(fallback))
116
+
117
+
104
118
  def _install_generated(name: str, text: str) -> None:
105
119
  """Write a generated SKILL.md to a tempdir and install it as `name`.
106
120
 
@@ -108,7 +122,19 @@ def _install_generated(name: str, text: str) -> None:
108
122
  must not be allowed to propagate out of the ``with`` block and delete it —
109
123
  that would discard an LLM generation the user paid for, with nothing on disk
110
124
  to recover. On a refusal, save it beside the cwd and say where it went.
125
+
126
+ ``install_from_path`` refuses to overwrite a *pinned* name, but silently
127
+ replaces an unpinned one — the common case, since it doubles as the
128
+ ``boost import``/``reinstall`` path. Ask before doing that here, so
129
+ ``distill``/``infer``/``absorb --install`` don't quietly destroy an
130
+ existing install and relabel its lock provenance ``local``.
111
131
  """
132
+ owner = store.existing_skill_owner(name)
133
+ if owner and not out.confirm(
134
+ "%s is already installed from %s — replace it?" % (name, owner)):
135
+ _save_generated_fallback(
136
+ name, text, "%s is already installed from %s" % (name, owner))
137
+ return
112
138
  with tempfile.TemporaryDirectory(prefix="boost-gen-") as td:
113
139
  src = Path(td) / name
114
140
  src.mkdir()
@@ -116,12 +142,9 @@ def _install_generated(name: str, text: str) -> None:
116
142
  try:
117
143
  res = store.install_from_path(src, name=name, tap_label="local")
118
144
  except BoostError as err:
119
- fallback = Path.cwd() / ("%s.SKILL.md" % name)
120
- fallback.write_text(text, encoding="utf-8")
121
- out.warn("not installed: %s" % err.message)
122
- out.info("generated skill saved to %s" % _tilde(fallback))
145
+ _save_generated_fallback(name, text, err.message)
123
146
  return
124
- out.ok("installed %s → %s" % (name, _tilde(res.dest)))
147
+ out.ok("%s %s → %s" % ("replaced" if owner else "installed", name, _tilde(res.dest)))
125
148
  if res.linked:
126
149
  out.info(out.role("linked into: %s" % ", ".join(res.linked), "muted"))
127
150
 
@@ -553,7 +576,7 @@ def cmd_absorb(argv: list[str]) -> int:
553
576
  description="Turn recurring chat-history patterns into a skill")
554
577
  ap.add_argument("--history", metavar="PATH",
555
578
  help="history .jsonl file or directory of them")
556
- ap.add_argument("--limit", type=int, default=5, metavar="N",
579
+ ap.add_argument("--limit", type=util.positive_int, default=5, metavar="N",
557
580
  help="max patterns to absorb (default: 5)")
558
581
  ap.add_argument("--install", action="store_true",
559
582
  help="install the generated skill")
@@ -584,10 +607,14 @@ def cmd_absorb(argv: list[str]) -> int:
584
607
  return 0
585
608
 
586
609
  name = "absorbed-patterns"
587
- out.heading("recurring patterns from %d history file(s)" % len(files))
610
+ # Without --install, stdout carries the generated SKILL.md (`boost absorb
611
+ # > SKILL.md`), so this report must not land ahead of it there.
612
+ report_stream = None if args.install else sys.stderr
613
+ out.heading("recurring patterns from %d history file(s)" % len(files),
614
+ stream=report_stream)
588
615
  out.table([(p, "%dx" % n) for p, n in patterns],
589
- headers=("PATTERN", "SEEN"))
590
- print()
616
+ headers=("PATTERN", "SEEN"), stream=report_stream)
617
+ print(file=report_stream)
591
618
 
592
619
  text = _absorb_ai(name, patterns) if ai.available() else None
593
620
  if text is None:
@@ -879,7 +906,8 @@ def cmd_context(argv: list[str]) -> int:
879
906
  return 0
880
907
  # apply
881
908
  if not state.get("enabled"):
882
- out.warn("context is disabled (`boost context enable`) — applying anyway")
909
+ out.warn("context is disabled (`boost context enable`) — applying anyway",
910
+ stream=sys.stderr)
883
911
  return _context_apply(state)
884
912
 
885
913
 
@@ -1183,7 +1211,7 @@ def cmd_chat(argv: list[str]) -> int:
1183
1211
  description="Ask about skills in plain language")
1184
1212
  ap.add_argument("question", nargs="*", metavar="QUESTION",
1185
1213
  help="ask once and exit; omit for an interactive session")
1186
- ap.add_argument("-k", "--limit", type=int, default=chat_engine.TOP_K,
1214
+ ap.add_argument("-k", "--limit", type=util.positive_int, default=chat_engine.TOP_K,
1187
1215
  metavar="N", help="candidate skills to consider (default %d)"
1188
1216
  % chat_engine.TOP_K)
1189
1217
  ap.add_argument("--no-sources", action="store_true",
@@ -410,14 +410,7 @@ def cmd_install(argv: list[str]) -> int:
410
410
  multi = multi or len(entries) > 1
411
411
 
412
412
  if args.dry_run:
413
- # TWO lists, because the three kinds do not reach the same agents.
414
- # Rules and workflows materialize into every enabled agent's dotdir,
415
- # Gemini included. A skill is symlinked only into the agents that take
416
- # links — Gemini reads the canonical store directly and is deliberately
417
- # never linked (see agents.linking_agents). One list for both is how
418
- # `--dry-run` came to promise a `~/.gemini/skills` symlink that the real
419
- # install has never created.
420
- targets = [a for a in agents.enabled_agents() if not only or a in only]
413
+ from ..core import mcpdecl, mcphost
421
414
  link_targets = [a for a in agents.linking_agents()
422
415
  if not only or a in only]
423
416
  native_targets = [a for a in agents.native_store_agents()
@@ -427,17 +420,36 @@ def cmd_install(argv: list[str]) -> int:
427
420
  raise BoostError(
428
421
  "there is no project here to install into",
429
422
  hint="cd into a repo, or drop --local to install for your user")
423
+ # materializing_agents(base), not enabled_agents(): a rule/workflow
424
+ # only reaches an agent whose file format is known (agents.py), and at
425
+ # project scope the *repo-local* dotdirs (agents_for_scope's project
426
+ # branch), not the user config every other scope writes into.
427
+ mbase = pbase if args.scope == scopes.SCOPE_PROJECT else None
428
+ mat_targets = [a for a in agents.materializing_agents(mbase)
429
+ if not only or a in only]
430
+ offer_mcp = not args.no_mcp and not os.environ.get("BOOST_NO_MCP_OFFER")
431
+ mcp_hosts = [h for h in mcphost.hosts() if shutil.which(mcphost.cli(h))] \
432
+ or mcphost.hosts()
430
433
  for e in entries:
431
434
  if args.scope == scopes.SCOPE_PROJECT and e.get("kind", "skill") == "skill":
432
435
  seen = projectlock.get_skill(pbase, e["name"])
433
436
  out.info("would %s %s v%s from %s into %s"
434
437
  % ("reinstall" if seen else "install", e["name"],
435
438
  e["version"], e["tap"], _tilde(pbase)))
436
- for agent_name, sdir in agents.enabled_agents().items():
439
+ # agents_for_scope(pbase), not enabled_agents(): project scope
440
+ # copies into each agent's *repo-local* dotdir, which excludes
441
+ # Antigravity CLI (its layout is two levels under ~/.gemini and
442
+ # has no known project-local path — see agents.project_agents).
443
+ for agent_name, sdir in agents.agents_for_scope(pbase).items():
437
444
  if only and agent_name not in only:
438
445
  continue
439
446
  out.info(" copy → %s"
440
447
  % _tilde(scopes.skill_target(sdir, e["name"], base=pbase)))
448
+ if offer_mcp:
449
+ for row in mcpdecl.registrable(
450
+ store.declared_mcp_servers(store.source_dir_for(e))):
451
+ out.info(" mcp → record %s in %s"
452
+ % (row["name"], mcpdecl.SIDECAR))
441
453
  continue
442
454
  if e.get("kind") in ("rule", "workflow"):
443
455
  k = e["kind"]
@@ -450,7 +462,7 @@ def cmd_install(argv: list[str]) -> int:
450
462
  out.info("would %s %s %s v%s from %s (%s)" % (verb, k, e["name"],
451
463
  e["version"], e["tap"],
452
464
  where))
453
- out.info(" materialize → %s" % (" · ".join(targets)
465
+ out.info(" materialize → %s" % (" · ".join(mat_targets)
454
466
  or "(no enabled agents)"))
455
467
  continue
456
468
  verb = "upgrade" if lockfile.get_skill(e["name"]) else "install"
@@ -466,6 +478,12 @@ def cmd_install(argv: list[str]) -> int:
466
478
  out.info(" available to %s (reads the store directly)"
467
479
  % " · ".join(agents.display_name(a)
468
480
  for a in native_targets))
481
+ if offer_mcp:
482
+ for row in mcpdecl.registrable(
483
+ store.declared_mcp_servers(store.source_dir_for(e))):
484
+ out.info(" mcp → offer to register %s with %s"
485
+ % (row["name"], " · ".join(mcphost.label(h)
486
+ for h in mcp_hosts)))
469
487
  out.info("dry run — nothing was changed")
470
488
  return 1 if failed else 0
471
489
 
@@ -1412,6 +1430,8 @@ def _import_root(root: Path, name: str | None, do_all: bool,
1412
1430
  continue
1413
1431
  out.ok("imported %s v%s (score %d/100)" % (res.name, e["version"],
1414
1432
  res.score))
1433
+ _warn_injection(res)
1434
+ _warn_secrets(res)
1415
1435
  imported += 1
1416
1436
  out.info("Imported %s" % _plural(imported, "skill"))
1417
1437
  return 1 if refused else 0
@@ -1652,6 +1672,8 @@ def cmd_export(argv: list[str]) -> int:
1652
1672
  ap.add_argument("-o", "--out", metavar="OUT", help="output archive path")
1653
1673
  ap.add_argument("--zip", action="store_true",
1654
1674
  help="build a .zip instead of .tar.gz")
1675
+ ap.add_argument("--force", action="store_true",
1676
+ help="overwrite OUT if it already exists")
1655
1677
  args = ap.parse_args(argv)
1656
1678
  installed = lockfile.installed()
1657
1679
  names = args.names or sorted(installed)
@@ -1683,6 +1705,10 @@ def cmd_export(argv: list[str]) -> int:
1683
1705
  ext = ".zip" if args.zip else ".tar.gz"
1684
1706
  dest = paths.expand(args.out) if args.out else Path(
1685
1707
  "boost-skills-%s%s" % (stamp, ext))
1708
+ if dest.exists() and not args.force:
1709
+ raise BoostError("%s already exists" % _tilde(dest),
1710
+ hint="pass --force to overwrite, or choose a "
1711
+ "different -o path")
1686
1712
  manifest = _boostfile_text(chosen, via="boost export")
1687
1713
  try:
1688
1714
  if args.zip:
@@ -13,6 +13,7 @@ import hashlib
13
13
  import json
14
14
  import os
15
15
  import re
16
+ import sys
16
17
  from contextlib import suppress
17
18
  from datetime import UTC, datetime, timedelta
18
19
  from itertools import starmap
@@ -286,23 +287,42 @@ def _parse_ts(iso: str) -> datetime | None:
286
287
  return None
287
288
 
288
289
 
289
- def _fingerprint() -> tuple[str, list[str]]:
290
- """(sha256 hexdigest, component lines). Deterministic: the same lock file
291
- and tap commits always produce the same hash."""
292
- comps = sorted("%s:%s" % (n, e.get("sha256", ""))
290
+ def _q_suffix(e: dict) -> str:
291
+ # Quarantine de-arms a component (a poisoned rule stops being materialized,
292
+ # a skill's links are removed) without deleting its lock entry, so the
293
+ # digest must move too or a quarantined-then-released environment reads
294
+ # as unchanged. Suffixed rather than dropped: dropping the line would make
295
+ # quarantine indistinguishable from uninstall.
296
+ return ":q" if e.get("quarantined") else ""
297
+
298
+
299
+ def _fingerprint() -> tuple[str, list[str], list[str]]:
300
+ """(sha256 hexdigest, component lines, uncloned tap names).
301
+
302
+ Deterministic: the same lock file and tap commits always produce the same
303
+ hash. An uncloned tap hashes as an empty commit rather than being skipped
304
+ silently — its name is returned separately so callers can say the digest
305
+ is incomplete instead of passing it off as a real measurement."""
306
+ comps = sorted("%s:%s%s" % (n, e.get("sha256", ""), _q_suffix(e))
293
307
  for n, e in lockfile.installed().items())
294
308
  # Rules and workflows are part of the environment the agent runs on —
295
309
  # a poisoned CLAUDE.md rule must change the fingerprint. Kind-prefixed so
296
310
  # a skill-only environment's fingerprint is unchanged by this addition.
297
- comps += sorted("%s/%s:%s" % (kind, n, e.get("sha256", ""))
311
+ comps += sorted("%s/%s:%s%s" % (kind, n, e.get("sha256", ""), _q_suffix(e))
298
312
  for kind, section in lockfile.all_installed().items()
299
313
  if kind != "skill" for n, e in section.items())
300
- comps += sorted("%s:%s" % (t.name,
301
- gitutil.head_commit(t.path)
302
- if t.is_cloned and gitutil.has_git() else "")
303
- for t in registry.list_taps())
314
+ uncloned = []
315
+ tap_lines = []
316
+ for t in registry.list_taps():
317
+ if t.is_cloned and gitutil.has_git():
318
+ commit = gitutil.head_commit(t.path)
319
+ else:
320
+ commit = ""
321
+ uncloned.append(t.name)
322
+ tap_lines.append("%s:%s" % (t.name, commit))
323
+ comps += sorted(tap_lines)
304
324
  digest = hashlib.sha256("\n".join(comps).encode()).hexdigest()
305
- return digest, comps
325
+ return digest, comps, sorted(uncloned)
306
326
 
307
327
 
308
328
  def _norm_token(tok: str) -> str:
@@ -738,8 +758,8 @@ def cmd_lint(argv):
738
758
  help="installed skill name(s), or a path to a skill "
739
759
  "directory / its SKILL.md")
740
760
  ap.add_argument("--tap", metavar="TAP", help="lint every skill in a tap's clone")
741
- ap.add_argument("--min", type=int, default=40, dest="min_score", metavar="N",
742
- help="minimum passing score (default 40)")
761
+ ap.add_argument("--min", type=util.score_int, default=40, dest="min_score", metavar="N",
762
+ help="minimum passing score, 0-100 (default 40)")
743
763
  ap.add_argument("--json", action="store_true")
744
764
  args = ap.parse_args(argv)
745
765
 
@@ -906,10 +926,10 @@ def cmd_fingerprint(argv):
906
926
  ap.add_argument("--json", action="store_true")
907
927
  args = ap.parse_args(argv)
908
928
 
909
- digest, comps = _fingerprint()
929
+ digest, comps, incomplete = _fingerprint()
910
930
  if args.json:
911
931
  print(json.dumps({"fingerprint": digest, "short": digest[:16],
912
- "components": comps}))
932
+ "components": comps, "incomplete": incomplete}))
913
933
  return 0
914
934
  out.heading("environment fingerprint")
915
935
  print(" " + out.role(digest[:16], "accent", bold=True)
@@ -917,6 +937,9 @@ def cmd_fingerprint(argv):
917
937
  if args.verbose:
918
938
  out.table([tuple(line.split(":", 1)) for line in comps],
919
939
  headers=("COMPONENT", "DIGEST/COMMIT"))
940
+ for name in incomplete:
941
+ out.warn("tap %s not cloned — fingerprint incomplete (boost update)"
942
+ % name, stream=sys.stderr)
920
943
  return 0
921
944
 
922
945
 
@@ -1182,7 +1205,7 @@ def cmd_changelog(argv):
1182
1205
  prog="boost changelog",
1183
1206
  description="Show a skill's upstream change history")
1184
1207
  ap.add_argument("name", metavar="NAME")
1185
- ap.add_argument("-n", type=int, default=20, metavar="N",
1208
+ ap.add_argument("-n", type=util.positive_int, default=20, metavar="N",
1186
1209
  help="number of entries (default 20)")
1187
1210
  args = ap.parse_args(argv)
1188
1211
 
@@ -14,6 +14,7 @@ import json
14
14
  import re
15
15
  import time
16
16
  from contextlib import suppress
17
+ from itertools import chain
17
18
  from pathlib import Path
18
19
  from typing import Any
19
20
 
@@ -39,6 +40,7 @@ from ..errors import BoostError
39
40
  from ._common import (
40
41
  _iter_installed,
41
42
  _iter_installed_all,
43
+ _not_installed_hint,
42
44
  _require_lock_integrity,
43
45
  _s,
44
46
  _shadowed_kinds,
@@ -357,8 +359,10 @@ def cmd_verify(argv):
357
359
  unknown = [n for n in args.names
358
360
  if lockfile.find_any(n) is None and n not in pskills]
359
361
  if unknown:
362
+ candidates = list(chain.from_iterable(
363
+ lockfile.all_installed().values())) + list(pskills)
360
364
  raise BoostError("not installed: %s" % ", ".join(unknown),
361
- hint="see what is with `boost list`")
365
+ hint=_not_installed_hint(unknown, candidates))
362
366
  user_names = [n for n in (args.names or [])
363
367
  if lockfile.find_any(n) is not None]
364
368
 
@@ -129,7 +129,7 @@ def cmd_tap(argv) -> int:
129
129
  p.add_argument("--type", choices=("skill", "rule", "workflow"),
130
130
  help="with --catalog: restrict to one item type")
131
131
  p.add_argument("--category", help="with --catalog: restrict to one category")
132
- p.add_argument("--limit", type=int, metavar="N",
132
+ p.add_argument("--limit", type=util.positive_int, metavar="N",
133
133
  help="with --catalog: only the top N registries by est. size")
134
134
  p.add_argument("--include-lists", action="store_true",
135
135
  help="with --catalog: also tap awesome-list/index repos")
@@ -98,14 +98,27 @@ def cmd_cohort(argv) -> int:
98
98
  for s in skills:
99
99
  if not catalog.find(s):
100
100
  out.warn("skill %r not found in any tap (kept anyway)" % s)
101
- cohorts[args.name] = {"skills": skills, "percent": args.percent,
102
- "created": util.now_iso(), "creator": user}
101
+ existing = cohorts.get(args.name)
102
+ cohorts[args.name] = {
103
+ "skills": skills, "percent": args.percent,
104
+ # A second `create` over an existing cohort is a replacement, not
105
+ # a new cohort — preserving `created` is what makes the "updated"
106
+ # wording below honest instead of resetting a rollout's history.
107
+ "created": existing["created"] if existing else util.now_iso(),
108
+ "creator": user}
103
109
  _save_cohorts(cohorts)
104
110
  journal.log("cohort", args.name, op="create", percent=args.percent)
105
111
  member = _is_member(user, args.name, args.percent)
106
- out.ok("created cohort %s (%d%% rollout, %d skill%s) — you are %s"
107
- % (args.name, args.percent, len(skills), _s(len(skills)),
108
- "IN" if member else "OUT"))
112
+ if existing:
113
+ out.ok("updated cohort %s (was %d%% / %d skill%s) — now %d%% "
114
+ "rollout, %d skill%s — you are %s"
115
+ % (args.name, existing["percent"], len(existing["skills"]),
116
+ _s(len(existing["skills"])), args.percent, len(skills),
117
+ _s(len(skills)), "IN" if member else "OUT"))
118
+ else:
119
+ out.ok("created cohort %s (%d%% rollout, %d skill%s) — you are %s"
120
+ % (args.name, args.percent, len(skills), _s(len(skills)),
121
+ "IN" if member else "OUT"))
109
122
  return 0
110
123
 
111
124
  if args.action == "delete":
@@ -268,6 +281,12 @@ def cmd_profile(argv) -> int:
268
281
 
269
282
  if args.action == "save":
270
283
  installed = lockfile.installed()
284
+ was = None
285
+ if _profile_path(args.name).exists():
286
+ try:
287
+ was = len(_load_profile(args.name).get("skills", {}))
288
+ except BoostError:
289
+ was = None # unreadable old profile: still fine to replace
271
290
  profile = {"name": args.name, "saved": util.now_iso(), "user": util.user(),
272
291
  "skills": {n: {"tap": e.get("tap", "local"),
273
292
  "version": e.get("version", "0.0.0")}
@@ -275,8 +294,12 @@ def cmd_profile(argv) -> int:
275
294
  paths.ensure_dirs()
276
295
  _profile_path(args.name).write_text(json.dumps(profile, indent=2) + "\n", encoding="utf-8")
277
296
  journal.log("profile", args.name, op="save", skills=len(installed))
278
- out.ok("saved profile %s (%d skill%s)"
279
- % (args.name, len(installed), _s(len(installed))))
297
+ if was is not None:
298
+ out.ok("updated profile %s (was %d skill%s, now %d skill%s)"
299
+ % (args.name, was, _s(was), len(installed), _s(len(installed))))
300
+ else:
301
+ out.ok("saved profile %s (%d skill%s)"
302
+ % (args.name, len(installed), _s(len(installed))))
280
303
  n_rules = len(lockfile.installed_rules())
281
304
  n_workflows = len(lockfile.installed_workflows())
282
305
  if n_rules or n_workflows:
@@ -19,6 +19,7 @@ that ship in the same GitHub registries:
19
19
  """
20
20
  from __future__ import annotations
21
21
 
22
+ import difflib
22
23
  import hashlib
23
24
  import json
24
25
  import operator
@@ -573,6 +574,22 @@ def _suggestions(scored, limit: int = 3) -> list[str]:
573
574
  return labels
574
575
 
575
576
 
577
+ def _fuzzy_suggestions(query: str, entries: list[dict], limit: int = 3) -> list[str]:
578
+ """Edit-distance fallback for a miss ``search`` scored nothing for.
579
+
580
+ ``search`` needs a shared token or substring, so a one-character typo like
581
+ 'brainstormng' for 'brainstorming' shares no aligned substring with it and
582
+ scores zero — the near-miss gets no hint while unrelated nonsense that
583
+ happens to share a token gets three. ``difflib`` grades whole-string
584
+ similarity instead, so it catches exactly the case token/substring scoring
585
+ misses. Names only, not the tap-qualifying dance ``_suggestions`` does for
586
+ scored hits: a query this close to nothing never produced a match to
587
+ qualify in the first place.
588
+ """
589
+ names = sorted({e["name"] for e in entries})
590
+ return difflib.get_close_matches(query, names, n=limit)
591
+
592
+
576
593
  def resolve_one(name: str, path: str | None = None) -> dict:
577
594
  """Find exactly one entry or raise with a helpful hint.
578
595
 
@@ -612,15 +629,41 @@ def resolve_one(name: str, path: str | None = None) -> dict:
612
629
  hint="`tap:skill` picks the registry; to pick a copy inside "
613
630
  "one, use --path: `boost install %s:%s --path %s`"
614
631
  % (qualifier, bare.rsplit("/", 1)[-1], bare))
632
+ # A qualified miss searches the BARE name, restricted to the taps the
633
+ # qualifier actually selects — never the whole `tap:skill` string.
634
+ # Scoring the full string lets the tap's own tokens dominate (a typo'd
635
+ # `neolabhq/context-engineering-kit:brainstorm` scored on "context"
636
+ # and "engineering", never "brainstorm", which that tap ships) and,
637
+ # when the qualifier itself is wrong, misreports a missing *skill*
638
+ # instead of naming the tap that does not exist.
639
+ query, search_entries = name, None
640
+ if qualifier is not None:
641
+ known = [t.name for t in registry.list_taps()
642
+ if tap_matches(t.name, qualifier)]
643
+ if not known:
644
+ shipped_by = sorted({e["tap"] for e in all_entries()
645
+ if e["name"] == bare})
646
+ raise BoostError(
647
+ "no tap named %r" % qualifier,
648
+ hint=("%r is shipped by: %s" % (bare, ", ".join(shipped_by))
649
+ if shipped_by else None))
650
+ query = bare
651
+ search_entries = [e for e in all_entries() if e["tap"] in known]
615
652
  # The whole scored list, not a pre-sliced top 3 — see _suggestions:
616
653
  # slicing first collapses to one suggestion exactly when a registry
617
654
  # mirrors a skill per agent, which is the case it exists to handle.
618
- scored = search(name)
655
+ scored = search(query, entries=search_entries)
619
656
  hint = None
620
657
  if scored:
621
658
  hint = "closest matches: " + ", ".join(_suggestions(scored))
622
- elif not registry.list_taps():
623
- hint = "no taps configured — start with `boost tap --defaults`"
659
+ else:
660
+ fuzzy = _fuzzy_suggestions(
661
+ query, search_entries if search_entries is not None
662
+ else all_entries())
663
+ if fuzzy:
664
+ hint = "closest matches: " + ", ".join(fuzzy)
665
+ elif not registry.list_taps():
666
+ hint = "no taps configured — start with `boost tap --defaults`"
624
667
  raise BoostError("no skill named %r in any tap" % name, hint=hint)
625
668
  if len(matches) > 1:
626
669
  # `name` may already be tap-qualified; hints must re-qualify the BARE