boost-skill-cli 1.2.95__tar.gz → 1.2.96__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 (960) hide show
  1. {boost_skill_cli-1.2.95/boost_skill_cli.egg-info → boost_skill_cli-1.2.96}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/bmad.py +53 -22
  4. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/configuration.py +14 -2
  5. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/discovery.py +30 -8
  6. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/hooks.py +11 -4
  7. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/info.py +2 -0
  8. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/intelligence.py +12 -5
  9. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/pkg.py +6 -3
  10. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/quality.py +7 -0
  11. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/safety.py +10 -8
  12. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/taps.py +10 -2
  13. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/team.py +24 -7
  14. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/adapters.py +18 -1
  15. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/bmad.py +38 -1
  16. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/claude_settings.py +10 -2
  17. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/faithfulness.py +36 -2
  18. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/frontmatter.py +116 -7
  19. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/integrity.py +34 -0
  20. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/lockfile.py +25 -1
  21. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/output.py +11 -7
  22. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/util.py +15 -0
  23. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  24. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/bmad.md +7 -0
  25. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/commands.html +3 -3
  26. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-bmad-findings.md +3 -3
  27. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-create-findings.md +3 -3
  28. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-explain-findings.md +3 -3
  29. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-replay-findings.md +2 -2
  30. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-run-findings.md +2 -2
  31. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-search-findings.md +3 -3
  32. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +3 -3
  33. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-taps-findings.md +3 -3
  34. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-verify-findings.md +3 -3
  35. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +9 -0
  36. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap.html +29 -15
  37. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_bmad.py +75 -0
  38. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_configuration.py +55 -0
  39. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_discovery.py +58 -0
  40. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_hooks.py +14 -0
  41. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_info.py +8 -0
  42. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_intelligence.py +18 -0
  43. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_pkg.py +15 -0
  44. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_quality.py +25 -1
  45. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_taps.py +18 -1
  46. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_team.py +30 -0
  47. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_tap_signing.py +11 -0
  48. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_adapters_runner.py +21 -4
  49. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_bmad_core.py +48 -0
  50. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_claude_settings.py +24 -0
  51. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_faithfulness.py +53 -0
  52. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_frontmatter.py +125 -0
  53. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_integrity.py +60 -0
  54. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_lockfile.py +27 -0
  55. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_output.py +34 -0
  56. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_util.py +26 -0
  57. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.gitattributes +0 -0
  58. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.gitignore +0 -0
  59. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.gitleaks.toml +0 -0
  60. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.htmlvalidate.json +0 -0
  61. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.lighthouserc.json +0 -0
  62. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.lycheeignore +0 -0
  63. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.markdownlint-cli2.jsonc +0 -0
  64. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.pre-commit-config.yaml +0 -0
  65. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.stylelintrc.json +0 -0
  66. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.vale/styles/boost/AIWriting.yml +0 -0
  67. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.vale/styles/boost/Terminology.yml +0 -0
  68. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  69. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/.vale.ini +0 -0
  70. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/CLAUDE.md +0 -0
  71. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/CODE_OF_CONDUCT.md +0 -0
  72. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/CONTRIBUTING.md +0 -0
  73. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/DCO +0 -0
  74. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/GOVERNANCE.md +0 -0
  75. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/LICENSE +0 -0
  76. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/MAINTAINERS.md +0 -0
  77. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/MANIFEST.in +0 -0
  78. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/Makefile +0 -0
  79. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/README.md +0 -0
  80. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/SECURITY.md +0 -0
  81. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/SUPPORT.md +0 -0
  82. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost +0 -0
  83. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/__init__.py +0 -0
  84. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/__main__.py +0 -0
  85. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/cli.py +0 -0
  86. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/cliparse.py +0 -0
  87. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/__init__.py +0 -0
  88. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/_common.py +0 -0
  89. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/quickstart.py +0 -0
  90. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/commands/run.py +0 -0
  91. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/__init__.py +0 -0
  92. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/agents.py +0 -0
  93. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/ai.py +0 -0
  94. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/aihost.py +0 -0
  95. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/bootstrap.py +0 -0
  96. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/browse.py +0 -0
  97. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/builtin.py +0 -0
  98. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/capabilities.py +0 -0
  99. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/catalog.py +0 -0
  100. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/catalogbundle.py +0 -0
  101. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/chat.py +0 -0
  102. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/complete.py +0 -0
  103. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/config.py +0 -0
  104. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/dense.py +0 -0
  105. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/ed25519.py +0 -0
  106. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/embed.py +0 -0
  107. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/gitutil.py +0 -0
  108. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/hookhost.py +0 -0
  109. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/imperative.py +0 -0
  110. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/injectscan.py +0 -0
  111. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/installscan.py +0 -0
  112. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/journal.py +0 -0
  113. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/jsonstate.py +0 -0
  114. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/localembed.py +0 -0
  115. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/logs.py +0 -0
  116. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/mcp.py +0 -0
  117. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/mcpdecl.py +0 -0
  118. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/mcphost.py +0 -0
  119. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/minisign.py +0 -0
  120. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/nethttp.py +0 -0
  121. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/paths.py +0 -0
  122. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/policy.py +0 -0
  123. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/projectlock.py +0 -0
  124. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/provenance.py +0 -0
  125. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/rag.py +0 -0
  126. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/registry.py +0 -0
  127. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/resolve.py +0 -0
  128. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/rules.py +0 -0
  129. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/scopes.py +0 -0
  130. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/secretscan.py +0 -0
  131. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/selfupdate.py +0 -0
  132. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/serve.py +0 -0
  133. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/shards.py +0 -0
  134. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/stackprobe.py +0 -0
  135. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/staleness.py +0 -0
  136. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/store.py +0 -0
  137. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/trustaudit.py +0 -0
  138. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/typedvalue.py +0 -0
  139. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/typosquat.py +0 -0
  140. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/updatediff.py +0 -0
  141. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/core/workflows.py +0 -0
  142. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/data/registries.json +0 -0
  143. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/data/rules/boost-first.mdc +0 -0
  144. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/errors.py +0 -0
  145. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_cli/spin.py +0 -0
  146. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_langchain/__init__.py +0 -0
  147. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_langchain/_compat.py +0 -0
  148. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_langchain/graph.py +0 -0
  149. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_langchain/loader.py +0 -0
  150. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_langchain/py.typed +0 -0
  151. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_langchain/retriever.py +0 -0
  152. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  153. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  154. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  155. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_skill_cli.egg-info/requires.txt +0 -0
  156. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/boost_skill_cli.egg-info/top_level.txt +0 -0
  157. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/codecov.yml +0 -0
  158. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/.claude/settings.local.json +0 -0
  159. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/DEBUGGING.md +0 -0
  160. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/adapters.html +0 -0
  161. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/architecture/README.md +0 -0
  162. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/architecture/c4-components-core.md +0 -0
  163. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/architecture/c4-containers.md +0 -0
  164. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/architecture/c4-context.md +0 -0
  165. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/architecture/c4-dynamic-install.md +0 -0
  166. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/gifs/distill.gif +0 -0
  167. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/gifs/doctor.gif +0 -0
  168. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/gifs/explain.gif +0 -0
  169. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/gifs/hooks.gif +0 -0
  170. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/gifs/install.gif +0 -0
  171. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/gifs/pulse.gif +0 -0
  172. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/gifs/search.gif +0 -0
  173. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/gifs/tap.gif +0 -0
  174. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/tapes/distill.tape +0 -0
  175. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/tapes/doctor.tape +0 -0
  176. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/tapes/explain.tape +0 -0
  177. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/tapes/hooks.tape +0 -0
  178. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/tapes/install.tape +0 -0
  179. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/tapes/pulse.tape +0 -0
  180. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/tapes/search.tape +0 -0
  181. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel/tapes/tap.tape +0 -0
  182. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/carousel.html +0 -0
  183. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/chat.html +0 -0
  184. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/code-review.md +0 -0
  185. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/commit-audit.md +0 -0
  186. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/demo-index.json +0 -0
  187. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/demo.gif +0 -0
  188. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/demo.html +0 -0
  189. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/demo.tape +0 -0
  190. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/dependencies.md +0 -0
  191. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/design-roadmap.html +0 -0
  192. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/eval-latest.json +0 -0
  193. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/eval.html +0 -0
  194. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/index.html +0 -0
  195. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/langchain.html +0 -0
  196. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/mcp-hub.html +0 -0
  197. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/openssf-badge.md +0 -0
  198. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/openssf-playbook.md +0 -0
  199. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/rag-architecture.md +0 -0
  200. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D01.md +0 -0
  201. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D02.md +0 -0
  202. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D03.md +0 -0
  203. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D04.md +0 -0
  204. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D05.md +0 -0
  205. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D06.md +0 -0
  206. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D07.md +0 -0
  207. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D08.md +0 -0
  208. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D09.md +0 -0
  209. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D10.md +0 -0
  210. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D11.md +0 -0
  211. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D12.md +0 -0
  212. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D13.md +0 -0
  213. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D14.md +0 -0
  214. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D15.md +0 -0
  215. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D16.md +0 -0
  216. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D17.md +0 -0
  217. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D18.md +0 -0
  218. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D19.md +0 -0
  219. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D20.md +0 -0
  220. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D21.md +0 -0
  221. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D22.md +0 -0
  222. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D23.md +0 -0
  223. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D24.md +0 -0
  224. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D25.md +0 -0
  225. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D26.md +0 -0
  226. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/BOOST-D27.md +0 -0
  227. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  228. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  229. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  230. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  231. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  232. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  233. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  234. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  235. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  236. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  237. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  238. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  239. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  240. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  241. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  242. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-attest-findings.md +0 -0
  243. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-audit-findings.md +0 -0
  244. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-browse-findings.md +0 -0
  245. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  246. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  247. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  248. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  249. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-chat-findings.md +0 -0
  250. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  251. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  252. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  253. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-completions-findings.md +0 -0
  254. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-config-findings.md +0 -0
  255. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  256. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-context-findings.md +0 -0
  257. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  258. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
  259. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  260. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-deps-findings.md +0 -0
  261. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-discover-findings.md +0 -0
  262. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  263. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  264. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-drift-findings.md +0 -0
  265. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  266. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-edit-findings.md +0 -0
  267. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  268. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-export-findings.md +0 -0
  269. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  270. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  271. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  272. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  273. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  274. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-health-findings.md +0 -0
  275. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  276. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  277. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-import-findings.md +0 -0
  278. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-index-findings.md +0 -0
  279. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  280. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  281. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-install-findings.md +0 -0
  282. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  283. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  284. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-lint-findings.md +0 -0
  285. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-log-findings.md +0 -0
  286. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  287. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  288. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  289. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  290. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
  291. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  292. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  293. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  294. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  295. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  296. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  297. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-policy-findings.md +0 -0
  298. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-preview-findings.md +0 -0
  299. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-profile-findings.md +0 -0
  300. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  301. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  302. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  303. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  304. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  305. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  306. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  307. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  308. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  309. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-root-findings.md +0 -0
  310. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  311. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  312. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  313. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
  314. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
  315. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  316. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  317. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  318. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  319. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-sync-findings.md +0 -0
  320. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-tag-findings.md +0 -0
  321. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  322. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-tap-findings.md +0 -0
  323. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  324. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-test-findings.md +0 -0
  325. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-trust-findings.md +0 -0
  326. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  327. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  328. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-untap-findings.md +0 -0
  329. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-update-findings.md +0 -0
  330. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  331. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/audit-who-findings.md +0 -0
  332. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  333. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  334. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  335. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  336. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  337. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  338. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/boost-first-rule.md +0 -0
  339. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  340. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  341. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/branch-current-gate.md +0 -0
  342. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  343. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  344. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  345. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  346. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  347. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  348. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  349. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
  350. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  351. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  352. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  353. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  354. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  355. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  356. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  357. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  358. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  359. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/cli-command-audit.md +0 -0
  360. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  361. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  362. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  363. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  364. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/command-carousel-page.md +0 -0
  365. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  366. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  367. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  368. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  369. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
  370. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  371. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  372. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  373. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  374. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  375. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  376. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  377. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  378. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  379. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  380. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  381. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  382. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  383. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  384. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  385. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  386. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  387. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  388. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  389. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  390. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  391. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  392. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  393. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  394. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  395. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  396. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  397. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  398. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  399. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  400. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  401. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  402. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  403. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  404. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  405. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  406. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  407. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  408. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  409. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  410. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  411. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  412. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  413. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  414. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  415. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  416. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  417. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  418. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  419. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  420. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/github-community-health-files.md +0 -0
  421. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  422. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  423. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  424. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  425. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  426. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  427. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  428. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  429. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  430. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  431. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  432. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  433. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  434. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  435. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  436. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  437. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  438. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  439. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  440. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  441. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  442. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  443. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  444. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  445. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  446. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  447. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  448. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  449. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  450. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  451. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  452. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  453. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  454. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  455. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  456. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  457. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  458. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  459. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  460. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  461. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  462. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  463. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  464. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  465. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  466. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  467. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  468. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  469. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  470. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  471. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  472. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  473. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  474. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  475. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  476. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  477. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  478. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  479. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  480. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  481. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  482. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  483. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  484. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  485. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  486. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  487. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  488. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  489. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  490. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  491. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
  492. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  493. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  494. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  495. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  496. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  497. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  498. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  499. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  500. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/openssf-playbook.md +0 -0
  501. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/openssf-silver.md +0 -0
  502. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  503. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  504. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  505. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  506. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  507. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  508. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  509. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  510. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  511. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  512. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  513. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  514. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  515. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  516. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  517. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  518. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  519. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  520. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  521. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  522. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
  523. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  524. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  525. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  526. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  527. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  528. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  529. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  530. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  531. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  532. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  533. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  534. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  535. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/relicence-apache-2.md +0 -0
  536. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  537. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  538. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  539. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  540. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  541. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  542. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  543. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  544. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  545. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  546. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  547. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  548. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  549. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  550. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  551. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  552. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  553. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  554. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  555. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  556. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  557. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  558. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  559. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  560. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  561. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  562. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  563. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  564. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  565. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  566. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  567. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  568. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  569. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  570. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  571. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  572. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  573. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  574. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/shrink-the-published-index.md +0 -0
  575. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  576. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  577. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  578. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  579. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  580. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  581. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  582. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  583. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  584. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  585. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  586. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  587. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  588. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  589. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  590. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  591. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  592. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  593. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  594. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  595. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  596. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  597. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  598. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  599. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  600. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  601. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  602. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  603. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  604. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  605. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  606. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  607. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  608. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  609. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  610. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  611. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  612. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  613. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  614. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  615. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  616. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  617. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  618. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/workspace-scope-install.md +0 -0
  619. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/zip-strict-audit.md +0 -0
  620. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  621. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  622. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/security-design.md +0 -0
  623. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/semantic-search.md +0 -0
  624. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  625. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/verifying-releases.md +0 -0
  626. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/vex/meta.md +0 -0
  627. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/vex/openvex.json +0 -0
  628. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  629. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  630. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  631. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  632. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/eslint.config.mjs +0 -0
  633. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/README.md +0 -0
  634. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/__init__.py +0 -0
  635. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/baseline.json +0 -0
  636. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/faithfulness.py +0 -0
  637. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/golden_set.json +0 -0
  638. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/make_corpus.py +0 -0
  639. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/make_golden.py +0 -0
  640. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/metrics.py +0 -0
  641. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/publish_golden_dataset.py +0 -0
  642. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/evals/run_evals.py +0 -0
  643. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/examples/README.md +0 -0
  644. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/examples/adapt-demo.sh +0 -0
  645. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/examples/boost-run-prototype.sh +0 -0
  646. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/index.html +0 -0
  647. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/noxfile.py +0 -0
  648. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/pyproject.toml +0 -0
  649. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/coverage-tools.in +0 -0
  650. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/coverage-tools.txt +0 -0
  651. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/lint-tools.in +0 -0
  652. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/lint-tools.txt +0 -0
  653. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/mutation-tools.in +0 -0
  654. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/mutation-tools.txt +0 -0
  655. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/platform-pins.lock +0 -0
  656. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/release-tools.in +0 -0
  657. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/release-tools.txt +0 -0
  658. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/test-tools.in +0 -0
  659. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/requirements/test-tools.txt +0 -0
  660. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/a11y_check.py +0 -0
  661. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/add_spdx_headers.py +0 -0
  662. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/bench_cli.sh +0 -0
  663. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/build_command_reference.py +0 -0
  664. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/build_demo_index.py +0 -0
  665. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/build_registries.py +0 -0
  666. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/build_roadmap.py +0 -0
  667. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/build_scale_corpus.py +0 -0
  668. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/build_vex.py +0 -0
  669. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/check_anchors.py +0 -0
  670. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/check_branch_current.py +0 -0
  671. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/check_dco.py +0 -0
  672. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/check_licenses.py +0 -0
  673. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/check_reproducible.py +0 -0
  674. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/check_required_checks.py +0 -0
  675. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/ensure_eval_corpus.sh +0 -0
  676. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/eval_corpus.py +0 -0
  677. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/eval_explain.py +0 -0
  678. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/eval_gate.py +0 -0
  679. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/eval_recommend.py +0 -0
  680. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/eval_retrieval.py +0 -0
  681. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/eval_stats_summary.py +0 -0
  682. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/eval_tools.py +0 -0
  683. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/import_budget.py +0 -0
  684. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/lock_toolchain.py +0 -0
  685. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/measure_near_duplicate_bound.py +0 -0
  686. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/measure_registry.py +0 -0
  687. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/mutation_gate.py +0 -0
  688. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/mutation_shards.py +0 -0
  689. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/mutation_weights.json +0 -0
  690. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/normalize_sdist.py +0 -0
  691. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/page_budget.py +0 -0
  692. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/perf_gate.py +0 -0
  693. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/post_deploy_smoke.py +0 -0
  694. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/publish_eval_json.py +0 -0
  695. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/publish_shards.py +0 -0
  696. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/release_guard.py +0 -0
  697. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/release_preflight.py +0 -0
  698. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/serve_docs.py +0 -0
  699. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/scripts/shard_plan.py +0 -0
  700. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/setup.cfg +0 -0
  701. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/sonar-project.properties +0 -0
  702. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/style/README.md +0 -0
  703. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/style/boost.css +0 -0
  704. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/style/boost.js +0 -0
  705. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/style/demo.html +0 -0
  706. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/adapt.feature +0 -0
  707. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/browse.feature +0 -0
  708. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/count.feature +0 -0
  709. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/discover.feature +0 -0
  710. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/doctor.feature +0 -0
  711. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/environment.py +0 -0
  712. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/explain.feature +0 -0
  713. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/index.feature +0 -0
  714. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/install.feature +0 -0
  715. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/list.feature +0 -0
  716. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/mcp.feature +0 -0
  717. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/search.feature +0 -0
  718. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/steps/cli_steps.py +0 -0
  719. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/steps/discovery_steps.py +0 -0
  720. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/steps/mcp_steps.py +0 -0
  721. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/bdd/features/steps/quality_steps.py +0 -0
  722. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/conftest.py +0 -0
  723. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/eval/baseline.json +0 -0
  724. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/eval/explain.jsonl +0 -0
  725. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  726. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/eval/golden-natural.jsonl +0 -0
  727. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/eval/golden.jsonl +0 -0
  728. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/eval/recommend.jsonl +0 -0
  729. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/eval/taps-scale.txt +0 -0
  730. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/eval/taps.txt +0 -0
  731. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/eval/tool_calls.jsonl +0 -0
  732. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_bmad_all_hosts.py +0 -0
  733. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_capabilities_policy.py +0 -0
  734. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_adapt.py +0 -0
  735. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_catalog.py +0 -0
  736. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_chat.py +0 -0
  737. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_hooks_gemini.py +0 -0
  738. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_pane_width.py +0 -0
  739. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_quickstart.py +0 -0
  740. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_cli_tap_pins.py +0 -0
  741. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_everyday_loop.py +0 -0
  742. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_integrity_enforce.py +0 -0
  743. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_kind_conformance.py +0 -0
  744. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_property_parsers.py +0 -0
  745. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_run.py +0 -0
  746. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/functional/test_workspace_scope.py +0 -0
  747. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/README.md +0 -0
  748. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  749. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  750. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  751. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  752. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  753. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  754. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  755. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  756. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  757. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  758. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  759. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  760. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  761. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  762. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  763. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  764. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  765. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  766. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  767. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  768. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  769. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  770. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  771. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/fuzz_frontmatter.py +0 -0
  772. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/fuzz/fuzz_registry.py +0 -0
  773. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/langchain/conftest.py +0 -0
  774. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/langchain/test_graph.py +0 -0
  775. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/langchain/test_loader.py +0 -0
  776. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/langchain/test_retriever.py +0 -0
  777. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/make_fixture.py +0 -0
  778. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/perf/test_benchmarks.py +0 -0
  779. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/smoke.sh +0 -0
  780. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_a11y_check.py +0 -0
  781. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_action_pin_lockstep.py +0 -0
  782. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_adapters.py +0 -0
  783. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_adapters_multi.py +0 -0
  784. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_agents.py +0 -0
  785. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_ai.py +0 -0
  786. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_aihost.py +0 -0
  787. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_boost_first_offer.py +0 -0
  788. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_bootstrap.py +0 -0
  789. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_bot_pr_dco.py +0 -0
  790. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_branch_current.py +0 -0
  791. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_browse.py +0 -0
  792. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_builtin.py +0 -0
  793. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_capabilities.py +0 -0
  794. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_catalog.py +0 -0
  795. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_catalogbundle.py +0 -0
  796. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_chat.py +0 -0
  797. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_check_anchors.py +0 -0
  798. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_check_dco.py +0 -0
  799. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_check_licenses.py +0 -0
  800. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_check_reproducible.py +0 -0
  801. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_clean_internal_cache.py +0 -0
  802. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_cli_update_shards.py +0 -0
  803. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_cliparse.py +0 -0
  804. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_codeql_analysis_key.py +0 -0
  805. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_command_reference_fresh.py +0 -0
  806. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_community_health_files.py +0 -0
  807. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_compact.py +0 -0
  808. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_complete.py +0 -0
  809. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_complete_rc_block.py +0 -0
  810. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_config.py +0 -0
  811. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_content_dedupe.py +0 -0
  812. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_content_identity.py +0 -0
  813. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_crash_redaction.py +0 -0
  814. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dedup_trust.py +0 -0
  815. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_demo_index.py +0 -0
  816. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense.py +0 -0
  817. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  818. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_embed_dedupe.py +0 -0
  819. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_entry_reuse.py +0 -0
  820. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_entry_vectors.py +0 -0
  821. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_fallback.py +0 -0
  822. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_fix_hint.py +0 -0
  823. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_progress.py +0 -0
  824. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_quantized.py +0 -0
  825. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_ready_order.py +0 -0
  826. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_shard_real_schema.py +0 -0
  827. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  828. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_shards.py +0 -0
  829. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_status.py +0 -0
  830. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_status_cheap.py +0 -0
  831. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dense_vector_dedupe.py +0 -0
  832. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_dependabot_config.py +0 -0
  833. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_distill_merge.py +0 -0
  834. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_docs_pages_linked.py +0 -0
  835. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_docsite_chrome.py +0 -0
  836. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_doctor_output_polish.py +0 -0
  837. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_drift_hint.py +0 -0
  838. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_ed25519.py +0 -0
  839. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_embed.py +0 -0
  840. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_embed_local.py +0 -0
  841. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_embed_truncated_response.py +0 -0
  842. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_entry_key.py +0 -0
  843. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_errors_and_cli_table.py +0 -0
  844. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_eval_baseline.py +0 -0
  845. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_eval_corpus.py +0 -0
  846. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_eval_faithfulness.py +0 -0
  847. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_eval_gate.py +0 -0
  848. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_eval_grading.py +0 -0
  849. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_eval_metrics.py +0 -0
  850. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_eval_stats_summary.py +0 -0
  851. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_eval_tools.py +0 -0
  852. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_eval_tools_probe.py +0 -0
  853. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  854. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_fuzz_targets.py +0 -0
  855. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  856. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_gitleaks_config.py +0 -0
  857. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_gitutil.py +0 -0
  858. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_gitutil_lfs.py +0 -0
  859. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_gitutil_sparse.py +0 -0
  860. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_gstack_coexistence.py +0 -0
  861. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_hook_settings_hosts.py +0 -0
  862. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_hookhost.py +0 -0
  863. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_imperative.py +0 -0
  864. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_import_budget.py +0 -0
  865. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_injectscan.py +0 -0
  866. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_install_permission_error.py +0 -0
  867. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_installscan.py +0 -0
  868. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_journal.py +0 -0
  869. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_jsonstate.py +0 -0
  870. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_langchain_packaging.py +0 -0
  871. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_link_ownership.py +0 -0
  872. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_localembed.py +0 -0
  873. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_localembed_e2e.py +0 -0
  874. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_logs.py +0 -0
  875. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_marketing_counts.py +0 -0
  876. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_mcp.py +0 -0
  877. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_mcp_install_scan.py +0 -0
  878. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_mcp_read.py +0 -0
  879. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_mcpdecl.py +0 -0
  880. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_mcphost.py +0 -0
  881. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_measure_registry.py +0 -0
  882. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_minisign.py +0 -0
  883. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_mutation_hardening.py +0 -0
  884. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_mutation_shards.py +0 -0
  885. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_mutation_subfile_shards.py +0 -0
  886. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_mutmut_source_paths.py +0 -0
  887. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_near_duplicate_collapse.py +0 -0
  888. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_nethttp.py +0 -0
  889. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_normalize_sdist.py +0 -0
  890. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_page_budget.py +0 -0
  891. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_paths.py +0 -0
  892. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_perf_gate.py +0 -0
  893. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_pkg_confusions.py +0 -0
  894. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_pkg_injection.py +0 -0
  895. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_pkg_secrets.py +0 -0
  896. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_platform_pins.py +0 -0
  897. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_policy.py +0 -0
  898. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_post_deploy_smoke.py +0 -0
  899. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_project_mcp_sidecar.py +0 -0
  900. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_projectlock.py +0 -0
  901. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_provenance.py +0 -0
  902. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_publish_golden_dataset.py +0 -0
  903. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_rag.py +0 -0
  904. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_rag_fastpath.py +0 -0
  905. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_rag_fusion.py +0 -0
  906. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_registries_fresh.py +0 -0
  907. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_registry.py +0 -0
  908. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_registry_categories.py +0 -0
  909. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_registry_control_chars.py +0 -0
  910. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_registry_parallel.py +0 -0
  911. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_release_guard.py +0 -0
  912. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_release_preflight.py +0 -0
  913. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_required_checks.py +0 -0
  914. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_rerank_cache.py +0 -0
  915. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_resolve.py +0 -0
  916. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
  917. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_roadmap_fresh.py +0 -0
  918. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_rules.py +0 -0
  919. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_scale_corpus.py +0 -0
  920. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_scopes.py +0 -0
  921. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_secretscan.py +0 -0
  922. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_selfupdate.py +0 -0
  923. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_serve.py +0 -0
  924. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_serve_docs.py +0 -0
  925. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_shard_plan.py +0 -0
  926. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_shards.py +0 -0
  927. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_shards_incremental.py +0 -0
  928. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_shards_ingest.py +0 -0
  929. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_shards_matrix.py +0 -0
  930. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_smoke_covers_every_command.py +0 -0
  931. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_spdx_headers.py +0 -0
  932. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_spin.py +0 -0
  933. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_stackprobe.py +0 -0
  934. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_staleness.py +0 -0
  935. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_store.py +0 -0
  936. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_store_materialize.py +0 -0
  937. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_sync_blocked_links.py +0 -0
  938. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  939. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_tap_pins.py +0 -0
  940. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_token_parity.py +0 -0
  941. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_toolchain_lock.py +0 -0
  942. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_trustaudit.py +0 -0
  943. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_typedvalue.py +0 -0
  944. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_typosquat.py +0 -0
  945. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_updatediff.py +0 -0
  946. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_version.py +0 -0
  947. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_version_tags.py +0 -0
  948. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_vex.py +0 -0
  949. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_visual_harness_flags.py +0 -0
  950. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_workflow_concurrency.py +0 -0
  951. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  952. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  953. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_workflow_timeouts.py +0 -0
  954. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_workflows.py +0 -0
  955. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  956. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/visual/a11y_check.mjs +0 -0
  957. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/visual/console_check.mjs +0 -0
  958. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/visual/package-lock.json +0 -0
  959. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/tests/visual/package.json +0 -0
  960. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.96}/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.95
