boost-skill-cli 1.2.88__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 (958) hide show
  1. {boost_skill_cli-1.2.88/boost_skill_cli.egg-info → boost_skill_cli-1.2.89}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/configuration.py +7 -1
  4. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/hooks.py +2 -2
  5. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/intelligence.py +23 -7
  6. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/quality.py +3 -3
  7. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/taps.py +1 -1
  8. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/store.py +17 -0
  9. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/util.py +19 -0
  10. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  11. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/commands.html +1 -1
  12. boost_skill_cli-1.2.89/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +81 -0
  13. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +1 -1
  14. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +3 -3
  15. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap.html +45 -5
  16. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_chat.py +8 -0
  17. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_configuration.py +20 -0
  18. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_hooks.py +11 -0
  19. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_intelligence.py +33 -0
  20. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_quality.py +17 -0
  21. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_taps.py +8 -0
  22. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_store.py +29 -0
  23. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_util.py +24 -0
  24. boost_skill_cli-1.2.88/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -42
  25. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.gitattributes +0 -0
  26. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.gitignore +0 -0
  27. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.gitleaks.toml +0 -0
  28. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.htmlvalidate.json +0 -0
  29. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.lighthouserc.json +0 -0
  30. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.lycheeignore +0 -0
  31. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.markdownlint-cli2.jsonc +0 -0
  32. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.pre-commit-config.yaml +0 -0
  33. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.stylelintrc.json +0 -0
  34. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.vale/styles/boost/AIWriting.yml +0 -0
  35. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.vale/styles/boost/Terminology.yml +0 -0
  36. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  37. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/.vale.ini +0 -0
  38. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/CLAUDE.md +0 -0
  39. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/CODE_OF_CONDUCT.md +0 -0
  40. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/CONTRIBUTING.md +0 -0
  41. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/DCO +0 -0
  42. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/GOVERNANCE.md +0 -0
  43. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/LICENSE +0 -0
  44. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/MAINTAINERS.md +0 -0
  45. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/MANIFEST.in +0 -0
  46. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/Makefile +0 -0
  47. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/README.md +0 -0
  48. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/SECURITY.md +0 -0
  49. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/SUPPORT.md +0 -0
  50. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost +0 -0
  51. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/__init__.py +0 -0
  52. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/__main__.py +0 -0
  53. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/cli.py +0 -0
  54. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/cliparse.py +0 -0
  55. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/__init__.py +0 -0
  56. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/_common.py +0 -0
  57. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/bmad.py +0 -0
  58. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/discovery.py +0 -0
  59. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/info.py +0 -0
  60. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/pkg.py +0 -0
  61. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/quickstart.py +0 -0
  62. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/run.py +0 -0
  63. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/safety.py +0 -0
  64. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/commands/team.py +0 -0
  65. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/__init__.py +0 -0
  66. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/adapters.py +0 -0
  67. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/agents.py +0 -0
  68. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/ai.py +0 -0
  69. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/aihost.py +0 -0
  70. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/bmad.py +0 -0
  71. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/bootstrap.py +0 -0
  72. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/browse.py +0 -0
  73. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/builtin.py +0 -0
  74. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/capabilities.py +0 -0
  75. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/catalog.py +0 -0
  76. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/catalogbundle.py +0 -0
  77. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/chat.py +0 -0
  78. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/claude_settings.py +0 -0
  79. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/complete.py +0 -0
  80. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/config.py +0 -0
  81. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/dense.py +0 -0
  82. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/ed25519.py +0 -0
  83. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/embed.py +0 -0
  84. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/faithfulness.py +0 -0
  85. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/frontmatter.py +0 -0
  86. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/gitutil.py +0 -0
  87. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/hookhost.py +0 -0
  88. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/imperative.py +0 -0
  89. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/injectscan.py +0 -0
  90. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/installscan.py +0 -0
  91. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/integrity.py +0 -0
  92. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/journal.py +0 -0
  93. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/localembed.py +0 -0
  94. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/lockfile.py +0 -0
  95. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/logs.py +0 -0
  96. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/mcp.py +0 -0
  97. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/mcpdecl.py +0 -0
  98. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/mcphost.py +0 -0
  99. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/minisign.py +0 -0
  100. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/nethttp.py +0 -0
  101. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/output.py +0 -0
  102. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/paths.py +0 -0
  103. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/policy.py +0 -0
  104. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/projectlock.py +0 -0
  105. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/provenance.py +0 -0
  106. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/rag.py +0 -0
  107. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/registry.py +0 -0
  108. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/resolve.py +0 -0
  109. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/rules.py +0 -0
  110. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/scopes.py +0 -0
  111. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/secretscan.py +0 -0
  112. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/selfupdate.py +0 -0
  113. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/serve.py +0 -0
  114. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/shards.py +0 -0
  115. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/stackprobe.py +0 -0
  116. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/staleness.py +0 -0
  117. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/trustaudit.py +0 -0
  118. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/typedvalue.py +0 -0
  119. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/typosquat.py +0 -0
  120. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/updatediff.py +0 -0
  121. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/core/workflows.py +0 -0
  122. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/data/registries.json +0 -0
  123. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/data/rules/boost-first.mdc +0 -0
  124. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/errors.py +0 -0
  125. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_cli/spin.py +0 -0
  126. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_langchain/__init__.py +0 -0
  127. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_langchain/_compat.py +0 -0
  128. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_langchain/graph.py +0 -0
  129. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_langchain/loader.py +0 -0
  130. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_langchain/py.typed +0 -0
  131. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_langchain/retriever.py +0 -0
  132. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  133. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  134. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  135. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/requires.txt +0 -0
  136. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/boost_skill_cli.egg-info/top_level.txt +0 -0
  137. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/codecov.yml +0 -0
  138. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/.claude/settings.local.json +0 -0
  139. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/DEBUGGING.md +0 -0
  140. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/adapters.html +0 -0
  141. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/architecture/README.md +0 -0
  142. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/architecture/c4-components-core.md +0 -0
  143. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/architecture/c4-containers.md +0 -0
  144. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/architecture/c4-context.md +0 -0
  145. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/architecture/c4-dynamic-install.md +0 -0
  146. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/bmad.md +0 -0
  147. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/gifs/distill.gif +0 -0
  148. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/gifs/doctor.gif +0 -0
  149. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/gifs/explain.gif +0 -0
  150. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/gifs/hooks.gif +0 -0
  151. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/gifs/install.gif +0 -0
  152. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/gifs/pulse.gif +0 -0
  153. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/gifs/search.gif +0 -0
  154. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/gifs/tap.gif +0 -0
  155. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/tapes/distill.tape +0 -0
  156. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/tapes/doctor.tape +0 -0
  157. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/tapes/explain.tape +0 -0
  158. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/tapes/hooks.tape +0 -0
  159. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/tapes/install.tape +0 -0
  160. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/tapes/pulse.tape +0 -0
  161. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/tapes/search.tape +0 -0
  162. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel/tapes/tap.tape +0 -0
  163. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/carousel.html +0 -0
  164. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/chat.html +0 -0
  165. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/code-review.md +0 -0
  166. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/commit-audit.md +0 -0
  167. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/demo-index.json +0 -0
  168. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/demo.gif +0 -0
  169. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/demo.html +0 -0
  170. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/demo.tape +0 -0
  171. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/dependencies.md +0 -0
  172. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/design-roadmap.html +0 -0
  173. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/eval-latest.json +0 -0
  174. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/eval.html +0 -0
  175. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/index.html +0 -0
  176. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/langchain.html +0 -0
  177. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/mcp-hub.html +0 -0
  178. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/openssf-badge.md +0 -0
  179. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/openssf-playbook.md +0 -0
  180. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/rag-architecture.md +0 -0
  181. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D01.md +0 -0
  182. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D02.md +0 -0
  183. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D03.md +0 -0
  184. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D04.md +0 -0
  185. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D05.md +0 -0
  186. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D06.md +0 -0
  187. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D07.md +0 -0
  188. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D08.md +0 -0
  189. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D09.md +0 -0
  190. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D10.md +0 -0
  191. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D11.md +0 -0
  192. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D12.md +0 -0
  193. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D13.md +0 -0
  194. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D14.md +0 -0
  195. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D15.md +0 -0
  196. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D16.md +0 -0
  197. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D17.md +0 -0
  198. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D18.md +0 -0
  199. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D19.md +0 -0
  200. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D20.md +0 -0
  201. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D21.md +0 -0
  202. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D22.md +0 -0
  203. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D23.md +0 -0
  204. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D24.md +0 -0
  205. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D25.md +0 -0
  206. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D26.md +0 -0
  207. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/BOOST-D27.md +0 -0
  208. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  209. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  210. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  211. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  212. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  213. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  214. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  215. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  216. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  217. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  218. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  219. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  220. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  221. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  222. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  223. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-attest-findings.md +0 -0
  224. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-audit-findings.md +0 -0
  225. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-bmad-findings.md +0 -0
  226. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-browse-findings.md +0 -0
  227. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  228. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  229. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  230. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  231. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-chat-findings.md +0 -0
  232. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  233. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  234. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  235. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-completions-findings.md +0 -0
  236. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-config-findings.md +0 -0
  237. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  238. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-context-findings.md +0 -0
  239. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  240. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-create-findings.md +0 -0
  241. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  242. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-deps-findings.md +0 -0
  243. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-discover-findings.md +0 -0
  244. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  245. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  246. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-drift-findings.md +0 -0
  247. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  248. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-edit-findings.md +0 -0
  249. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  250. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-explain-findings.md +0 -0
  251. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-export-findings.md +0 -0
  252. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  253. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  254. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  255. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  256. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  257. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-health-findings.md +0 -0
  258. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  259. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  260. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-import-findings.md +0 -0
  261. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-index-findings.md +0 -0
  262. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  263. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  264. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-install-findings.md +0 -0
  265. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  266. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  267. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-lint-findings.md +0 -0
  268. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-log-findings.md +0 -0
  269. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  270. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  271. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  272. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  273. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  274. {boost_skill_cli-1.2.88 → 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
  275. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  276. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  277. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  278. {boost_skill_cli-1.2.88 → 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
  279. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-policy-findings.md +0 -0
  280. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-preview-findings.md +0 -0
  281. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-profile-findings.md +0 -0
  282. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  283. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  284. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  285. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  286. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  287. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  288. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  289. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  290. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  291. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-replay-findings.md +0 -0
  292. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-root-findings.md +0 -0
  293. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  294. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-run-findings.md +0 -0
  295. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  296. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-search-findings.md +0 -0
  297. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  298. {boost_skill_cli-1.2.88 → 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
  299. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  300. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  301. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  302. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
  303. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  304. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-sync-findings.md +0 -0
  305. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-tag-findings.md +0 -0
  306. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  307. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-tap-findings.md +0 -0
  308. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-taps-findings.md +0 -0
  309. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  310. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-test-findings.md +0 -0
  311. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-trust-findings.md +0 -0
  312. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  313. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  314. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-untap-findings.md +0 -0
  315. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-update-findings.md +0 -0
  316. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  317. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-verify-findings.md +0 -0
  318. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/audit-who-findings.md +0 -0
  319. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  320. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  321. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  322. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  323. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  324. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  325. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/boost-first-rule.md +0 -0
  326. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  327. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  328. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/branch-current-gate.md +0 -0
  329. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  330. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  331. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  332. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  333. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  334. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  335. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  336. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
  337. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  338. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  339. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  340. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  341. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  342. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  343. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  344. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  345. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  346. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/cli-command-audit.md +0 -0
  347. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  348. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  349. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  350. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  351. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/command-carousel-page.md +0 -0
  352. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  353. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  354. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  355. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  356. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
  357. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  358. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  359. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  360. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  361. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  362. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  363. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  364. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  365. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  366. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  367. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  368. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  369. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  370. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  371. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  372. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  373. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  374. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  375. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  376. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  377. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  378. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  379. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  380. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  381. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  382. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  383. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  384. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  385. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  386. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  387. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  388. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  389. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  390. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  391. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  392. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  393. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  394. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  395. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  396. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  397. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  398. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  399. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  400. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  401. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  402. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  403. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  404. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  405. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  406. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  407. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/github-community-health-files.md +0 -0
  408. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  409. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  410. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  411. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  412. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  413. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  414. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  415. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  416. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  417. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  418. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  419. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  420. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  421. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  422. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  423. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  424. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  425. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  426. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  427. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  428. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  429. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  430. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  431. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  432. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  433. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  434. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  435. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  436. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  437. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  438. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  439. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  440. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  441. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  442. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  443. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  444. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  445. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  446. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  447. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  448. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  449. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  450. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  451. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  452. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  453. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  454. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  455. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  456. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  457. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  458. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  459. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  460. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  461. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  462. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  463. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  464. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  465. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  466. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  467. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  468. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  469. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  470. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  471. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  472. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  473. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  474. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  475. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  476. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  477. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  478. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
  479. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  480. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  481. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  482. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  483. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  484. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  485. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  486. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  487. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/openssf-playbook.md +0 -0
  488. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/openssf-silver.md +0 -0
  489. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  490. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  491. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  492. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  493. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  494. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  495. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  496. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  497. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  498. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  499. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  500. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  501. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  502. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  503. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  504. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  505. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  506. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  507. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  508. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  509. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
  510. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  511. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  512. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  513. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  514. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  515. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  516. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  517. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  518. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  519. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  520. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  521. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  522. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/relicence-apache-2.md +0 -0
  523. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  524. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  525. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  526. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  527. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  528. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  529. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  530. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  531. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  532. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  533. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  534. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  535. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  536. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  537. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  538. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  539. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  540. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  541. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  542. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  543. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  544. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  545. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  546. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  547. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  548. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  549. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  550. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  551. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  552. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  553. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  554. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  555. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  556. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  557. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  558. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  559. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  560. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  561. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  562. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/shrink-the-published-index.md +0 -0
  563. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  564. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  565. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  566. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  567. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  568. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  569. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  570. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  571. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  572. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  573. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  574. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  575. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  576. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  577. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  578. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  579. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  580. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  581. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  582. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  583. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  584. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  585. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  586. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  587. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  588. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  589. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  590. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  591. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  592. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  593. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  594. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  595. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  596. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  597. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  598. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  599. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  600. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  601. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  602. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  603. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  604. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  605. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  606. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/workspace-scope-install.md +0 -0
  607. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/zip-strict-audit.md +0 -0
  608. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  609. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  610. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/security-design.md +0 -0
  611. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/semantic-search.md +0 -0
  612. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  613. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/verifying-releases.md +0 -0
  614. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/vex/meta.md +0 -0
  615. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/vex/openvex.json +0 -0
  616. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  617. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  618. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  619. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  620. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/eslint.config.mjs +0 -0
  621. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/README.md +0 -0
  622. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/__init__.py +0 -0
  623. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/baseline.json +0 -0
  624. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/faithfulness.py +0 -0
  625. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/golden_set.json +0 -0
  626. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/make_corpus.py +0 -0
  627. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/make_golden.py +0 -0
  628. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/metrics.py +0 -0
  629. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/publish_golden_dataset.py +0 -0
  630. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/evals/run_evals.py +0 -0
  631. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/examples/README.md +0 -0
  632. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/examples/adapt-demo.sh +0 -0
  633. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/examples/boost-run-prototype.sh +0 -0
  634. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/index.html +0 -0
  635. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/noxfile.py +0 -0
  636. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/pyproject.toml +0 -0
  637. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/coverage-tools.in +0 -0
  638. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/coverage-tools.txt +0 -0
  639. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/lint-tools.in +0 -0
  640. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/lint-tools.txt +0 -0
  641. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/mutation-tools.in +0 -0
  642. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/mutation-tools.txt +0 -0
  643. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/platform-pins.lock +0 -0
  644. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/release-tools.in +0 -0
  645. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/release-tools.txt +0 -0
  646. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/test-tools.in +0 -0
  647. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/requirements/test-tools.txt +0 -0
  648. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/a11y_check.py +0 -0
  649. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/add_spdx_headers.py +0 -0
  650. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/bench_cli.sh +0 -0
  651. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/build_command_reference.py +0 -0
  652. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/build_demo_index.py +0 -0
  653. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/build_registries.py +0 -0
  654. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/build_roadmap.py +0 -0
  655. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/build_scale_corpus.py +0 -0
  656. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/build_vex.py +0 -0
  657. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/check_anchors.py +0 -0
  658. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/check_branch_current.py +0 -0
  659. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/check_dco.py +0 -0
  660. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/check_licenses.py +0 -0
  661. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/check_reproducible.py +0 -0
  662. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/check_required_checks.py +0 -0
  663. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/ensure_eval_corpus.sh +0 -0
  664. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/eval_corpus.py +0 -0
  665. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/eval_explain.py +0 -0
  666. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/eval_gate.py +0 -0
  667. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/eval_recommend.py +0 -0
  668. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/eval_retrieval.py +0 -0
  669. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/eval_stats_summary.py +0 -0
  670. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/eval_tools.py +0 -0
  671. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/import_budget.py +0 -0
  672. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/lock_toolchain.py +0 -0
  673. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/measure_near_duplicate_bound.py +0 -0
  674. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/measure_registry.py +0 -0
  675. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/mutation_gate.py +0 -0
  676. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/mutation_shards.py +0 -0
  677. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/mutation_weights.json +0 -0
  678. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/normalize_sdist.py +0 -0
  679. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/page_budget.py +0 -0
  680. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/perf_gate.py +0 -0
  681. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/post_deploy_smoke.py +0 -0
  682. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/publish_eval_json.py +0 -0
  683. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/publish_shards.py +0 -0
  684. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/release_guard.py +0 -0
  685. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/release_preflight.py +0 -0
  686. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/serve_docs.py +0 -0
  687. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/scripts/shard_plan.py +0 -0
  688. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/setup.cfg +0 -0
  689. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/sonar-project.properties +0 -0
  690. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/style/README.md +0 -0
  691. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/style/boost.css +0 -0
  692. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/style/boost.js +0 -0
  693. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/style/demo.html +0 -0
  694. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/adapt.feature +0 -0
  695. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/browse.feature +0 -0
  696. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/count.feature +0 -0
  697. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/discover.feature +0 -0
  698. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/doctor.feature +0 -0
  699. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/environment.py +0 -0
  700. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/explain.feature +0 -0
  701. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/index.feature +0 -0
  702. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/install.feature +0 -0
  703. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/list.feature +0 -0
  704. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/mcp.feature +0 -0
  705. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/search.feature +0 -0
  706. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/steps/cli_steps.py +0 -0
  707. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/steps/discovery_steps.py +0 -0
  708. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/steps/mcp_steps.py +0 -0
  709. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/bdd/features/steps/quality_steps.py +0 -0
  710. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/conftest.py +0 -0
  711. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/eval/baseline.json +0 -0
  712. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/eval/explain.jsonl +0 -0
  713. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  714. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/eval/golden-natural.jsonl +0 -0
  715. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/eval/golden.jsonl +0 -0
  716. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/eval/recommend.jsonl +0 -0
  717. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/eval/taps-scale.txt +0 -0
  718. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/eval/taps.txt +0 -0
  719. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/eval/tool_calls.jsonl +0 -0
  720. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_bmad_all_hosts.py +0 -0
  721. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_capabilities_policy.py +0 -0
  722. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_adapt.py +0 -0
  723. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_bmad.py +0 -0
  724. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_catalog.py +0 -0
  725. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_discovery.py +0 -0
  726. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_hooks_gemini.py +0 -0
  727. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_info.py +0 -0
  728. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_pane_width.py +0 -0
  729. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_pkg.py +0 -0
  730. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_quickstart.py +0 -0
  731. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_tap_pins.py +0 -0
  732. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_cli_team.py +0 -0
  733. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_everyday_loop.py +0 -0
  734. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_integrity_enforce.py +0 -0
  735. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_kind_conformance.py +0 -0
  736. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_property_parsers.py +0 -0
  737. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_run.py +0 -0
  738. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_tap_signing.py +0 -0
  739. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/functional/test_workspace_scope.py +0 -0
  740. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/README.md +0 -0
  741. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  742. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  743. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  744. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  745. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  746. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  747. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  748. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  749. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  750. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  751. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  752. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  753. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  754. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  755. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  756. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  757. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  758. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  759. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  760. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  761. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  762. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  763. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  764. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/fuzz_frontmatter.py +0 -0
  765. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/fuzz/fuzz_registry.py +0 -0
  766. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/langchain/conftest.py +0 -0
  767. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/langchain/test_graph.py +0 -0
  768. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/langchain/test_loader.py +0 -0
  769. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/langchain/test_retriever.py +0 -0
  770. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/make_fixture.py +0 -0
  771. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/perf/test_benchmarks.py +0 -0
  772. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/smoke.sh +0 -0
  773. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_a11y_check.py +0 -0
  774. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_action_pin_lockstep.py +0 -0
  775. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_adapters.py +0 -0
  776. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_adapters_multi.py +0 -0
  777. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_adapters_runner.py +0 -0
  778. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_agents.py +0 -0
  779. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_ai.py +0 -0
  780. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_aihost.py +0 -0
  781. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_bmad_core.py +0 -0
  782. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_boost_first_offer.py +0 -0
  783. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_bootstrap.py +0 -0
  784. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_bot_pr_dco.py +0 -0
  785. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_branch_current.py +0 -0
  786. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_browse.py +0 -0
  787. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_builtin.py +0 -0
  788. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_capabilities.py +0 -0
  789. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_catalog.py +0 -0
  790. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_catalogbundle.py +0 -0
  791. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_chat.py +0 -0
  792. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_check_anchors.py +0 -0
  793. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_check_dco.py +0 -0
  794. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_check_licenses.py +0 -0
  795. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_check_reproducible.py +0 -0
  796. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_claude_settings.py +0 -0
  797. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_clean_internal_cache.py +0 -0
  798. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_cli_update_shards.py +0 -0
  799. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_cliparse.py +0 -0
  800. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_codeql_analysis_key.py +0 -0
  801. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_command_reference_fresh.py +0 -0
  802. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_community_health_files.py +0 -0
  803. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_compact.py +0 -0
  804. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_complete.py +0 -0
  805. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_complete_rc_block.py +0 -0
  806. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_config.py +0 -0
  807. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_content_dedupe.py +0 -0
  808. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_content_identity.py +0 -0
  809. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_crash_redaction.py +0 -0
  810. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dedup_trust.py +0 -0
  811. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_demo_index.py +0 -0
  812. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense.py +0 -0
  813. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  814. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_embed_dedupe.py +0 -0
  815. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_entry_reuse.py +0 -0
  816. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_entry_vectors.py +0 -0
  817. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_fallback.py +0 -0
  818. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_fix_hint.py +0 -0
  819. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_progress.py +0 -0
  820. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_quantized.py +0 -0
  821. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_ready_order.py +0 -0
  822. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_shard_real_schema.py +0 -0
  823. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  824. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_shards.py +0 -0
  825. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_status.py +0 -0
  826. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_status_cheap.py +0 -0
  827. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dense_vector_dedupe.py +0 -0
  828. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_dependabot_config.py +0 -0
  829. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_distill_merge.py +0 -0
  830. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_docs_pages_linked.py +0 -0
  831. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_docsite_chrome.py +0 -0
  832. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_doctor_output_polish.py +0 -0
  833. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_ed25519.py +0 -0
  834. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_embed.py +0 -0
  835. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_embed_local.py +0 -0
  836. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_embed_truncated_response.py +0 -0
  837. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_entry_key.py +0 -0
  838. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_errors_and_cli_table.py +0 -0
  839. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_eval_baseline.py +0 -0
  840. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_eval_corpus.py +0 -0
  841. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_eval_faithfulness.py +0 -0
  842. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_eval_gate.py +0 -0
  843. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_eval_grading.py +0 -0
  844. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_eval_metrics.py +0 -0
  845. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_eval_stats_summary.py +0 -0
  846. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_eval_tools.py +0 -0
  847. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_eval_tools_probe.py +0 -0
  848. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  849. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_faithfulness.py +0 -0
  850. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_frontmatter.py +0 -0
  851. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_fuzz_targets.py +0 -0
  852. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  853. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_gitleaks_config.py +0 -0
  854. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_gitutil.py +0 -0
  855. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_gitutil_lfs.py +0 -0
  856. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_gitutil_sparse.py +0 -0
  857. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_gstack_coexistence.py +0 -0
  858. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_hook_settings_hosts.py +0 -0
  859. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_hookhost.py +0 -0
  860. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_imperative.py +0 -0
  861. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_import_budget.py +0 -0
  862. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_injectscan.py +0 -0
  863. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_install_permission_error.py +0 -0
  864. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_installscan.py +0 -0
  865. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_integrity.py +0 -0
  866. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_journal.py +0 -0
  867. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_langchain_packaging.py +0 -0
  868. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_link_ownership.py +0 -0
  869. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_localembed.py +0 -0
  870. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_localembed_e2e.py +0 -0
  871. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_lockfile.py +0 -0
  872. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_logs.py +0 -0
  873. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_marketing_counts.py +0 -0
  874. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_mcp.py +0 -0
  875. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_mcp_install_scan.py +0 -0
  876. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_mcp_read.py +0 -0
  877. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_mcpdecl.py +0 -0
  878. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_mcphost.py +0 -0
  879. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_measure_registry.py +0 -0
  880. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_minisign.py +0 -0
  881. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_mutation_hardening.py +0 -0
  882. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_mutation_shards.py +0 -0
  883. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_mutation_subfile_shards.py +0 -0
  884. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_mutmut_source_paths.py +0 -0
  885. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_near_duplicate_collapse.py +0 -0
  886. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_nethttp.py +0 -0
  887. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_normalize_sdist.py +0 -0
  888. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_output.py +0 -0
  889. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_page_budget.py +0 -0
  890. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_paths.py +0 -0
  891. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_perf_gate.py +0 -0
  892. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_pkg_confusions.py +0 -0
  893. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_pkg_injection.py +0 -0
  894. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_pkg_secrets.py +0 -0
  895. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_platform_pins.py +0 -0
  896. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_policy.py +0 -0
  897. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_post_deploy_smoke.py +0 -0
  898. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_project_mcp_sidecar.py +0 -0
  899. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_projectlock.py +0 -0
  900. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_provenance.py +0 -0
  901. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_publish_golden_dataset.py +0 -0
  902. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_rag.py +0 -0
  903. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_rag_fastpath.py +0 -0
  904. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_rag_fusion.py +0 -0
  905. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_registries_fresh.py +0 -0
  906. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_registry.py +0 -0
  907. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_registry_categories.py +0 -0
  908. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_registry_control_chars.py +0 -0
  909. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_registry_parallel.py +0 -0
  910. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_release_guard.py +0 -0
  911. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_release_preflight.py +0 -0
  912. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_required_checks.py +0 -0
  913. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_rerank_cache.py +0 -0
  914. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_resolve.py +0 -0
  915. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
  916. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_roadmap_fresh.py +0 -0
  917. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_rules.py +0 -0
  918. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_scale_corpus.py +0 -0
  919. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_scopes.py +0 -0
  920. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_secretscan.py +0 -0
  921. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_selfupdate.py +0 -0
  922. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_serve.py +0 -0
  923. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_serve_docs.py +0 -0
  924. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_shard_plan.py +0 -0
  925. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_shards.py +0 -0
  926. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_shards_incremental.py +0 -0
  927. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_shards_ingest.py +0 -0
  928. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_shards_matrix.py +0 -0
  929. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_smoke_covers_every_command.py +0 -0
  930. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_spdx_headers.py +0 -0
  931. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_spin.py +0 -0
  932. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_stackprobe.py +0 -0
  933. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_staleness.py +0 -0
  934. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_store_materialize.py +0 -0
  935. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_sync_blocked_links.py +0 -0
  936. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  937. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_tap_pins.py +0 -0
  938. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_token_parity.py +0 -0
  939. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_toolchain_lock.py +0 -0
  940. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_trustaudit.py +0 -0
  941. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_typedvalue.py +0 -0
  942. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_typosquat.py +0 -0
  943. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_updatediff.py +0 -0
  944. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_version.py +0 -0
  945. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_version_tags.py +0 -0
  946. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_vex.py +0 -0
  947. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_visual_harness_flags.py +0 -0
  948. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_workflow_concurrency.py +0 -0
  949. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  950. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  951. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_workflow_timeouts.py +0 -0
  952. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_workflows.py +0 -0
  953. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  954. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/visual/a11y_check.mjs +0 -0
  955. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/visual/console_check.mjs +0 -0
  956. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/visual/package-lock.json +0 -0
  957. {boost_skill_cli-1.2.88 → boost_skill_cli-1.2.89}/tests/visual/package.json +0 -0
  958. {boost_skill_cli-1.2.88 → 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.88
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.88'
22
- __version_tuple__ = version_tuple = (1, 2, 88)
21
+ __version__ = version = '1.2.89'
22
+ __version_tuple__ = version_tuple = (1, 2, 89)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -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:
@@ -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
 
@@ -108,6 +108,13 @@ def _save_state(fname: str, data: dict) -> None:
108
108
  (paths.state_dir() / fname).write_text(json.dumps(data, indent=2) + "\n", encoding="utf-8")
109
109
 
110
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
+
111
118
  def _install_generated(name: str, text: str) -> None:
112
119
  """Write a generated SKILL.md to a tempdir and install it as `name`.
113
120
 
@@ -115,7 +122,19 @@ def _install_generated(name: str, text: str) -> None:
115
122
  must not be allowed to propagate out of the ``with`` block and delete it —
116
123
  that would discard an LLM generation the user paid for, with nothing on disk
117
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``.
118
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
119
138
  with tempfile.TemporaryDirectory(prefix="boost-gen-") as td:
120
139
  src = Path(td) / name
121
140
  src.mkdir()
@@ -123,12 +142,9 @@ def _install_generated(name: str, text: str) -> None:
123
142
  try:
124
143
  res = store.install_from_path(src, name=name, tap_label="local")
125
144
  except BoostError as err:
126
- fallback = Path.cwd() / ("%s.SKILL.md" % name)
127
- fallback.write_text(text, encoding="utf-8")
128
- out.warn("not installed: %s" % err.message)
129
- out.info("generated skill saved to %s" % _tilde(fallback))
145
+ _save_generated_fallback(name, text, err.message)
130
146
  return
131
- out.ok("installed %s → %s" % (name, _tilde(res.dest)))
147
+ out.ok("%s %s → %s" % ("replaced" if owner else "installed", name, _tilde(res.dest)))
132
148
  if res.linked:
133
149
  out.info(out.role("linked into: %s" % ", ".join(res.linked), "muted"))
134
150
 
@@ -560,7 +576,7 @@ def cmd_absorb(argv: list[str]) -> int:
560
576
  description="Turn recurring chat-history patterns into a skill")
561
577
  ap.add_argument("--history", metavar="PATH",
562
578
  help="history .jsonl file or directory of them")
563
- ap.add_argument("--limit", type=int, default=5, metavar="N",
579
+ ap.add_argument("--limit", type=util.positive_int, default=5, metavar="N",
564
580
  help="max patterns to absorb (default: 5)")
565
581
  ap.add_argument("--install", action="store_true",
566
582
  help="install the generated skill")
@@ -1195,7 +1211,7 @@ def cmd_chat(argv: list[str]) -> int:
1195
1211
  description="Ask about skills in plain language")
1196
1212
  ap.add_argument("question", nargs="*", metavar="QUESTION",
1197
1213
  help="ask once and exit; omit for an interactive session")
1198
- 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,
1199
1215
  metavar="N", help="candidate skills to consider (default %d)"
1200
1216
  % chat_engine.TOP_K)
1201
1217
  ap.add_argument("--no-sources", action="store_true",
@@ -758,8 +758,8 @@ def cmd_lint(argv):
758
758
  help="installed skill name(s), or a path to a skill "
759
759
  "directory / its SKILL.md")
760
760
  ap.add_argument("--tap", metavar="TAP", help="lint every skill in a tap's clone")
761
- ap.add_argument("--min", type=int, default=40, dest="min_score", metavar="N",
762
- 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)")
763
763
  ap.add_argument("--json", action="store_true")
764
764
  args = ap.parse_args(argv)
765
765
 
@@ -1205,7 +1205,7 @@ def cmd_changelog(argv):
1205
1205
  prog="boost changelog",
1206
1206
  description="Show a skill's upstream change history")
1207
1207
  ap.add_argument("name", metavar="NAME")
1208
- ap.add_argument("-n", type=int, default=20, metavar="N",
1208
+ ap.add_argument("-n", type=util.positive_int, default=20, metavar="N",
1209
1209
  help="number of entries (default 20)")
1210
1210
  args = ap.parse_args(argv)
1211
1211
 
@@ -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")
@@ -1250,6 +1250,23 @@ def install_from_path(src_dir: Path, name: str | None = None,
1250
1250
  return res
1251
1251
 
1252
1252
 
1253
+ def existing_skill_owner(name: str) -> str | None:
1254
+ """Tap label of the skill already installed as ``name``, else None.
1255
+
1256
+ For the generated-install paths (``create``/``distill``/``infer``/``absorb``
1257
+ ``--install``) to warn before silently replacing an *unpinned* install and
1258
+ flipping its lock provenance to ``local`` — the loss ``list`` would
1259
+ otherwise never show. ``install_from_path``'s own gate only refuses a
1260
+ *pinned* name (its docstring: that refusal is deliberately not extended to
1261
+ the unpinned case, since this is also the re-import path for ``boost
1262
+ import`` / ``boost reinstall``). Callers that generate a brand-new skill,
1263
+ rather than re-importing an existing one, use this to catch that gap
1264
+ themselves.
1265
+ """
1266
+ existing = lockfile.get_skill(name)
1267
+ return existing.get("tap") if existing else None
1268
+
1269
+
1253
1270
  def uninstall(name: str) -> dict:
1254
1271
  """Uninstall ``name`` whatever its kind (skill, rule, workflow).
1255
1272
 
@@ -167,6 +167,25 @@ def positive_int(s: str) -> int:
167
167
  return v
168
168
 
169
169
 
170
+ def score_int(s: str) -> int:
171
+ """argparse ``type=`` for ``lint --min``: an int in [0, 100].
172
+
173
+ Scores are capped at 100 (``score_skill``), so a bare ``type=int`` let
174
+ ``--min 500`` through and failed every skill, and a negative ``--min``
175
+ passed every skill silently rather than being rejected as meaningless.
176
+ Unlike :func:`positive_int`, 0 is a legitimate value here — "fail nobody".
177
+ """
178
+ import argparse
179
+
180
+ try:
181
+ v = int(s)
182
+ except (TypeError, ValueError):
183
+ raise argparse.ArgumentTypeError("invalid int value: %r" % s) from None
184
+ if not 0 <= v <= 100:
185
+ raise argparse.ArgumentTypeError("must be between 0 and 100")
186
+ return v
187
+
188
+
170
189
  def now_iso() -> str:
171
190
  """Return UTC now as ``'2026-07-16T01:00:00Z'`` (what ``rel_time`` parses)."""
172
191
  return datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%SZ")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.88
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
@@ -835,7 +835,7 @@
835
835
  <div class="args-h">Options</div>
836
836
  <div class="args">
837
837
  <div class="arg"><code>--tap TAP</code><span>lint every skill in a tap&#x27;s clone</span></div>
838
- <div class="arg"><code>--min N</code><span>minimum passing score (default 40)</span></div>
838
+ <div class="arg"><code>--min N</code><span>minimum passing score, 0-100 (default 40)</span></div>
839
839
  <div class="arg"><code>--json</code><span></span></div>
840
840
  </div>
841
841
  </section>
@@ -0,0 +1,81 @@
1
+ ---
2
+ id: audit-create-distill-infer-absorb-install-silently-replace-an-inst
3
+ board: code
4
+ section: dx
5
+ status: inflight
6
+ category: Safety · Bug
7
+ complexity: S
8
+ impact: High
9
+ wow: 2
10
+ note: a tap skill becomes the TODO scaffold, lock flips to local — and the message says installed
11
+ order: 206
12
+ owner: loop/generated-install-overwrite
13
+ pr: 716
14
+ title: "create/distill/infer/absorb <code>--install</code> silently replace an installed (unpinned) skill and flip its lock provenance to local"
15
+ ---
16
+ The generated-skill install path never checks whether the name is already taken. Verified: after
17
+ <code>install brainstorming</code> (sickn33 tap), <code>create brainstorming --install</code>
18
+ printed <em>"&#10003; installed brainstorming &rarr; ~/.agents/skills/brainstorming"</em> and the
19
+ store SKILL.md became the TODO scaffold (<code>description: "TODO: describe when this skill should
20
+ trigger"</code>), lock now <code>tap=local v0.1.0</code>. <code>distill --install -o
21
+ brainstorming &hellip;</code> likewise: lock <code>tap=local v1.0.0</code> with
22
+ <code>source_dir</code> pointing at a deleted <code>/tmp/&hellip;/boost-gen-&hellip;</code>
23
+ tempdir. Exit 0, no warning either time, and repeating any <code>--install</code> run re-copies
24
+ over the store with no notice. Only a <b>pinned</b> skill is protected — the unpinned default is
25
+ silently destroyed, with provenance flipped so the loss is invisible to <code>list</code>.
26
+
27
+ The gate belongs in the callers, not the store: <code>store.install_from_path</code>'s docstring
28
+ (<code>store.py:1175-1177</code>) deliberately omits the already-installed refusal because it
29
+ serves re-import/reinstall. Neither <code>_install_generated</code>
30
+ (<code>intelligence.py:103-123</code>) nor <code>cmd_create</code>
31
+ (<code>configuration.py:370-371</code>) checks <code>lockfile.get_skill</code>.
32
+
33
+ Fix: in <code>_install_generated</code> and <code>cmd_create</code>, check
34
+ <code>lockfile.get_skill(name)</code> before <code>store.install_from_path</code>: refuse with a
35
+ hint ("already installed from &lt;tap&gt;; <code>boost uninstall</code> first, pass
36
+ <code>--force</code>, or pick another name") or <code>out.confirm</code>; print "replaced" rather
37
+ than "installed" when overwriting is confirmed. Keep <code>install_from_path</code> itself
38
+ unchanged. Regenerate <code>docs/commands.html</code> if a <code>--force</code> flag is added to
39
+ create/distill/infer/absorb.
40
+
41
+ Found by the 2026-08 CLI audit (cluster <code>generated-install-overwrites</code>); repro in the
42
+ audit log.
43
+
44
+ <br><br><b>Fixed, per the verified recommendation.</b> Added <code>store.existing_skill_owner(name)</code>
45
+ (a thin <code>lockfile.get_skill</code> lookup returning the owning tap, core-level so both callers
46
+ and any future one share it) and used it in <code>_install_generated</code>
47
+ (<code>intelligence.py</code>, shared by distill/infer/absorb) and <code>cmd_create</code>
48
+ (<code>configuration.py</code>): when a name is already installed, ask with <code>out.confirm</code>
49
+ before replacing (mirrors the existing <code>_write_generated</code> overwrite-confirm for the
50
+ non-<code>--install</code> path) rather than adding a new <code>--force</code> flag, print
51
+ &ldquo;replaced&rdquo; instead of &ldquo;installed&rdquo; when confirmed, and on refusal save the
52
+ generated skill to cwd exactly as the existing policy-refusal branch already did (factored into one
53
+ <code>_save_generated_fallback</code> helper). <code>install_from_path</code> itself is unchanged, as
54
+ specified. No CLI surface changed, so <code>docs/commands.html</code> needed no regeneration
55
+ (confirmed via <code>build_command_reference.py --check</code>). New unit tests cover
56
+ <code>existing_skill_owner</code> directly; new functional tests cover the confirmed-replace and
57
+ declined-decline paths for both <code>create --install</code> and
58
+ <code>distill/infer/absorb --install</code>, verified manually end-to-end against a disposable
59
+ <code>BOOST_HOME</code> in both the declined and <code>BOOST_ASSUME_YES</code> branches.
60
+
61
+ <b>Gate status: implementation verified locally short of the full <code>make check</code>.</b> This
62
+ session's sandbox has no PyPI network access (pip/uv both get 403 from the index), so the
63
+ hash-pinned toolchain in <code>requirements/*.txt</code> could not be installed and
64
+ <code>mutmut</code>/<code>vulture</code>/<code>xenon</code>/<code>interrogate</code>/<code>refurb</code>/<code>codespell</code>/<code>actionlint</code>/<code>zizmor</code>/<code>import-linter</code>
65
+ are unavailable here. Verified instead with what the image does carry: <code>ruff check</code>,
66
+ <code>mypy</code> and <code>pyright</code> clean on every changed file (mypy's two pre-existing
67
+ <code>pkg.py</code> errors are untouched by this change); the full <code>tests/unit</code> +
68
+ <code>tests/functional</code> suite passes under Python 3.12 (three failures are pre-existing and
69
+ unrelated — two <code>test_catalog.py</code> permission tests and one <code>doctor</code> log-write
70
+ test all rely on a non-root <code>chmod</code> denial, which does not hold running as root here).
71
+ CI carries real network access and should run the full gate on the PR; left <code>inflight</code>
72
+ rather than <code>shipped</code> until that's confirmed green.
73
+
74
+ <b>CI confirmed green on <code>dc5582b</code>.</b> All 41 checks passed, including <code>lint</code>,
75
+ all six <code>mutation-shard</code> jobs plus the aggregating <code>mutation</code> check,
76
+ <code>evals</code>, the full <code>tests</code> matrix (Linux/macOS/Windows ×
77
+ 3.12/3.13/3.14, plus the 3.14 free-threaded canary), <code>install-smoke</code>,
78
+ <code>patch-coverage</code> and <code>branch-current</code>. No merge conflicts
79
+ (<code>mergeable_state: clean</code>), no open review threads. Left <code>inflight</code> rather than
80
+ <code>shipped</code> since it still isn't merged — a human reviews and merges per the run's
81
+ instructions.
@@ -2,7 +2,7 @@
2
2
  id: audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc
3
3
  board: code
4
4
  section: dx
5
- status: inflight
5
+ status: shipped
6
6
  category: CLI · UX
7
7
  complexity: S
8
8
  impact: Med
@@ -2,15 +2,15 @@
2
2
  id: audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut
3
3
  board: code
4
4
  section: dx
5
- status: planned
5
+ status: inflight
6
6
  category: CLI · Bug
7
7
  complexity: S
8
8
  impact: Med
9
9
  wow: 1
10
10
  note: chat -k 0 fabricates "nothing matches"; hooks --timeout -5 lands in settings.json
11
11
  order: 234
12
- owner:
13
- pr:
12
+ owner: loop/count-flags-reject-zero-negative
13
+ pr: 717
14
14
  title: "Six count flags (<code>tap</code>/<code>chat</code>/<code>absorb</code>/<code>lint</code>/<code>changelog</code>/<code>hooks</code>) accept 0 and negatives"
15
15
  ---
16
16
  The same defect class the shipped negative-limit-inverts-log-pulse-output card fixed, at six sites
@@ -11707,7 +11707,7 @@ log.</p></details>
11707
11707
  </article>
11708
11708
 
11709
11709
  <article class="cap rcard" id="audit-create-distill-infer-absorb-install-silently-replace-an-inst">
11710
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Safety · Bug</span></div>
11710
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">Safety · Bug</span></div>
11711
11711
  <h3>create/distill/infer/absorb <code>--install</code> silently replace an installed (unpinned) skill and flip its lock provenance to local</h3>
11712
11712
  <p>The generated-skill install path never checks whether the name is already taken. Verified: after
11713
11713
  <code>install brainstorming</code> (sickn33 tap), <code>create brainstorming --install</code>
@@ -11735,7 +11735,46 @@ unchanged. Regenerate <code>docs/commands.html</code> if a <code>--force</code>
11735
11735
  create/distill/infer/absorb.
11736
11736
 
11737
11737
  Found by the 2026-08 CLI audit (cluster <code>generated-install-overwrites</code>); repro in the
11738
- audit log.</p>
11738
+ audit log.
11739
+
11740
+ <br><br><b>Fixed, per the verified recommendation.</b> Added <code>store.existing_skill_owner(name)</code>
11741
+ (a thin <code>lockfile.get_skill</code> lookup returning the owning tap, core-level so both callers
11742
+ and any future one share it) and used it in <code>_install_generated</code>
11743
+ (<code>intelligence.py</code>, shared by distill/infer/absorb) and <code>cmd_create</code>
11744
+ (<code>configuration.py</code>): when a name is already installed, ask with <code>out.confirm</code>
11745
+ before replacing (mirrors the existing <code>_write_generated</code> overwrite-confirm for the
11746
+ non-<code>--install</code> path) rather than adding a new <code>--force</code> flag, print
11747
+ &ldquo;replaced&rdquo; instead of &ldquo;installed&rdquo; when confirmed, and on refusal save the
11748
+ generated skill to cwd exactly as the existing policy-refusal branch already did (factored into one
11749
+ <code>_save_generated_fallback</code> helper). <code>install_from_path</code> itself is unchanged, as
11750
+ specified. No CLI surface changed, so <code>docs/commands.html</code> needed no regeneration
11751
+ (confirmed via <code>build_command_reference.py --check</code>). New unit tests cover
11752
+ <code>existing_skill_owner</code> directly; new functional tests cover the confirmed-replace and
11753
+ declined-decline paths for both <code>create --install</code> and
11754
+ <code>distill/infer/absorb --install</code>, verified manually end-to-end against a disposable
11755
+ <code>BOOST_HOME</code> in both the declined and <code>BOOST_ASSUME_YES</code> branches.
11756
+
11757
+ <b>Gate status: implementation verified locally short of the full <code>make check</code>.</b> This
11758
+ session's sandbox has no PyPI network access (pip/uv both get 403 from the index), so the
11759
+ hash-pinned toolchain in <code>requirements/*.txt</code> could not be installed and
11760
+ <code>mutmut</code>/<code>vulture</code>/<code>xenon</code>/<code>interrogate</code>/<code>refurb</code>/<code>codespell</code>/<code>actionlint</code>/<code>zizmor</code>/<code>import-linter</code>
11761
+ are unavailable here. Verified instead with what the image does carry: <code>ruff check</code>,
11762
+ <code>mypy</code> and <code>pyright</code> clean on every changed file (mypy's two pre-existing
11763
+ <code>pkg.py</code> errors are untouched by this change); the full <code>tests/unit</code> +
11764
+ <code>tests/functional</code> suite passes under Python 3.12 (three failures are pre-existing and
11765
+ unrelated — two <code>test_catalog.py</code> permission tests and one <code>doctor</code> log-write
11766
+ test all rely on a non-root <code>chmod</code> denial, which does not hold running as root here).
11767
+ CI carries real network access and should run the full gate on the PR; left <code>inflight</code>
11768
+ rather than <code>shipped</code> until that's confirmed green.
11769
+
11770
+ <b>CI confirmed green on <code>dc5582b</code>.</b> All 41 checks passed, including <code>lint</code>,
11771
+ all six <code>mutation-shard</code> jobs plus the aggregating <code>mutation</code> check,
11772
+ <code>evals</code>, the full <code>tests</code> matrix (Linux/macOS/Windows ×
11773
+ 3.12/3.13/3.14, plus the 3.14 free-threaded canary), <code>install-smoke</code>,
11774
+ <code>patch-coverage</code> and <code>branch-current</code>. No merge conflicts
11775
+ (<code>mergeable_state: clean</code>), no open review threads. Left <code>inflight</code> rather than
11776
+ <code>shipped</code> since it still isn't merged — a human reviews and merges per the run's
11777
+ instructions.</p>
11739
11778
  <div class="meta">
11740
11779
  <span class="m">Complexity <b>S</b></span>
11741
11780
  <span class="m hi">Impact <b>High</b></span>
@@ -12424,8 +12463,9 @@ CLI audit (cluster <code>missing-json-flags</code>); repro in the audit log.</p>
12424
12463
  </article>
12425
12464
 
12426
12465
  <article class="cap rcard" id="audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc">
12427
- <div class="head"><span class="pill inflight">In flight</span><span class="cat">CLI · UX</span></div>
12466
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">CLI · UX</span></div>
12428
12467
  <h3>Name-miss errors: unknown tap qualifier never named, no close-match hint, tap tokens pollute suggestions</h3>
12468
+ <details class="cardbody"><summary>Write-up</summary>
12429
12469
  <p>Three gaps in one resolver make name misses unhelpful across <code>install</code>, <code>info</code>,
12430
12470
  <code>cat</code>, <code>preview</code>, <code>deps</code>, <code>log</code>, <code>home</code>,
12431
12471
  <code>explain</code> and <code>changelog</code>. First: <code>install nosuch/tap:brainstorming</code>
@@ -12455,7 +12495,7 @@ the bare name; otherwise run <code>search(bare)</code> (optionally tap-restricte
12455
12495
  search comes back empty. In <code>_common</code>'s not-installed error, append
12456
12496
  <code>get_close_matches</code> over <code>lockfile.all_installed()</code> names. No flag or summary
12457
12497
  changes, so no doc regeneration. Found by the 2026-08 CLI audit (cluster
12458
- <code>name-miss-error-hints</code>); repro in the audit log.</p>
12498
+ <code>name-miss-error-hints</code>); repro in the audit log.</p></details>
12459
12499
  <div class="meta">
12460
12500
  <span class="m">Complexity <b>S</b></span>
12461
12501
  <span class="m">Impact <b>Med</b></span>
@@ -12465,7 +12505,7 @@ changes, so no doc regeneration. Found by the 2026-08 CLI audit (cluster
12465
12505
  </article>
12466
12506
 
12467
12507
  <article class="cap rcard" id="audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut">
12468
- <div class="head"><span class="pill planned">Planned</span><span class="cat">CLI · Bug</span></div>
12508
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">CLI · Bug</span></div>
12469
12509
  <h3>Six count flags (<code>tap</code>/<code>chat</code>/<code>absorb</code>/<code>lint</code>/<code>changelog</code>/<code>hooks</code>) accept 0 and negatives</h3>
12470
12510
  <p>The same defect class the shipped negative-limit-inverts-log-pulse-output card fixed, at six sites
12471
12511
  that kept bare <code>type=int</code> although <code>util.positive_int</code> exists and sibling
@@ -108,3 +108,11 @@ class TestLimit:
108
108
  def test_limit_bounds_the_candidates(self, boost, tapped):
109
109
  payload = json.loads(boost("chat", "--json", "-k", "2", "skills").out)
110
110
  assert len(payload["skills"]) <= 2
111
+
112
+ def test_limit_must_be_positive_int(self, boost, tapped):
113
+ # -k 0 used to slice every retrieved hit to nothing and fabricate
114
+ # "Nothing in the tapped catalogue matches that" for a real query.
115
+ r = boost("chat", "-k", "0", "skills", expect=2)
116
+ assert "must be >= 1" in r.err
117
+ r = boost("chat", "-k", "-1", "skills", expect=2)
118
+ assert "must be >= 1" in r.err
@@ -255,6 +255,26 @@ class TestCreate:
255
255
  assert lock["skills"]["inst-skill"]["tap"] == "local"
256
256
  assert lock["skills"]["inst-skill"]["version"] == "0.1.0"
257
257
 
258
+ def test_install_flag_replaces_confirmed_overwrite(self, boost, installed,
259
+ tmp_path):
260
+ # `installed` already put brainstorming on disk from the fixture tap —
261
+ # `create brainstorming --install` must not silently clobber it and
262
+ # relabel its lock provenance `local`.
263
+ r = boost("create", "brainstorming", "--dir", tmp_path, "--install")
264
+ assert "replaced brainstorming" in r.out
265
+ lock = json.loads(paths.lockfile_path().read_text(encoding="utf-8"))
266
+ assert lock["skills"]["brainstorming"]["tap"] == "local"
267
+ assert lock["skills"]["brainstorming"]["version"] == "0.1.0"
268
+
269
+ def test_install_flag_declined_overwrite_leaves_it_installed(
270
+ self, boost, installed, tmp_path, monkeypatch):
271
+ monkeypatch.delenv("BOOST_ASSUME_YES")
272
+ r = boost("create", "brainstorming", "--dir", tmp_path, "--install")
273
+ assert "not installed: brainstorming is already installed from fixture-tap" in r.out
274
+ assert (tmp_path / "brainstorming" / "SKILL.md").is_file()
275
+ lock = json.loads(paths.lockfile_path().read_text(encoding="utf-8"))
276
+ assert lock["skills"]["brainstorming"]["tap"] == "fixture-tap"
277
+
258
278
 
259
279
  # ---------------------------------------------------------------- policy
260
280
 
@@ -82,3 +82,14 @@ class TestHooksErrors:
82
82
  def test_list_empty(self, boost, sandbox):
83
83
  r = boost("hooks", "list")
84
84
  assert "no boost-managed hooks" in r.out
85
+
86
+ def test_timeout_must_be_positive_int(self, boost, sandbox):
87
+ # --timeout -5 used to write a negative timeout straight into
88
+ # settings.json; --timeout 0 is no better (Gemini's is milliseconds,
89
+ # fed to setTimeout — a hook that expires before it runs).
90
+ r = boost("hooks", "add", "SessionStart", "-c", "x", "-n", "y",
91
+ "-s", "global", "--timeout", "-5", expect=2)
92
+ assert "must be >= 1" in r.err
93
+ r = boost("hooks", "add", "SessionStart", "-c", "x", "-n", "y",
94
+ "-s", "global", "--timeout", "0", expect=2)
95
+ assert "must be >= 1" in r.err
@@ -114,6 +114,31 @@ class TestDistill:
114
114
  assert entry["tap"] == "local"
115
115
  assert entry["version"] == "1.0.0"
116
116
 
117
+ def test_install_replaces_an_existing_unpinned_skill_when_confirmed(
118
+ self, boost, installed):
119
+ # `installed` already put brainstorming on disk from the fixture tap —
120
+ # BOOST_ASSUME_YES (the sandbox default) auto-confirms the replace.
121
+ r = boost("distill", "tdd-workflow", "commit-messages", "-o",
122
+ "brainstorming", "--install")
123
+ assert "replaced brainstorming" in r.out
124
+ lock = json.loads(paths.lockfile_path().read_text(encoding="utf-8"))
125
+ entry = lock["skills"]["brainstorming"]
126
+ assert entry["tap"] == "local"
127
+ assert entry["version"] == "1.0.0"
128
+
129
+ def test_install_declined_leaves_the_existing_skill_and_saves_the_generation(
130
+ self, boost, installed, tmp_path, monkeypatch):
131
+ monkeypatch.chdir(tmp_path)
132
+ monkeypatch.delenv("BOOST_ASSUME_YES")
133
+ r = boost("distill", "tdd-workflow", "commit-messages", "-o",
134
+ "brainstorming", "--install")
135
+ assert "not installed: brainstorming is already installed from fixture-tap" in r.out
136
+ assert "generated skill saved to" in r.out
137
+ fallback = tmp_path / "brainstorming.SKILL.md"
138
+ assert fallback.is_file()
139
+ lock = json.loads(paths.lockfile_path().read_text(encoding="utf-8"))
140
+ assert lock["skills"]["brainstorming"]["tap"] == "fixture-tap"
141
+
117
142
  def test_refused_install_saves_the_generation_instead_of_losing_it(
118
143
  self, boost, tapped, tmp_path, monkeypatch):
119
144
  """A refused install must leave the generated skill on disk.
@@ -299,6 +324,14 @@ class TestAbsorb:
299
324
  assert "no chat history found under ~/.claude — nothing to absorb" in r.out
300
325
  assert "--history PATH" in r.out
301
326
 
327
+ def test_limit_must_be_positive_int(self, boost, sandbox):
328
+ # --limit 0 used to slice every recurring pattern away and fabricate
329
+ # "no recurring patterns" even when some were found.
330
+ r = boost("absorb", "--limit", "0", expect=2)
331
+ assert "must be >= 1" in r.err
332
+ r = boost("absorb", "--limit", "-1", expect=2)
333
+ assert "must be >= 1" in r.err
334
+
302
335
  def test_pattern_surfaced_from_projects_dir(self, boost, sandbox):
303
336
  hist = sandbox / ".claude" / "projects" / "proj"
304
337
  hist.mkdir(parents=True)
@@ -336,6 +336,13 @@ class TestLint:
336
336
  r = boost("lint", "--min", "0")
337
337
  assert "1 skill passes lint (min 0)" in r.out
338
338
 
339
+ def test_min_out_of_0_to_100_range_is_rejected(self, boost, sandbox):
340
+ # --min 500 used to fail every skill outright since scores cap at 100.
341
+ r = boost("lint", "--min", "500", expect=2)
342
+ assert "must be between 0 and 100" in r.err
343
+ r = boost("lint", "--min", "-1", expect=2)
344
+ assert "must be between 0 and 100" in r.err
345
+
339
346
  def test_missing_fields_error_rc1_and_json(self, boost, sandbox, tmp_path):
340
347
  d = tmp_path / "noname"
341
348
  d.mkdir()
@@ -1173,6 +1180,16 @@ class TestChangelog:
1173
1180
  r = boost("changelog", "local-one")
1174
1181
  assert "no upstream history — local-one was imported locally" in r.out
1175
1182
 
1183
+ def test_n_must_be_positive_int(self, boost, installed):
1184
+ # -n 0 used to print no log lines and claim "no history found" even
1185
+ # when history exists; -n -1 is passed straight to `git log -n -1`,
1186
+ # which git treats as "unlimited" — a surprise the flag's own help
1187
+ # ("number of entries") never suggested.
1188
+ r = boost("changelog", "brainstorming", "-n", "0", expect=2)
1189
+ assert "must be >= 1" in r.err
1190
+ r = boost("changelog", "brainstorming", "-n", "-1", expect=2)
1191
+ assert "must be >= 1" in r.err
1192
+
1176
1193
 
1177
1194
  # ── attest ───────────────────────────────────────────────────────────────
1178
1195
 
@@ -200,6 +200,14 @@ class TestTapCatalog:
200
200
  expect=1)
201
201
  assert "no catalog registries match" in r.out
202
202
 
203
+ def test_limit_must_be_positive_int(self, boost, sandbox):
204
+ # --limit -1 used to silently drop the last registry (entries[:-1])
205
+ # rather than being rejected as meaningless.
206
+ r = boost("tap", "--catalog", "--limit", "-1", "--dry-run", expect=2)
207
+ assert "must be >= 1" in r.err
208
+ r = boost("tap", "--catalog", "--limit", "0", "--dry-run", expect=2)
209
+ assert "must be >= 1" in r.err
210
+
203
211
  def test_real_tap_from_catalog(self, boost, sandbox, fixture_tap_src,
204
212
  monkeypatch):
205
213
  from boost_cli.core import registry
@@ -735,6 +735,35 @@ class TestInstallFromPath:
735
735
  assert ei.value.message == "%s has no SKILL.md" % empty
736
736
 
737
737
 
738
+ class TestExistingSkillOwner:
739
+ """`install_from_path` refuses to overwrite a *pinned* name but silently
740
+ replaces an unpinned one — deliberately, since it doubles as the
741
+ `boost import`/`reinstall` path. The generated-install callers
742
+ (create/distill/infer/absorb --install) use this to catch the unpinned
743
+ case themselves before calling in, since `install_from_path` won't.
744
+ """
745
+
746
+ def test_none_when_nothing_installed(self, sandbox):
747
+ assert store.existing_skill_owner("nobody-home") is None
748
+
749
+ def test_returns_the_installed_tap(self, sandbox, tmp_path):
750
+ src = tmp_path / "dir-name-skill"
751
+ src.mkdir()
752
+ (src / "SKILL.md").write_text(
753
+ "---\nname: owned\nversion: 1.0.0\n---\n\nBody\n", encoding="utf-8")
754
+ store.install_from_path(src, tap_label="acme/repo")
755
+ assert store.existing_skill_owner("owned") == "acme/repo"
756
+
757
+ def test_none_after_uninstall(self, sandbox, tmp_path):
758
+ src = tmp_path / "dir-name-skill"
759
+ src.mkdir()
760
+ (src / "SKILL.md").write_text(
761
+ "---\nname: transient\nversion: 1.0.0\n---\n\nBody\n", encoding="utf-8")
762
+ store.install_from_path(src)
763
+ store.uninstall("transient")
764
+ assert store.existing_skill_owner("transient") is None
765
+
766
+
738
767
  class TestUninstall:
739
768
  def test_uninstall_removes_everything(self, brainstorming):
740
769
  result = store.uninstall("brainstorming")