3
+ Version: 1.2.96
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.95'
22
- __version_tuple__ = version_tuple = (1, 2, 95)
21
+ __version__ = version = '1.2.96'
22
+ __version_tuple__ = version_tuple = (1, 2, 96)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -138,6 +138,17 @@ def cmd_bmad(argv) -> int:
138
138
 
139
139
  # ------------------------------------------------------------------- autopilot
140
140
 
141
+ def _on_off(value) -> str:
142
+ """Render any truthy/falsy value as ``"on"``/``"off"``.
143
+
144
+ `doctor` used to format some booleans as ``on``/``off`` and others as
145
+ Python's ``True``/``False`` in the same block of output — "installed=False"
146
+ printed right beside "autopilot=off". One helper keeps every boolean field
147
+ in one vocabulary.
148
+ """
149
+ return "on" if value else "off"
150
+
151
+
141
152
  def _agents_dir(scope) -> Path:
142
153
  """Where Claude Code reads subagent definitions for a scope."""
143
154
  base = paths.home() if scope == "global" else Path.cwd()
@@ -216,18 +227,22 @@ def _add_hook_everywhere(scope: str, spec: tuple, command: str) -> list[str]:
216
227
  return written
217
228
 
218
229
 
219
- def _remove_hook_everywhere(scope: str, *specs: tuple) -> None:
220
- """Remove hooks from every host, installed or not.
230
+ def _remove_hook_everywhere(scope: str, *specs: tuple) -> int:
231
+ """Remove hooks from every host, installed or not. Returns how many were.
221
232
 
222
233
  Unlike install this does not filter on `shutil.which`: someone who removed
223
234
  an agent CLI still wants boost's hooks gone from its settings.json, and
224
- `remove_hook` against a file that was never written is a no-op.
235
+ `remove_hook` against a file that was never written is a no-op — which is
236
+ exactly why the count matters: a caller that hardcodes "both hooks" in its
237
+ report is claiming work that a second, no-op `off` never did.
225
238
  """
239
+ removed = 0
226
240
  for host in hookhost.hosts():
227
241
  for event, name, _matcher in specs:
228
242
  target = hookhost.translate(host, event)
229
243
  if target is not None:
230
- cs.remove_hook(scope, target, name, host=host)
244
+ removed += cs.remove_hook(scope, target, name, host=host)
245
+ return removed
231
246
 
232
247
 
233
248
  def _autopilot_on(scope) -> int:
@@ -239,7 +254,12 @@ def _autopilot_on(scope) -> int:
239
254
  """
240
255
  scope = scope or "global"
241
256
  agents = _agents_dir(scope)
242
- slugs, skipped = core.write_personas(agents)
257
+ _written, skipped = core.write_personas(agents)
258
+ # A skipped (edited) persona file is still on disk and Claude Code still
259
+ # loads it — only the ones neither written nor present at all are truly
260
+ # "not installed", so the reported count is managed + edited, not just
261
+ # what this run happened to (re)write.
262
+ present = len(core.present_personas(agents))
243
263
 
244
264
  launcher = shlex.quote(str(paths.launcher()))
245
265
  hosts = _add_hook_everywhere(
@@ -247,12 +267,12 @@ def _autopilot_on(scope) -> int:
247
267
  _never_fails("%s bmad orient --scope %s" % (launcher, scope)))
248
268
  _add_hook_everywhere(scope, _ROUTE_HOOK,
249
269
  _never_fails("%s bmad route" % launcher))
250
- _set_scope_state(scope, autopilot=True, startup=True, personas=len(slugs),
270
+ _set_scope_state(scope, autopilot=True, startup=True, personas=present,
251
271
  enabled_at=util.now_iso())
252
- journal.log("bmad-autopilot", "on", scope=scope, personas=len(slugs))
272
+ journal.log("bmad-autopilot", "on", scope=scope, personas=present)
253
273
 
254
274
  out.ok("BMAD autopilot ON (%s) — %d persona subagent(s) + prompt router"
255
- % (scope, len(slugs)))
275
+ % (scope, present))
256
276
  if skipped:
257
277
  out.warn("kept your edits to %d persona(s): %s"
258
278
  % (len(skipped), ", ".join(skipped)))
@@ -274,12 +294,12 @@ def _autopilot_on(scope) -> int:
274
294
 
275
295
  def _autopilot_off(scope) -> int:
276
296
  scope = scope or "global"
277
- _remove_hook_everywhere(scope, _ORIENT_HOOK, _ROUTE_HOOK)
297
+ hooks_removed = _remove_hook_everywhere(scope, _ORIENT_HOOK, _ROUTE_HOOK)
278
298
  removed = core.remove_personas(_agents_dir(scope))
279
299
  _set_scope_state(scope, autopilot=False, startup=False, personas=0)
280
300
  journal.log("bmad-autopilot", "off", scope=scope, personas=len(removed))
281
- out.ok("BMAD autopilot OFF (%s) — removed %d persona(s) and both hooks"
282
- % (scope, len(removed)))
301
+ out.ok("BMAD autopilot OFF (%s) — removed %d persona(s) and %d hook(s)"
302
+ % (scope, len(removed), hooks_removed))
283
303
  out.dim(" hand-edited personas were left in place")
284
304
  return 0
285
305
 
@@ -335,19 +355,26 @@ def _route(prompt, plain) -> int:
335
355
  return 0
336
356
 
337
357
 
358
+ _PERSONA_STATE_LABEL = {
359
+ "managed": "installed",
360
+ "edited": "installed (edited)",
361
+ "absent": "not installed",
362
+ }
363
+
364
+
338
365
  def _personas(scope) -> int:
339
366
  scope = scope or "global"
340
367
  agents = _agents_dir(scope)
341
- live = set(core.installed_personas(agents))
368
+ states = core.persona_states(agents)
342
369
  out.heading("BMAD personas — %s" % scope)
343
370
  for p in core.PERSONAS:
344
- mark = "installed" if p.slug in live else "not installed"
371
+ mark = _PERSONA_STATE_LABEL[states[p.slug]]
345
372
  # width 16: `bmad-architect` is exactly the default 14, which leaves no
346
373
  # gap between the key and the value.
347
374
  out.kv(p.slug, "%s, %s (%s) — %s"
348
375
  % (p.character, p.title, p.module, mark), width=16)
349
376
  out.dim(" → %s" % paths.tilde(agents))
350
- if not live:
377
+ if all(state == "absent" for state in states.values()):
351
378
  out.dim(" install them with `boost bmad on`")
352
379
  return 0
353
380
 
@@ -456,8 +483,8 @@ def _copy_global_skills(modules) -> int:
456
483
  def _startup(value, scope) -> int:
457
484
  scope = scope or "project"
458
485
  if value == "on":
459
- cmd = "%s bmad orient --scope %s" % (
460
- shlex.quote(str(paths.launcher())), scope)
486
+ cmd = _never_fails("%s bmad orient --scope %s" % (
487
+ shlex.quote(str(paths.launcher())), scope))
461
488
  started = _add_hook_everywhere(scope, _ORIENT_HOOK, cmd)
462
489
  _set_scope_state(scope, startup=True)
463
490
  journal.log("bmad-startup", "on", scope=scope)
@@ -471,7 +498,10 @@ def _startup(value, scope) -> int:
471
498
  journal.log("bmad-startup", "off", scope=scope)
472
499
  out.ok("BMAD startup OFF (%s) — skills stay installed" % scope)
473
500
  return 0
474
- return _status(scope)
501
+ if value == "status":
502
+ return _status(scope)
503
+ raise BoostError("unknown startup value %r" % value,
504
+ hint="use 'on', 'off' or 'status'")
475
505
 
476
506
 
477
507
  def _orient(scope) -> int:
@@ -570,15 +600,16 @@ def _doctor() -> int:
570
600
  for scope in ("global", "project"):
571
601
  st = _get_scope_state(scope)
572
602
  agents = _agents_dir(scope)
573
- personas = len(core.installed_personas(agents))
603
+ # managed + edited: an edited persona file is still on disk and
604
+ # Claude Code still loads it, same as core.present_personas().
605
+ personas = len(core.present_personas(agents))
574
606
  router = cs.has_hook(scope, "UserPromptSubmit", ROUTE_HOOK_NAME)
575
607
  live = bool(st.get("autopilot")) and router
576
608
  out.kv(scope, "autopilot=%s %d personas router=%s briefing=%s"
577
- % ("on" if live else "off", personas,
578
- "on" if router else "off",
579
- "on" if cs.has_hook(scope, "SessionStart", HOOK_NAME) else "off"))
609
+ % (_on_off(live), personas, _on_off(router),
610
+ _on_off(cs.has_hook(scope, "SessionStart", HOOK_NAME))))
580
611
  out.kv(" workflows", "skills=%d installed=%s"
581
- % (_count_skills(_skills_dir(scope)), bool(st.get("installed"))))
612
+ % (_count_skills(_skills_dir(scope)), _on_off(st.get("installed"))))
582
613
  out.dim(" project = %s" % Path.cwd())
583
614
  if not any(_get_scope_state(s).get("autopilot") for s in ("global", "project")):
584
615
  out.dim(" turn it on with `boost bmad on`")
@@ -77,12 +77,16 @@ def cmd_config(argv) -> int:
77
77
  p.add_argument("--json", action="store_true",
78
78
  help="machine-readable output")
79
79
  args = p.parse_args(argv)
80
+ if args.action == "list" and (args.key or args.value is not None):
81
+ p.error("config list takes no KEY/VALUE")
80
82
  if args.action in ("get", "set", "unset") and not args.key:
81
83
  raise BoostError("config %s requires a KEY" % args.action,
82
84
  hint="e.g. `boost config %s ai.enabled`" % args.action)
83
85
  if args.action == "set" and args.value is None:
84
86
  raise BoostError("config set requires a VALUE",
85
87
  hint="e.g. `boost config set ai.enabled false`")
88
+ if args.action in ("get", "unset") and args.value is not None:
89
+ p.error("config %s takes no VALUE" % args.action)
86
90
 
87
91
  if args.action == "list":
88
92
  cfg = config.load()
@@ -476,6 +480,9 @@ def cmd_policy(argv) -> int:
476
480
  help="machine-readable output")
477
481
  args = p.parse_args(argv)
478
482
 
483
+ if args.action in ("list", "check") and (args.key or args.value is not None):
484
+ p.error("policy %s takes no KEY/VALUE" % args.action)
485
+
479
486
  if args.action in ("set", "unset"):
480
487
  if not args.key:
481
488
  raise BoostError("policy %s requires a KEY" % args.action,
@@ -483,6 +490,8 @@ def cmd_policy(argv) -> int:
483
490
  if args.key not in policy.DEFAULTS:
484
491
  raise BoostError("unknown policy key %r" % args.key,
485
492
  hint="keys: " + ", ".join(sorted(policy.DEFAULTS)))
493
+ if args.action == "unset" and args.value is not None:
494
+ p.error("policy unset takes no VALUE")
486
495
 
487
496
  if args.action == "list":
488
497
  pol = policy.load()
@@ -939,11 +948,13 @@ def cmd_schedule(argv) -> int:
939
948
  p.add_argument("action", nargs="?", default="status",
940
949
  choices=("status", "enable", "disable"),
941
950
  help="what to do (default: status)")
942
- p.add_argument("--interval", choices=tuple(_INTERVALS), default="6h",
943
- help="how often to run `boost update` (default: 6h)")
951
+ p.add_argument("--interval", choices=tuple(_INTERVALS), default=None,
952
+ help="how often to run `boost update` (default: 6h; enable only)")
944
953
  p.add_argument("--json", action="store_true",
945
954
  help="machine-readable output (status only)")
946
955
  args = p.parse_args(argv)
956
+ if args.interval is not None and args.action != "enable":
957
+ p.error("--interval only applies to `schedule enable`")
947
958
 
948
959
  darwin = sys.platform == "darwin"
949
960
  shim = paths.launcher()
@@ -992,6 +1003,7 @@ def cmd_schedule(argv) -> int:
992
1003
  return 0
993
1004
 
994
1005
  if args.action == "enable":
1006
+ args.interval = args.interval or "6h"
995
1007
  seconds = _INTERVALS[args.interval]
996
1008
  paths.ensure_dirs()
997
1009
  if darwin:
@@ -132,23 +132,31 @@ def cmd_search(argv):
132
132
  "building the search index (first run)"):
133
133
  use_rag = rag.ensure()
134
134
  engine = ""
135
+ hit_cap = False
136
+ k = 0
135
137
  if use_rag:
136
138
  # retrieve_any, not retrieve: this picks the dense backend when one is
137
139
  # built and floors to BM25 otherwise, so the CLI and the MCP server
138
140
  # answer from the same engine instead of the CLI being BM25-only.
141
+ k = max(60, args.limit * 4)
139
142
  hits, engine = rag.retrieve_any(
140
- query, k=max(60, args.limit * 4),
141
- collapse_near_duplicates=args.collapse_dupes)
142
- scored = [(h["entry"], h["score"]) for h in (hits or [])]
143
+ query, k=k, collapse_near_duplicates=args.collapse_dupes)
144
+ hits = hits or []
145
+ # Retrieval never returns more than `k` — hitting that cap means
146
+ # there may be more matches beyond it, not that there are exactly
147
+ # `k`. Recorded before the category filter narrows the count further,
148
+ # because the cap was already in effect at retrieval time either way.
149
+ hit_cap = len(hits) >= k
150
+ scored = [(h["entry"], h["score"]) for h in hits]
143
151
  else:
144
152
  scored = catalog.search(query)
145
153
  if args.category:
146
154
  scored = [(e, s) for e, s in scored
147
155
  if catalog.matches_category(e, args.category)]
148
- if args.as_json:
149
- print(json.dumps([e | {"score": s} for e, s in scored[:args.limit]]))
150
- return 0
151
156
  if not scored:
157
+ if args.as_json:
158
+ print(json.dumps([]))
159
+ return 0
152
160
  # The standardized ○/→ empty state, so "nothing here" reads the same
153
161
  # as every other command's; both wordings are pinned by tests.
154
162
  print(out.empty_state(
@@ -170,7 +178,13 @@ def cmd_search(argv):
170
178
  if reranked:
171
179
  scored, ranker = reranked, "Claude Haiku relevance"
172
180
  else:
181
+ # On stderr and unconditional on --json: a script reading stdout
182
+ # as JSON must still learn --smart silently did nothing.
173
183
  out.warn(ai.fallback_note(), wrap=True, stream=sys.stderr)
184
+ if args.as_json:
185
+ print(json.dumps([e | {"score": s, "ranker": ranker}
186
+ for e, s in scored[:args.limit]]))
187
+ return 0
174
188
  shown = scored[:args.limit]
175
189
  # The dot marks "a skill by this name is installed" — a name match, with
176
190
  # the known homonym caveat (13 real skills share `code-reviewer`). A lock
@@ -192,8 +206,16 @@ def cmd_search(argv):
192
206
  str(e.get("kind") or "skill"), str(e.get("tap") or ""), sc / top,
193
207
  curated=bool(e.get("curated")),
194
208
  installed=e["name"] in installed, lay=lay))
195
- out.info(out.role("%d match%s · ranked by %s"
196
- % (len(scored), "" if len(scored) == 1 else "es", ranker), "muted"))
209
+ if hit_cap:
210
+ # `len(scored)` here is the retrieval cap, not a true count — retrieval
211
+ # stopped at `k` and there may be more matches past it. Say what is
212
+ # actually known (the cap), not a number that reads as exact but is an
213
+ # artifact of `k = max(60, limit * 4)`.
214
+ footer = "top %d of %d+ retrieved · ranked by %s" % (len(shown), k, ranker)
215
+ else:
216
+ footer = ("%d match%s · ranked by %s"
217
+ % (len(scored), "" if len(scored) == 1 else "es", ranker))
218
+ out.info(out.role(footer, "muted"))
197
219
  if use_rag:
198
220
  _note_stem_expansions(query)
199
221
  _hint_semantic_search(engine)
@@ -38,7 +38,8 @@ def cmd_hooks(argv) -> int:
38
38
  p.add_argument("action", choices=("add", "remove", "list"),
39
39
  help="add | remove | list")
40
40
  p.add_argument("event", nargs="?",
41
- help="hook event, e.g. SessionStart (required for add)")
41
+ help="hook event, e.g. SessionStart "
42
+ "(required for add; filters remove/list)")
42
43
  p.add_argument("--host", metavar="H", default=None,
43
44
  choices=(*hookhost.hosts(), "auto"),
44
45
  help="agent CLI whose settings.json to manage: %s "
@@ -55,16 +56,22 @@ def cmd_hooks(argv) -> int:
55
56
  args = p.parse_args(argv)
56
57
 
57
58
  if args.action == "list":
58
- return _list(args.scope, args.host)
59
+ return _list(args.scope, args.host, args.event)
59
60
  if args.action == "add":
60
61
  return _add(args)
61
62
  return _remove(args)
62
63
 
63
64
 
64
- def _list(scope, host) -> int:
65
+ def _list(scope, host, event=None) -> int:
65
66
  rows = cs.list_all_hooks(scope, host=host)
67
+ if event:
68
+ # Each row is already tagged with its own host, so filter against
69
+ # that host's native spelling rather than the one the caller typed —
70
+ # `hooks list` (no --host) mixes Claude and Gemini rows in one table.
71
+ rows = [r for r in rows if r["event"] == hookhost.translate(r["host"], event)]
66
72
  if not rows:
67
- out.info("no boost-managed hooks" + (" in %s scope" % scope if scope else ""))
73
+ out.info("no boost-managed hooks" + (" in %s scope" % scope if scope else "")
74
+ + (" for event '%s'" % event if event else ""))
68
75
  return 0
69
76
  out.table(
70
77
  [(r["host"], r["scope"], r["event"], r["name"], r["matcher"] or "-",
@@ -849,6 +849,8 @@ def cmd_log(argv):
849
849
  ap.add_argument("--crashes", action="store_true",
850
850
  help="list recent crash reports")
851
851
  args = ap.parse_args(argv)
852
+ if args.name and (args.crashes or args.diagnostics):
853
+ ap.error("NAME is not used with --diagnostics/--crashes")
852
854
  if args.crashes:
853
855
  return _show_crashes(args.limit)
854
856
  if args.diagnostics:
@@ -812,16 +812,23 @@ def _evolve_ai(old: str, old_ver: str, feedback: str) -> str | None:
812
812
 
813
813
 
814
814
  def _evolve_append(old: str, old_ver: str, feedback: str) -> str:
815
- """Heuristic revision: feedback appended as a dated rules section."""
816
- meta, body = frontmatter.parse(old)
817
- meta["version"] = _bump_patch(old_ver)
815
+ """Heuristic revision: feedback appended as a dated rules section.
816
+
817
+ Splices the bumped ``version`` into the original frontmatter text
818
+ (`frontmatter.set_field`) rather than parsing to a dict and dumping it
819
+ back — a parse -> dump round trip rewrites every field through dump's
820
+ own quoting rules, turning a diff that only bumped the version into one
821
+ that also silently reformats every other line the feedback never
822
+ touched.
823
+ """
824
+ revised = frontmatter.set_field(old, "version", _bump_patch(old_ver))
825
+ block, body = frontmatter.split(revised)
818
826
  bullets = [s.strip().rstrip(".")
819
827
  for s in re.split(r"(?<=[.!?])\s+|\n+|;\s*", feedback)
820
828
  if s.strip()]
821
829
  section = ("## Feedback (%s)\n\n" % util.now_iso()[:10]
822
830
  + "\n".join("- %s." % b for b in bullets))
823
- return (frontmatter.dump(meta) + "\n\n" + body.strip()
824
- + "\n\n" + section + "\n")
831
+ return "---\n%s\n---\n\n%s\n\n%s\n" % (block, body.strip(), section)
825
832
 
826
833
 
827
834
  def _print_diff(old: str, new: str) -> None:
@@ -1423,9 +1423,10 @@ def cmd_import(argv: list[str]) -> int:
1423
1423
  prog="boost import",
1424
1424
  description="Import skills from a GitHub URL or local path")
1425
1425
  ap.add_argument("source", metavar="URL_OR_PATH")
1426
- ap.add_argument("--name", metavar="N",
1427
- help="skill to pick when several are found (or a rename)")
1428
- ap.add_argument("--all", action="store_true", help="import every skill found")
1426
+ group = ap.add_mutually_exclusive_group()
1427
+ group.add_argument("--name", metavar="N",
1428
+ help="skill to pick when several are found (or a rename)")
1429
+ group.add_argument("--all", action="store_true", help="import every skill found")
1429
1430
  ap.add_argument("--agent", action="append", metavar="A",
1430
1431
  help="link only into this agent (repeatable)")
1431
1432
  args = ap.parse_args(argv)
@@ -1575,6 +1576,8 @@ def cmd_snapshot(argv: list[str]) -> int:
1575
1576
  ap.add_argument("-y", "--yes", action="store_true",
1576
1577
  help="skip the restore confirmation prompt")
1577
1578
  args = ap.parse_args(argv)
1579
+ if args.action == "list" and args.arg:
1580
+ ap.error("snapshot list takes no LABEL|ID")
1578
1581
  if args.action == "save":
1579
1582
  return _snapshot_save(args.arg)
1580
1583
  if args.action == "list":
@@ -1397,6 +1397,13 @@ def cmd_trust(argv) -> int:
1397
1397
  p.add_argument("--json", action="store_true", help="machine-readable output")
1398
1398
  args = p.parse_args(argv)
1399
1399
 
1400
+ if args.action == "list" and (args.name or args.key):
1401
+ p.error("trust list takes no NAME/KEY")
1402
+ if args.action == "remove" and args.key:
1403
+ p.error("trust remove takes no KEY")
1404
+ if args.action == "verify" and args.key:
1405
+ p.error("trust verify takes no KEY")
1406
+
1400
1407
  if args.action == "add":
1401
1408
  if not args.name or not args.key:
1402
1409
  raise BoostError("trust add requires NAME and KEY",
@@ -431,7 +431,9 @@ def cmd_verify(argv):
431
431
  commit_pin = integrity.commit_status(name, entry)
432
432
  results.append({"name": name, "kind": kind, "status": status,
433
433
  "scope": "user", "missing_fields": missing_fields,
434
- "commit_pin": commit_pin})
434
+ "commit_pin": commit_pin,
435
+ "passed": integrity.verification_passed(
436
+ status, missing_fields, commit_pin)})
435
437
 
436
438
  # Vendored, project-scoped skills live in the repo's own lock, not the user's
437
439
  # — and they are exactly the ones worth verifying, since they arrive by PR
@@ -446,11 +448,11 @@ def cmd_verify(argv):
446
448
  missing_fields.append("sha256")
447
449
  results.append({"name": name, "kind": "skill", "status": status,
448
450
  "scope": "project", "missing_fields": missing_fields,
449
- "commit_pin": None})
451
+ "commit_pin": None,
452
+ "passed": integrity.verification_passed(
453
+ status, missing_fields, None)})
450
454
 
451
- bad = [r for r in results
452
- if r["status"] not in ("ok", "quarantined") or r["missing_fields"]
453
- or r["commit_pin"] == integrity.STATUS_MODIFIED]
455
+ bad = [r for r in results if not r["passed"]]
454
456
  if args.json:
455
457
  print(json.dumps({"skills": results, "failed": len(bad)}))
456
458
  return 1 if bad else 0
@@ -460,8 +462,6 @@ def cmd_verify(argv):
460
462
  hint="boost install <skill> to start"))
461
463
  return 0
462
464
  width = max(len(r["name"]) for r in results)
463
- status_role = {"ok": "success", "modified": "warn", "missing": "danger",
464
- "unlocked": "warn", "quarantined": "muted"}
465
465
  for r in results:
466
466
  bits = []
467
467
  if r.get("kind") not in (None, "skill"):
@@ -476,7 +476,9 @@ def cmd_verify(argv):
476
476
  bits.append("commit pin DRIFTED")
477
477
  note = (" " + " · ".join(bits)) if bits else ""
478
478
  print(" %s %s%s" % (r["name"].ljust(width),
479
- out.role(r["status"], status_role.get(r["status"], "warn")),
479
+ out.role(r["status"],
480
+ integrity.verification_role(
481
+ r["status"], r["passed"])),
480
482
  out.role(note, "muted")))
481
483
  if bad:
482
484
  out.warn("%d of %d item%s failed verification"
@@ -226,7 +226,13 @@ def cmd_untap(argv) -> int:
226
226
 
227
227
 
228
228
  def _tap_updated(tap: registry.Tap) -> str:
229
- """Last-commit date of a tap clone, else the cache's generated age."""
229
+ """Last-commit date of a tap clone, else the cache's generated date.
230
+
231
+ Both branches return the same `YYYY-MM-DD` shape (`util.iso_date`
232
+ mirrors git's `--date=short`) — the two-format mix this used to produce
233
+ (git dates for cloned taps, "3h ago" for cache-only ones) is exactly the
234
+ UPDATED-column inconsistency this function exists to not reintroduce.
235
+ """
230
236
  if tap.is_cloned:
231
237
  with suppress(BoostError):
232
238
  # --date=short --format=%cd == %cs, but works on git < 2.21 too
@@ -236,7 +242,7 @@ def _tap_updated(tap: registry.Tap) -> str:
236
242
  return proc.stdout.strip()
237
243
  try:
238
244
  data = json.loads(tap.cache_file.read_text(encoding="utf-8"))
239
- return util.rel_time(data.get("generated", ""))
245
+ return util.iso_date(data.get("generated", ""))
240
246
  except (OSError, ValueError):
241
247
  return "?"
242
248
 
@@ -284,6 +290,8 @@ def cmd_taps(argv) -> int:
284
290
  keep=("NAME",))
285
291
  print()
286
292
  out.dim("%d taps · %d items" % (len(taps), total))
293
+ if any(t["pin"] for t in taps):
294
+ out.dim("@sha = pinned; `boost update` skips it")
287
295
  return 0
288
296
 
289
297
 
@@ -702,24 +702,37 @@ def cmd_replay(argv) -> int:
702
702
  if mat_diff:
703
703
  out.warn("not rolled back (rollback restores skills only): %s — "
704
704
  "reinstall or uninstall these by hand" % ", ".join(mat_diff))
705
- if not (added or removed or changed):
705
+
706
+ # A "removed" skill no tap can resolve will never come back through
707
+ # _resolve_entry, so counting it as pending work promised a restore that
708
+ # could never land — and because nothing about that ever changes, every
709
+ # later run repeated the same warning and still claimed "complete". Split
710
+ # it out up front: it never gates the confirm prompt below, only whether
711
+ # there is anything else left to do.
712
+ resolved = {n: _resolve_entry(n, prefer_tap=snap_skills[n].get("tap"))
713
+ for n in removed}
714
+ restorable = [n for n in removed if resolved[n] is not None]
715
+ gone = [n for n in removed if resolved[n] is None]
716
+
717
+ if not (added or restorable or changed):
718
+ for n in gone:
719
+ out.warn("%s is gone from every tap — cannot restore" % n)
706
720
  out.ok("skills already match this snapshot — nothing to do"
707
721
  if mat_diff else "already at this snapshot — nothing to do")
708
722
  return 0
709
723
  out.info("rollback to %s will: uninstall %d, install %d, revisit %d version change(s)"
710
- % (args.id, len(added), len(removed), len(changed)))
724
+ % (args.id, len(added), len(restorable), len(changed)))
711
725
  if not out.confirm("proceed?"):
712
726
  out.info("cancelled")
713
727
  return 1
714
728
  for n in added: # in current, not in snapshot
715
729
  store.uninstall(n)
716
730
  out.ok("uninstalled %s" % n)
717
- for n in removed: # in snapshot, missing now
731
+ for n in gone:
732
+ out.warn("%s is gone from every tap — cannot restore" % n)
733
+ for n in restorable: # in snapshot, missing now, resolvable
718
734
  want = snap_skills[n]
719
- entry = _resolve_entry(n, prefer_tap=want.get("tap"))
720
- if entry is None:
721
- out.warn("%s is gone from every tap — cannot restore" % n)
722
- continue
735
+ entry = resolved[n]
723
736
  res = store.install(entry, force=True)
724
737
  if str(entry.get("version")) != str(want.get("version")):
725
738
  out.warn("restored %s v%s from current tap state (snapshot had v%s)"
@@ -731,6 +744,10 @@ def cmd_replay(argv) -> int:
731
744
  "their current state; `boost pin` prevents future drift"
732
745
  % (n, snap_skills[n].get("version"), current[n].get("version")))
733
746
  journal.log("replay", args.id, op="rollback")
747
+ if gone:
748
+ out.warn("finished with %d skill%s not restored: %s"
749
+ % (len(gone), _s(len(gone)), ", ".join(gone)))
750
+ return 1
734
751
  out.ok("rollback to %s complete" % args.id)
735
752
  return 0
736
753
 
@@ -563,13 +563,30 @@ def render_runner(name: str, description: str, body: str,
563
563
  installed.
564
564
  """
565
565
  brain = render_agents_sdk(name, description, body, model)
566
+ tgt = _clean(target or "")
567
+ # render_agents_sdk's own banner names `boost adapt NAME --to agents-sdk`,
568
+ # which cannot regenerate this file — it produces a short Agent module,
569
+ # not the runner (with its tool defs and Runner.run_sync call) built
570
+ # below. Restamp the inherited first line with the command that actually
571
+ # regenerates what this function returns.
572
+ #
573
+ # A literal newline in `name`/`tgt` would otherwise end the `#` comment
574
+ # mid-banner and hand the rest of the line to the parser as code — the
575
+ # same class of bug this function exists to avoid elsewhere (`_py_str`
576
+ # for the prompt below). A comment tolerates backticks/quotes/`%`
577
+ # unescaped; only line breaks need neutralizing here.
578
+ safe_name = name.replace("\n", " ").replace("\r", " ")
579
+ safe_tgt = tgt.replace("\n", " ").replace("\r", " ")
580
+ banner = ("# Generated by `boost run %s%s --print`. Do not edit by hand.\n"
581
+ % (safe_name, " " + safe_tgt if safe_tgt else ""))
582
+ _, _, rest = brain.partition("\n")
583
+ brain = banner + rest
566
584
  # Capture the adapted agent under a reserved name *before* the tool defs — a
567
585
  # skill literally named `grep`/`read-file`/`list-dir` normalizes (_ident) to
568
586
  # a tool identifier, and the emitted `def grep(...)` would otherwise rebind
569
587
  # (clobber) the brain. `_boost_*` names never collide: _ident strips the
570
588
  # leading underscore, so no skill name maps onto them.
571
589
  capture = "\n_boost_brain = %s\n" % _ident(name)
572
- tgt = _clean(target or "")
573
590
  where = "`" + tgt + "`" if tgt else "the current directory (`.`)"
574
591
  prompt = ("Apply your instructions to %s. Use the read_file, list_dir, and "
575
592
  "grep tools to inspect it, then produce your output." % where)
@@ -691,12 +691,49 @@ def write_personas(agents_dir: Path) -> tuple[list[str], list[str]]:
691
691
 
692
692
 
693
693
  def installed_personas(agents_dir: Path) -> list[str]:
694
- """The personas on disk that boost still owns (stamp digest still matches)."""
694
+ """The personas on disk that boost still owns (stamp digest still matches).
695
+
696
+ This is the *deletion* set — :func:`remove_personas` must only ever touch
697
+ files boost still owns. It is the wrong set for a user-facing count: an
698
+ edited persona file is still on disk and Claude Code still loads it, so
699
+ counting only the managed ones understates what is actually installed.
700
+ Use :func:`present_personas` for that.
701
+ """
695
702
  agents_dir = Path(agents_dir)
696
703
  return sorted(p.slug for p in PERSONAS
697
704
  if is_managed(_read(agents_dir / ("%s.md" % p.slug))))
698
705
 
699
706
 
707
+ def persona_state(agents_dir: Path, persona: Persona) -> str:
708
+ """One of ``"managed"``, ``"edited"`` or ``"absent"`` for one persona file.
709
+
710
+ The three states used to collapse to a boolean — "does boost still own
711
+ this file" — which is right for deciding what `bmad off` may delete and
712
+ wrong for reporting what is installed: an edited file is not boost's to
713
+ delete, but it is still on disk and Claude Code loads it same as any
714
+ other subagent definition.
715
+ """
716
+ path = Path(agents_dir) / ("%s.md" % persona.slug)
717
+ text = _read(path)
718
+ if not text and not path.is_file():
719
+ return "absent"
720
+ return "managed" if is_managed(text) else "edited"
721
+
722
+
723
+ def persona_states(agents_dir: Path) -> dict[str, str]:
724
+ """``{slug: state}`` for every known persona, per :func:`persona_state`."""
725
+ agents_dir = Path(agents_dir)
726
+ return {p.slug: persona_state(agents_dir, p) for p in PERSONAS}
727
+
728
+
729
+ def present_personas(agents_dir: Path) -> list[str]:
730
+ """Slugs whose file exists — managed *or* edited — both are real, working
731
+ subagents from Claude Code's point of view; only "absent" is not installed.
732
+ """
733
+ return sorted(slug for slug, state in persona_states(agents_dir).items()
734
+ if state != "absent")
735
+
736
+
700
737
  def remove_personas(agents_dir: Path) -> list[str]:
701
738
  """Delete only the persona files boost wrote; return the slugs removed.
702
739