boost-skill-cli 1.2.95__tar.gz → 1.2.97__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 (962) hide show
  1. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.vale/styles/config/vocabularies/boost/accept.txt +2 -0
  2. {boost_skill_cli-1.2.95/boost_skill_cli.egg-info → boost_skill_cli-1.2.97}/PKG-INFO +8 -1
  3. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/README.md +7 -0
  4. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/_version.py +2 -2
  5. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/bmad.py +53 -22
  6. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/configuration.py +35 -3
  7. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/discovery.py +58 -14
  8. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/hooks.py +11 -4
  9. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/info.py +13 -1
  10. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/intelligence.py +18 -7
  11. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/pkg.py +22 -10
  12. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/quality.py +39 -12
  13. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/safety.py +10 -8
  14. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/taps.py +43 -21
  15. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/team.py +38 -14
  16. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/adapters.py +18 -1
  17. boost_skill_cli-1.2.97/boost_cli/core/archive.py +79 -0
  18. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/bmad.py +38 -1
  19. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/browse.py +32 -0
  20. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/claude_settings.py +10 -2
  21. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/complete.py +191 -14
  22. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/faithfulness.py +36 -2
  23. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/frontmatter.py +116 -7
  24. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/integrity.py +34 -0
  25. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/lockfile.py +25 -1
  26. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/output.py +42 -27
  27. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/registry.py +14 -1
  28. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/store.py +21 -1
  29. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/util.py +44 -1
  30. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97/boost_skill_cli.egg-info}/PKG-INFO +8 -1
  31. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  32. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/DEBUGGING.md +1 -1
  33. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/bmad.md +7 -0
  34. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/commands.html +5 -5
  35. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-bmad-findings.md +3 -3
  36. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-browse-findings.md +3 -3
  37. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-completions-findings.md +4 -4
  38. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-create-findings.md +3 -3
  39. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-explain-findings.md +3 -3
  40. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-export-findings.md +3 -3
  41. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-health-findings.md +3 -3
  42. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-preview-findings.md +2 -2
  43. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-replay-findings.md +2 -2
  44. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-run-findings.md +2 -2
  45. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-search-findings.md +3 -3
  46. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +3 -3
  47. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +3 -3
  48. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-taps-findings.md +3 -3
  49. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-untap-findings.md +3 -3
  50. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-verify-findings.md +3 -3
  51. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +9 -0
  52. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap.html +44 -27
  53. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/browse.feature +1 -1
  54. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_bmad.py +75 -0
  55. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_configuration.py +111 -1
  56. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_discovery.py +105 -1
  57. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_hooks.py +14 -0
  58. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_info.py +111 -1
  59. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_intelligence.py +36 -0
  60. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_pkg.py +72 -0
  61. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_quality.py +39 -1
  62. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_taps.py +50 -3
  63. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_team.py +55 -0
  64. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_kind_conformance.py +1 -0
  65. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_tap_signing.py +11 -0
  66. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_adapters_runner.py +21 -4
  67. boost_skill_cli-1.2.97/tests/unit/test_archive.py +87 -0
  68. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_bmad_core.py +48 -0
  69. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_browse.py +39 -0
  70. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_claude_settings.py +24 -0
  71. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_complete.py +173 -0
  72. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_faithfulness.py +53 -0
  73. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_frontmatter.py +125 -0
  74. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_integrity.py +60 -0
  75. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_lockfile.py +27 -0
  76. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_output.py +72 -0
  77. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_registry.py +32 -1
  78. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_store.py +45 -0
  79. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_util.py +65 -0
  80. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.gitattributes +0 -0
  81. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.gitignore +0 -0
  82. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.gitleaks.toml +0 -0
  83. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.htmlvalidate.json +0 -0
  84. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.lighthouserc.json +0 -0
  85. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.lycheeignore +0 -0
  86. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.markdownlint-cli2.jsonc +0 -0
  87. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.pre-commit-config.yaml +0 -0
  88. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.stylelintrc.json +0 -0
  89. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.vale/styles/boost/AIWriting.yml +0 -0
  90. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.vale/styles/boost/Terminology.yml +0 -0
  91. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/.vale.ini +0 -0
  92. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/CLAUDE.md +0 -0
  93. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/CODE_OF_CONDUCT.md +0 -0
  94. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/CONTRIBUTING.md +0 -0
  95. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/DCO +0 -0
  96. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/GOVERNANCE.md +0 -0
  97. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/LICENSE +0 -0
  98. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/MAINTAINERS.md +0 -0
  99. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/MANIFEST.in +0 -0
  100. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/Makefile +0 -0
  101. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/SECURITY.md +0 -0
  102. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/SUPPORT.md +0 -0
  103. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost +0 -0
  104. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/__init__.py +0 -0
  105. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/__main__.py +0 -0
  106. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/cli.py +0 -0
  107. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/cliparse.py +0 -0
  108. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/__init__.py +0 -0
  109. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/_common.py +0 -0
  110. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/quickstart.py +0 -0
  111. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/commands/run.py +0 -0
  112. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/__init__.py +0 -0
  113. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/agents.py +0 -0
  114. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/ai.py +0 -0
  115. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/aihost.py +0 -0
  116. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/bootstrap.py +0 -0
  117. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/builtin.py +0 -0
  118. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/capabilities.py +0 -0
  119. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/catalog.py +0 -0
  120. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/catalogbundle.py +0 -0
  121. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/chat.py +0 -0
  122. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/config.py +0 -0
  123. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/dense.py +0 -0
  124. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/ed25519.py +0 -0
  125. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/embed.py +0 -0
  126. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/gitutil.py +0 -0
  127. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/hookhost.py +0 -0
  128. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/imperative.py +0 -0
  129. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/injectscan.py +0 -0
  130. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/installscan.py +0 -0
  131. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/journal.py +0 -0
  132. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/jsonstate.py +0 -0
  133. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/localembed.py +0 -0
  134. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/logs.py +0 -0
  135. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/mcp.py +0 -0
  136. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/mcpdecl.py +0 -0
  137. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/mcphost.py +0 -0
  138. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/minisign.py +0 -0
  139. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/nethttp.py +0 -0
  140. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/paths.py +0 -0
  141. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/policy.py +0 -0
  142. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/projectlock.py +0 -0
  143. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/provenance.py +0 -0
  144. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/rag.py +0 -0
  145. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/resolve.py +0 -0
  146. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/rules.py +0 -0
  147. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/scopes.py +0 -0
  148. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/secretscan.py +0 -0
  149. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/selfupdate.py +0 -0
  150. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/serve.py +0 -0
  151. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/shards.py +0 -0
  152. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/stackprobe.py +0 -0
  153. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/staleness.py +0 -0
  154. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/trustaudit.py +0 -0
  155. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/typedvalue.py +0 -0
  156. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/typosquat.py +0 -0
  157. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/updatediff.py +0 -0
  158. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/core/workflows.py +0 -0
  159. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/data/registries.json +0 -0
  160. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/data/rules/boost-first.mdc +0 -0
  161. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/errors.py +0 -0
  162. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_cli/spin.py +0 -0
  163. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_langchain/__init__.py +0 -0
  164. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_langchain/_compat.py +0 -0
  165. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_langchain/graph.py +0 -0
  166. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_langchain/loader.py +0 -0
  167. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_langchain/py.typed +0 -0
  168. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_langchain/retriever.py +0 -0
  169. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  170. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  171. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_skill_cli.egg-info/requires.txt +0 -0
  172. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/boost_skill_cli.egg-info/top_level.txt +0 -0
  173. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/codecov.yml +0 -0
  174. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/.claude/settings.local.json +0 -0
  175. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/adapters.html +0 -0
  176. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/architecture/README.md +0 -0
  177. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/architecture/c4-components-core.md +0 -0
  178. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/architecture/c4-containers.md +0 -0
  179. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/architecture/c4-context.md +0 -0
  180. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/architecture/c4-dynamic-install.md +0 -0
  181. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/gifs/distill.gif +0 -0
  182. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/gifs/doctor.gif +0 -0
  183. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/gifs/explain.gif +0 -0
  184. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/gifs/hooks.gif +0 -0
  185. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/gifs/install.gif +0 -0
  186. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/gifs/pulse.gif +0 -0
  187. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/gifs/search.gif +0 -0
  188. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/gifs/tap.gif +0 -0
  189. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/tapes/distill.tape +0 -0
  190. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/tapes/doctor.tape +0 -0
  191. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/tapes/explain.tape +0 -0
  192. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/tapes/hooks.tape +0 -0
  193. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/tapes/install.tape +0 -0
  194. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/tapes/pulse.tape +0 -0
  195. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/tapes/search.tape +0 -0
  196. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel/tapes/tap.tape +0 -0
  197. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/carousel.html +0 -0
  198. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/chat.html +0 -0
  199. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/code-review.md +0 -0
  200. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/commit-audit.md +0 -0
  201. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/demo-index.json +0 -0
  202. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/demo.gif +0 -0
  203. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/demo.html +0 -0
  204. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/demo.tape +0 -0
  205. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/dependencies.md +0 -0
  206. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/design-roadmap.html +0 -0
  207. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/eval-latest.json +0 -0
  208. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/eval.html +0 -0
  209. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/index.html +0 -0
  210. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/langchain.html +0 -0
  211. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/mcp-hub.html +0 -0
  212. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/openssf-badge.md +0 -0
  213. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/openssf-playbook.md +0 -0
  214. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/rag-architecture.md +0 -0
  215. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D01.md +0 -0
  216. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D02.md +0 -0
  217. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D03.md +0 -0
  218. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D04.md +0 -0
  219. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D05.md +0 -0
  220. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D06.md +0 -0
  221. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D07.md +0 -0
  222. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D08.md +0 -0
  223. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D09.md +0 -0
  224. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D10.md +0 -0
  225. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D11.md +0 -0
  226. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D12.md +0 -0
  227. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D13.md +0 -0
  228. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D14.md +0 -0
  229. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D15.md +0 -0
  230. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D16.md +0 -0
  231. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D17.md +0 -0
  232. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D18.md +0 -0
  233. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D19.md +0 -0
  234. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D20.md +0 -0
  235. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D21.md +0 -0
  236. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D22.md +0 -0
  237. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D23.md +0 -0
  238. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D24.md +0 -0
  239. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D25.md +0 -0
  240. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D26.md +0 -0
  241. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/BOOST-D27.md +0 -0
  242. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  243. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  244. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  245. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  246. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  247. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  248. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  249. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  250. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  251. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  252. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  253. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  254. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  255. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  256. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +0 -0
  257. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-attest-findings.md +0 -0
  258. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-audit-findings.md +0 -0
  259. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  260. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  261. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  262. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  263. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-chat-findings.md +0 -0
  264. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  265. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  266. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  267. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-config-findings.md +0 -0
  268. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  269. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-context-findings.md +0 -0
  270. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  271. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
  272. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  273. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-deps-findings.md +0 -0
  274. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-discover-findings.md +0 -0
  275. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  276. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  277. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-drift-findings.md +0 -0
  278. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  279. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-edit-findings.md +0 -0
  280. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  281. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  282. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  283. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  284. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  285. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  286. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  287. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  288. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-import-findings.md +0 -0
  289. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-index-findings.md +0 -0
  290. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +0 -0
  291. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  292. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-install-findings.md +0 -0
  293. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  294. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +0 -0
  295. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-lint-findings.md +0 -0
  296. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-log-findings.md +0 -0
  297. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  298. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-mcp-findings.md +0 -0
  299. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  300. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  301. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
  302. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  303. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  304. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  305. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-outdated-findings.md +0 -0
  306. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  307. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  308. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-policy-findings.md +0 -0
  309. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-profile-findings.md +0 -0
  310. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  311. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  312. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-pulse-findings.md +0 -0
  313. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-quarantine-findings.md +0 -0
  314. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  315. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  316. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  317. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  318. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  319. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-root-findings.md +0 -0
  320. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  321. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-schedule-findings.md +0 -0
  322. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-simulate-findings.md +0 -0
  323. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
  324. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
  325. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  326. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  327. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  328. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-sync-findings.md +0 -0
  329. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-tag-findings.md +0 -0
  330. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  331. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-tap-findings.md +0 -0
  332. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  333. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-test-findings.md +0 -0
  334. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-trust-findings.md +0 -0
  335. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  336. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  337. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-update-findings.md +0 -0
  338. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  339. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/audit-who-findings.md +0 -0
  340. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  341. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  342. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  343. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  344. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  345. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  346. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/boost-first-rule.md +0 -0
  347. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  348. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  349. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/branch-current-gate.md +0 -0
  350. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  351. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  352. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  353. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  354. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  355. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  356. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  357. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
  358. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  359. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  360. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  361. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  362. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  363. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  364. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  365. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  366. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  367. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/cli-command-audit.md +0 -0
  368. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  369. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  370. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  371. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  372. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/command-carousel-page.md +0 -0
  373. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  374. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  375. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  376. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  377. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
  378. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  379. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  380. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  381. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  382. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  383. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  384. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  385. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  386. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  387. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  388. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  389. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  390. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  391. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  392. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  393. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  394. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  395. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  396. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  397. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  398. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  399. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  400. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  401. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  402. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  403. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  404. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  405. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  406. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  407. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  408. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  409. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  410. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  411. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  412. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  413. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  414. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  415. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  416. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  417. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  418. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  419. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  420. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  421. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  422. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  423. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  424. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  425. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  426. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  427. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  428. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/github-community-health-files.md +0 -0
  429. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  430. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  431. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  432. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  433. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  434. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  435. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  436. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  437. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  438. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  439. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  440. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  441. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  442. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  443. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  444. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  445. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  446. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  447. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  448. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  449. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  450. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  451. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  452. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  453. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  454. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  455. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  456. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  457. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  458. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  459. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  460. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  461. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  462. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  463. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  464. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  465. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  466. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  467. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  468. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  469. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  470. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  471. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  472. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  473. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  474. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  475. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  476. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  477. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  478. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  479. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  480. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  481. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  482. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  483. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  484. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  485. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  486. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  487. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  488. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  489. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  490. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  491. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  492. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  493. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  494. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  495. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  496. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  497. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  498. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  499. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
  500. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  501. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  502. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  503. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  504. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  505. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  506. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  507. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  508. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/openssf-playbook.md +0 -0
  509. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/openssf-silver.md +0 -0
  510. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  511. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  512. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  513. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  514. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  515. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  516. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  517. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  518. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  519. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  520. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  521. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  522. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  523. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  524. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  525. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  526. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  527. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  528. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  529. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  530. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
  531. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  532. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  533. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  534. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  535. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  536. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  537. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  538. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  539. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  540. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  541. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  542. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  543. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/relicence-apache-2.md +0 -0
  544. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  545. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  546. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  547. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  548. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  549. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  550. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  551. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  552. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  553. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  554. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  555. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  556. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  557. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  558. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  559. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  560. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  561. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  562. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  563. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  564. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  565. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  566. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  567. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  568. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  569. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  570. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  571. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  572. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  573. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  574. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  575. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  576. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  577. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  578. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  579. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  580. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  581. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  582. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/shrink-the-published-index.md +0 -0
  583. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  584. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  585. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  586. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  587. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  588. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  589. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  590. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  591. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  592. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  593. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  594. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  595. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  596. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  597. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  598. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  599. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  600. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  601. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  602. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  603. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  604. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  605. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  606. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  607. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  608. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  609. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  610. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  611. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  612. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  613. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  614. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  615. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  616. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  617. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  618. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  619. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  620. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  621. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  622. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  623. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  624. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  625. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  626. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/workspace-scope-install.md +0 -0
  627. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/zip-strict-audit.md +0 -0
  628. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  629. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  630. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/security-design.md +0 -0
  631. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/semantic-search.md +0 -0
  632. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  633. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/verifying-releases.md +0 -0
  634. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/vex/meta.md +0 -0
  635. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/vex/openvex.json +0 -0
  636. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  637. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  638. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  639. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  640. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/eslint.config.mjs +0 -0
  641. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/README.md +0 -0
  642. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/__init__.py +0 -0
  643. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/baseline.json +0 -0
  644. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/faithfulness.py +0 -0
  645. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/golden_set.json +0 -0
  646. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/make_corpus.py +0 -0
  647. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/make_golden.py +0 -0
  648. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/metrics.py +0 -0
  649. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/publish_golden_dataset.py +0 -0
  650. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/evals/run_evals.py +0 -0
  651. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/examples/README.md +0 -0
  652. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/examples/adapt-demo.sh +0 -0
  653. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/examples/boost-run-prototype.sh +0 -0
  654. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/index.html +0 -0
  655. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/noxfile.py +0 -0
  656. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/pyproject.toml +0 -0
  657. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/coverage-tools.in +0 -0
  658. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/coverage-tools.txt +0 -0
  659. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/lint-tools.in +0 -0
  660. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/lint-tools.txt +0 -0
  661. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/mutation-tools.in +0 -0
  662. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/mutation-tools.txt +0 -0
  663. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/platform-pins.lock +0 -0
  664. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/release-tools.in +0 -0
  665. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/release-tools.txt +0 -0
  666. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/test-tools.in +0 -0
  667. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/requirements/test-tools.txt +0 -0
  668. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/a11y_check.py +0 -0
  669. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/add_spdx_headers.py +0 -0
  670. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/bench_cli.sh +0 -0
  671. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/build_command_reference.py +0 -0
  672. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/build_demo_index.py +0 -0
  673. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/build_registries.py +0 -0
  674. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/build_roadmap.py +0 -0
  675. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/build_scale_corpus.py +0 -0
  676. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/build_vex.py +0 -0
  677. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/check_anchors.py +0 -0
  678. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/check_branch_current.py +0 -0
  679. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/check_dco.py +0 -0
  680. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/check_licenses.py +0 -0
  681. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/check_reproducible.py +0 -0
  682. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/check_required_checks.py +0 -0
  683. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/ensure_eval_corpus.sh +0 -0
  684. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/eval_corpus.py +0 -0
  685. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/eval_explain.py +0 -0
  686. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/eval_gate.py +0 -0
  687. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/eval_recommend.py +0 -0
  688. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/eval_retrieval.py +0 -0
  689. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/eval_stats_summary.py +0 -0
  690. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/eval_tools.py +0 -0
  691. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/import_budget.py +0 -0
  692. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/lock_toolchain.py +0 -0
  693. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/measure_near_duplicate_bound.py +0 -0
  694. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/measure_registry.py +0 -0
  695. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/mutation_gate.py +0 -0
  696. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/mutation_shards.py +0 -0
  697. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/mutation_weights.json +0 -0
  698. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/normalize_sdist.py +0 -0
  699. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/page_budget.py +0 -0
  700. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/perf_gate.py +0 -0
  701. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/post_deploy_smoke.py +0 -0
  702. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/publish_eval_json.py +0 -0
  703. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/publish_shards.py +0 -0
  704. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/release_guard.py +0 -0
  705. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/release_preflight.py +0 -0
  706. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/serve_docs.py +0 -0
  707. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/scripts/shard_plan.py +0 -0
  708. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/setup.cfg +0 -0
  709. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/sonar-project.properties +0 -0
  710. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/style/README.md +0 -0
  711. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/style/boost.css +0 -0
  712. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/style/boost.js +0 -0
  713. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/style/demo.html +0 -0
  714. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/adapt.feature +0 -0
  715. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/count.feature +0 -0
  716. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/discover.feature +0 -0
  717. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/doctor.feature +0 -0
  718. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/environment.py +0 -0
  719. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/explain.feature +0 -0
  720. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/index.feature +0 -0
  721. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/install.feature +0 -0
  722. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/list.feature +0 -0
  723. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/mcp.feature +0 -0
  724. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/search.feature +0 -0
  725. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/steps/cli_steps.py +0 -0
  726. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/steps/discovery_steps.py +0 -0
  727. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/steps/mcp_steps.py +0 -0
  728. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/bdd/features/steps/quality_steps.py +0 -0
  729. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/conftest.py +0 -0
  730. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/eval/baseline.json +0 -0
  731. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/eval/explain.jsonl +0 -0
  732. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  733. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/eval/golden-natural.jsonl +0 -0
  734. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/eval/golden.jsonl +0 -0
  735. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/eval/recommend.jsonl +0 -0
  736. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/eval/taps-scale.txt +0 -0
  737. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/eval/taps.txt +0 -0
  738. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/eval/tool_calls.jsonl +0 -0
  739. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_bmad_all_hosts.py +0 -0
  740. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_capabilities_policy.py +0 -0
  741. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_adapt.py +0 -0
  742. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_catalog.py +0 -0
  743. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_chat.py +0 -0
  744. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_hooks_gemini.py +0 -0
  745. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_pane_width.py +0 -0
  746. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_quickstart.py +0 -0
  747. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_cli_tap_pins.py +0 -0
  748. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_everyday_loop.py +0 -0
  749. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_integrity_enforce.py +0 -0
  750. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_property_parsers.py +0 -0
  751. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_run.py +0 -0
  752. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/functional/test_workspace_scope.py +0 -0
  753. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/README.md +0 -0
  754. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  755. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  756. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  757. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  758. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  759. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  760. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  761. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  762. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  763. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  764. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  765. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  766. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  767. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  768. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  769. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  770. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  771. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  772. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  773. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  774. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  775. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  776. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  777. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/fuzz_frontmatter.py +0 -0
  778. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/fuzz/fuzz_registry.py +0 -0
  779. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/langchain/conftest.py +0 -0
  780. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/langchain/test_graph.py +0 -0
  781. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/langchain/test_loader.py +0 -0
  782. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/langchain/test_retriever.py +0 -0
  783. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/make_fixture.py +0 -0
  784. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/perf/test_benchmarks.py +0 -0
  785. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/smoke.sh +0 -0
  786. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_a11y_check.py +0 -0
  787. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_action_pin_lockstep.py +0 -0
  788. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_adapters.py +0 -0
  789. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_adapters_multi.py +0 -0
  790. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_agents.py +0 -0
  791. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_ai.py +0 -0
  792. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_aihost.py +0 -0
  793. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_boost_first_offer.py +0 -0
  794. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_bootstrap.py +0 -0
  795. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_bot_pr_dco.py +0 -0
  796. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_branch_current.py +0 -0
  797. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_builtin.py +0 -0
  798. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_capabilities.py +0 -0
  799. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_catalog.py +0 -0
  800. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_catalogbundle.py +0 -0
  801. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_chat.py +0 -0
  802. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_check_anchors.py +0 -0
  803. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_check_dco.py +0 -0
  804. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_check_licenses.py +0 -0
  805. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_check_reproducible.py +0 -0
  806. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_clean_internal_cache.py +0 -0
  807. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_cli_update_shards.py +0 -0
  808. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_cliparse.py +0 -0
  809. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_codeql_analysis_key.py +0 -0
  810. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_command_reference_fresh.py +0 -0
  811. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_community_health_files.py +0 -0
  812. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_compact.py +0 -0
  813. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_complete_rc_block.py +0 -0
  814. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_config.py +0 -0
  815. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_content_dedupe.py +0 -0
  816. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_content_identity.py +0 -0
  817. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_crash_redaction.py +0 -0
  818. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dedup_trust.py +0 -0
  819. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_demo_index.py +0 -0
  820. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense.py +0 -0
  821. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  822. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_embed_dedupe.py +0 -0
  823. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_entry_reuse.py +0 -0
  824. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_entry_vectors.py +0 -0
  825. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_fallback.py +0 -0
  826. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_fix_hint.py +0 -0
  827. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_progress.py +0 -0
  828. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_quantized.py +0 -0
  829. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_ready_order.py +0 -0
  830. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_shard_real_schema.py +0 -0
  831. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  832. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_shards.py +0 -0
  833. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_status.py +0 -0
  834. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_status_cheap.py +0 -0
  835. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dense_vector_dedupe.py +0 -0
  836. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_dependabot_config.py +0 -0
  837. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_distill_merge.py +0 -0
  838. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_docs_pages_linked.py +0 -0
  839. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_docsite_chrome.py +0 -0
  840. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_doctor_output_polish.py +0 -0
  841. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_drift_hint.py +0 -0
  842. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_ed25519.py +0 -0
  843. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_embed.py +0 -0
  844. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_embed_local.py +0 -0
  845. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_embed_truncated_response.py +0 -0
  846. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_entry_key.py +0 -0
  847. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_errors_and_cli_table.py +0 -0
  848. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_eval_baseline.py +0 -0
  849. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_eval_corpus.py +0 -0
  850. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_eval_faithfulness.py +0 -0
  851. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_eval_gate.py +0 -0
  852. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_eval_grading.py +0 -0
  853. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_eval_metrics.py +0 -0
  854. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_eval_stats_summary.py +0 -0
  855. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_eval_tools.py +0 -0
  856. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_eval_tools_probe.py +0 -0
  857. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  858. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_fuzz_targets.py +0 -0
  859. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  860. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_gitleaks_config.py +0 -0
  861. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_gitutil.py +0 -0
  862. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_gitutil_lfs.py +0 -0
  863. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_gitutil_sparse.py +0 -0
  864. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_gstack_coexistence.py +0 -0
  865. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_hook_settings_hosts.py +0 -0
  866. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_hookhost.py +0 -0
  867. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_imperative.py +0 -0
  868. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_import_budget.py +0 -0
  869. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_injectscan.py +0 -0
  870. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_install_permission_error.py +0 -0
  871. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_installscan.py +0 -0
  872. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_journal.py +0 -0
  873. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_jsonstate.py +0 -0
  874. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_langchain_packaging.py +0 -0
  875. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_link_ownership.py +0 -0
  876. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_localembed.py +0 -0
  877. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_localembed_e2e.py +0 -0
  878. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_logs.py +0 -0
  879. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_marketing_counts.py +0 -0
  880. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_mcp.py +0 -0
  881. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_mcp_install_scan.py +0 -0
  882. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_mcp_read.py +0 -0
  883. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_mcpdecl.py +0 -0
  884. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_mcphost.py +0 -0
  885. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_measure_registry.py +0 -0
  886. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_minisign.py +0 -0
  887. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_mutation_hardening.py +0 -0
  888. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_mutation_shards.py +0 -0
  889. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_mutation_subfile_shards.py +0 -0
  890. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_mutmut_source_paths.py +0 -0
  891. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_near_duplicate_collapse.py +0 -0
  892. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_nethttp.py +0 -0
  893. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_normalize_sdist.py +0 -0
  894. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_page_budget.py +0 -0
  895. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_paths.py +0 -0
  896. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_perf_gate.py +0 -0
  897. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_pkg_confusions.py +0 -0
  898. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_pkg_injection.py +0 -0
  899. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_pkg_secrets.py +0 -0
  900. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_platform_pins.py +0 -0
  901. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_policy.py +0 -0
  902. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_post_deploy_smoke.py +0 -0
  903. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_project_mcp_sidecar.py +0 -0
  904. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_projectlock.py +0 -0
  905. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_provenance.py +0 -0
  906. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_publish_golden_dataset.py +0 -0
  907. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_rag.py +0 -0
  908. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_rag_fastpath.py +0 -0
  909. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_rag_fusion.py +0 -0
  910. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_registries_fresh.py +0 -0
  911. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_registry_categories.py +0 -0
  912. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_registry_control_chars.py +0 -0
  913. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_registry_parallel.py +0 -0
  914. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_release_guard.py +0 -0
  915. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_release_preflight.py +0 -0
  916. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_required_checks.py +0 -0
  917. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_rerank_cache.py +0 -0
  918. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_resolve.py +0 -0
  919. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
  920. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_roadmap_fresh.py +0 -0
  921. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_rules.py +0 -0
  922. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_scale_corpus.py +0 -0
  923. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_scopes.py +0 -0
  924. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_secretscan.py +0 -0
  925. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_selfupdate.py +0 -0
  926. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_serve.py +0 -0
  927. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_serve_docs.py +0 -0
  928. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_shard_plan.py +0 -0
  929. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_shards.py +0 -0
  930. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_shards_incremental.py +0 -0
  931. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_shards_ingest.py +0 -0
  932. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_shards_matrix.py +0 -0
  933. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_smoke_covers_every_command.py +0 -0
  934. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_spdx_headers.py +0 -0
  935. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_spin.py +0 -0
  936. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_stackprobe.py +0 -0
  937. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_staleness.py +0 -0
  938. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_store_materialize.py +0 -0
  939. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_sync_blocked_links.py +0 -0
  940. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  941. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_tap_pins.py +0 -0
  942. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_token_parity.py +0 -0
  943. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_toolchain_lock.py +0 -0
  944. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_trustaudit.py +0 -0
  945. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_typedvalue.py +0 -0
  946. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_typosquat.py +0 -0
  947. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_updatediff.py +0 -0
  948. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_version.py +0 -0
  949. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_version_tags.py +0 -0
  950. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_vex.py +0 -0
  951. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_visual_harness_flags.py +0 -0
  952. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_workflow_concurrency.py +0 -0
  953. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  954. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  955. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_workflow_timeouts.py +0 -0
  956. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_workflows.py +0 -0
  957. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  958. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/visual/a11y_check.mjs +0 -0
  959. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/visual/console_check.mjs +0 -0
  960. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/visual/package-lock.json +0 -0
  961. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/visual/package.json +0 -0
  962. {boost_skill_cli-1.2.95 → boost_skill_cli-1.2.97}/tests/visual/visual_check.mjs +0 -0
@@ -37,6 +37,8 @@ CRM
37
37
  cron
38
38
  crontab
39
39
  cyclomatic
40
+ dedupe
41
+ deduped
40
42
  Dependabot
41
43
  deps
42
44
  deserialization
@@ -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.97
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -421,6 +421,13 @@ at least 95% alike, fold into one badged `×5`, with `^D` to show them again.
421
421
  Identity is the description and never the name: `code-reviewer` appears 75 times
422
422
  with 42 different descriptions, and those are 42 real skills.
423
423
 
424
+ Without a real TTY (a pipe, an IDE run console, a terminal curses can't drive)
425
+ `browse` falls back to a plain, deduped table — name, version, tap, kind — with
426
+ a footer breaking the total down by kind and pointing at `boost search` to
427
+ narrow it. The same fallback covers a curses initialization failure, so a
428
+ terminal that merely *claims* `isatty()` degrades gracefully instead of
429
+ crashing mid-draw.
430
+
424
431
  ## 81 commands, organized into 8 groups
425
432
 
426
433
  `boost --help` prints the full grouped list. For every flag of every command see
@@ -379,6 +379,13 @@ at least 95% alike, fold into one badged `×5`, with `^D` to show them again.
379
379
  Identity is the description and never the name: `code-reviewer` appears 75 times
380
380
  with 42 different descriptions, and those are 42 real skills.
381
381
 
382
+ Without a real TTY (a pipe, an IDE run console, a terminal curses can't drive)
383
+ `browse` falls back to a plain, deduped table — name, version, tap, kind — with
384
+ a footer breaking the total down by kind and pointing at `boost search` to
385
+ narrow it. The same fallback covers a curses initialization failure, so a
386
+ terminal that merely *claims* `isatty()` degrades gracefully instead of
387
+ crashing mid-draw.
388
+
382
389
  ## 81 commands, organized into 8 groups
383
390
 
384
391
  `boost --help` prints the full grouped list. For every flag of every command see
@@ -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.97'
22
+ __version_tuple__ = version_tuple = (1, 2, 97)
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()
@@ -397,7 +401,7 @@ def cmd_create(argv) -> int:
397
401
  help="install the new skill immediately")
398
402
  args = p.parse_args(argv)
399
403
 
400
- name = util.slugify(args.name)
404
+ name = util.resolve_slug(args.name)
401
405
  parent = paths.expand(args.dir) if args.dir else Path.cwd()
402
406
  target = parent / name
403
407
  skill_md = target / "SKILL.md"
@@ -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()
@@ -814,6 +823,17 @@ def cmd_completions(argv) -> int:
814
823
 
815
824
  detected = args.shell or Path(os.environ.get("SHELL", "")).name
816
825
 
826
+ # Fixed once, here, rather than in each branch below: an empty $SHELL
827
+ # used to fall through silently to the bash script (print path) or to
828
+ # `_rc_path("")`'s confusing "no one-shot install for yet" (install
829
+ # path) — neither ever told the user *why*. Raising here means every
830
+ # path downstream — print, --install, --uninstall, --dry-run — sees the
831
+ # same clear error instead of reinventing it.
832
+ if not detected:
833
+ raise BoostError(
834
+ "cannot detect your shell ($SHELL unset)",
835
+ hint="pass bash, zsh or fish, e.g. `boost completions bash`")
836
+
817
837
  if args.dry_run and not (args.install or args.uninstall):
818
838
  p.error("--dry-run qualifies --install or --uninstall; "
819
839
  "pass one of them")
@@ -842,6 +862,15 @@ def cmd_completions(argv) -> int:
842
862
  return 0
843
863
 
844
864
  shell = detected if detected in ("bash", "zsh", "fish") else "bash"
865
+ if shell != detected:
866
+ # A real shell boost has no script for (e.g. nu, xonsh) — silently
867
+ # substituting bash used to look like success while handing the user
868
+ # a script their shell cannot source. stderr, not stdout: stdout here
869
+ # is the completion script itself (piped to a file or `eval`'d), and
870
+ # a warning line mixed into it would corrupt both uses.
871
+ out.warn("%s is not a supported shell (bash, zsh, fish) — showing "
872
+ "bash's completion script instead" % detected,
873
+ stream=sys.stderr)
845
874
  # The script is a thin shim that calls `boost __complete`; the candidate
846
875
  # rules live in core/complete.py so all three shells share one tested
847
876
  # implementation instead of three hand-maintained static lists.
@@ -939,11 +968,13 @@ def cmd_schedule(argv) -> int:
939
968
  p.add_argument("action", nargs="?", default="status",
940
969
  choices=("status", "enable", "disable"),
941
970
  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)")
971
+ p.add_argument("--interval", choices=tuple(_INTERVALS), default=None,
972
+ help="how often to run `boost update` (default: 6h; enable only)")
944
973
  p.add_argument("--json", action="store_true",
945
974
  help="machine-readable output (status only)")
946
975
  args = p.parse_args(argv)
976
+ if args.interval is not None and args.action != "enable":
977
+ p.error("--interval only applies to `schedule enable`")
947
978
 
948
979
  darwin = sys.platform == "darwin"
949
980
  shim = paths.launcher()
@@ -992,6 +1023,7 @@ def cmd_schedule(argv) -> int:
992
1023
  return 0
993
1024
 
994
1025
  if args.action == "enable":
1026
+ args.interval = args.interval or "6h"
995
1027
  seconds = _INTERVALS[args.interval]
996
1028
  paths.ensure_dirs()
997
1029
  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)
@@ -972,11 +994,23 @@ def cmd_recommend(argv):
972
994
 
973
995
  def _browse_plain(entries, why: str):
974
996
  out.warn(why + " — showing the full catalog")
975
- out.table([(e["name"], "v" + e["version"], e["tap"],
976
- "★" if e.get("curated") else "") for e in entries],
977
- headers=("name", "version", "tap", ""))
978
- out.info(out.role("%d skills · install with `boost install <name>`"
979
- % len(entries), "muted"))
997
+ # Same collapse the TUI does: a registry renders one skill into
998
+ # .claude/, .cursor/, .gemini/ and a plugin root, and this fallback used
999
+ # to list every copy with nothing to tell them apart.
1000
+ unique = [e for e, _n in browse.dedupe(entries)]
1001
+ show_curated = any(e.get("curated") for e in unique)
1002
+ headers = ["name", "version", "tap", "kind"]
1003
+ rows = [[e["name"], "v" + e["version"], e["tap"],
1004
+ out.kind_label(e.get("kind", "skill"))]
1005
+ for e in unique]
1006
+ if show_curated:
1007
+ headers.append("")
1008
+ for row, e in zip(rows, unique, strict=True):
1009
+ row.append("★" if e.get("curated") else "")
1010
+ out.table([tuple(row) for row in rows], headers=tuple(headers))
1011
+ out.info(out.role(
1012
+ "%s · install with `boost install <name>` · narrow with `boost search <query>`"
1013
+ % browse.plain_footer(unique), "muted"))
980
1014
  return 0
981
1015
 
982
1016
 
@@ -1725,7 +1759,17 @@ def cmd_browse(argv):
1725
1759
  import curses
1726
1760
  except ImportError:
1727
1761
  return _browse_plain(entries, "curses is unavailable on this Python")
1728
- picked = _browse_tui(curses, entries)
1762
+ try:
1763
+ picked = _browse_tui(curses, entries)
1764
+ except curses.error as e:
1765
+ # An fd that claims isatty() but isn't a real pty (IDE run consoles,
1766
+ # `script`, TERM=dumb) can fail deep inside curses.wrapper's own
1767
+ # setup/teardown rather than at the isatty() check above. wrapper
1768
+ # already ran its finally block (endwin() included), so the screen is
1769
+ # restored by the time this is caught — printing here lands on a
1770
+ # normal terminal, not a hosed one.
1771
+ return _browse_plain(entries,
1772
+ "the terminal does not support curses (%s)" % e)
1729
1773
  if not picked:
1730
1774
  return 0
1731
1775
  # The browser installs in place now, so anything it hands back is usually
@@ -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 "-",
@@ -703,8 +703,18 @@ def cmd_preview(argv):
703
703
  args = ap.parse_args(argv)
704
704
  text, _kind, lock, cat = _resolve_text(args.name)
705
705
  meta, body = frontmatter.parse(text)
706
+ if not sys.stdout.isatty():
707
+ # A piped/redirected preview renders nothing — no ANSI, so the
708
+ # per-chunk `_inline()` substitution would strip `**`/backtick
709
+ # markers with no styled substitute, and lines with no special-cased
710
+ # handling (a bare `---`, a wrapped `> quote` continuation) print
711
+ # mangled rather than as either faithful Markdown or a real render.
712
+ # `boost cat` already resolves this the same way: raw text through.
713
+ sys.stdout.write(body if body.endswith("\n") else body + "\n")
714
+ return 0
715
+ version = meta.get("version") or (lock or cat or {}).get("version") or "?"
706
716
  print(out.titlebar("%s · v%s · %s" % (meta.get("name") or args.name,
707
- meta.get("version") or "?",
717
+ version,
708
718
  (lock or cat or {}).get("tap", "local"))))
709
719
  print()
710
720
  _render_markdown(body)
@@ -849,6 +859,8 @@ def cmd_log(argv):
849
859
  ap.add_argument("--crashes", action="store_true",
850
860
  help="list recent crash reports")
851
861
  args = ap.parse_args(argv)
862
+ if args.name and (args.crashes or args.diagnostics):
863
+ ap.error("NAME is not used with --diagnostics/--crashes")
852
864
  if args.crashes:
853
865
  return _show_crashes(args.limit)
854
866
  if args.diagnostics:
@@ -14,6 +14,7 @@ import difflib
14
14
  import fnmatch
15
15
  import json
16
16
  import re
17
+ import shlex
17
18
  import sys
18
19
  import tempfile
19
20
  import textwrap
@@ -213,7 +214,8 @@ def cmd_distill(argv: list[str]) -> int:
213
214
  meta, body = frontmatter.parse(text)
214
215
  sources.append({"name": name, "origin": origin, "text": text,
215
216
  "meta": meta, "body": body})
216
- new = args.output or (names[0] + "-distilled")
217
+ new = util.resolve_slug(args.output, what="output name") if args.output \
218
+ else names[0] + "-distilled"
217
219
 
218
220
  out.heading("distilling %s → %s" % (", ".join(names), new))
219
221
  merged = _distill_ai(new, sources) if ai.available() else None
@@ -227,7 +229,9 @@ def cmd_distill(argv: list[str]) -> int:
227
229
  dest = Path.cwd() / new / "SKILL.md"
228
230
  if not _write_generated(dest, merged, yes=args.yes):
229
231
  return 1
230
- out.info(out.role("install it with `boost import ./%s`" % new, "muted"))
232
+ out.info(out.role(
233
+ "install it with `boost import %s`" % shlex.quote("./" + new),
234
+ "muted"))
231
235
  journal.log("distill", new, sources=names)
232
236
  return 0
233
237
 
@@ -812,16 +816,23 @@ def _evolve_ai(old: str, old_ver: str, feedback: str) -> str | None:
812
816
 
813
817
 
814
818
  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)
819
+ """Heuristic revision: feedback appended as a dated rules section.
820
+
821
+ Splices the bumped ``version`` into the original frontmatter text
822
+ (`frontmatter.set_field`) rather than parsing to a dict and dumping it
823
+ back — a parse -> dump round trip rewrites every field through dump's
824
+ own quoting rules, turning a diff that only bumped the version into one
825
+ that also silently reformats every other line the feedback never
826
+ touched.
827
+ """
828
+ revised = frontmatter.set_field(old, "version", _bump_patch(old_ver))
829
+ block, body = frontmatter.split(revised)
818
830
  bullets = [s.strip().rstrip(".")
819
831
  for s in re.split(r"(?<=[.!?])\s+|\n+|;\s*", feedback)
820
832
  if s.strip()]
821
833
  section = ("## Feedback (%s)\n\n" % util.now_iso()[:10]
822
834
  + "\n".join("- %s." % b for b in bullets))
823
- return (frontmatter.dump(meta) + "\n\n" + body.strip()
824
- + "\n\n" + section + "\n")
835
+ return "---\n%s\n---\n\n%s\n\n%s\n" % (block, body.strip(), section)
825
836
 
826
837
 
827
838
  def _print_diff(old: str, new: str) -> None:
@@ -21,6 +21,7 @@ from .. import cliparse, spin
21
21
  from ..core import (
22
22
  adapters,
23
23
  agents,
24
+ archive,
24
25
  catalog,
25
26
  complete,
26
27
  config,
@@ -1423,9 +1424,10 @@ def cmd_import(argv: list[str]) -> int:
1423
1424
  prog="boost import",
1424
1425
  description="Import skills from a GitHub URL or local path")
1425
1426
  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")
1427
+ group = ap.add_mutually_exclusive_group()
1428
+ group.add_argument("--name", metavar="N",
1429
+ help="skill to pick when several are found (or a rename)")
1430
+ group.add_argument("--all", action="store_true", help="import every skill found")
1429
1431
  ap.add_argument("--agent", action="append", metavar="A",
1430
1432
  help="link only into this agent (repeatable)")
1431
1433
  args = ap.parse_args(argv)
@@ -1575,6 +1577,8 @@ def cmd_snapshot(argv: list[str]) -> int:
1575
1577
  ap.add_argument("-y", "--yes", action="store_true",
1576
1578
  help="skip the restore confirmation prompt")
1577
1579
  args = ap.parse_args(argv)
1580
+ if args.action == "list" and args.arg:
1581
+ ap.error("snapshot list takes no LABEL|ID")
1578
1582
  if args.action == "save":
1579
1583
  return _snapshot_save(args.arg)
1580
1584
  if args.action == "list":
@@ -1766,11 +1770,17 @@ def cmd_export(argv: list[str]) -> int:
1766
1770
  "agent config files; reinstall them "
1767
1771
  "from their tap")
1768
1772
  if not store.skill_store_dir(name).is_dir():
1769
- raise BoostError("store dir for %s is missing" % name,
1770
- hint="repair with `boost sync`")
1773
+ raise BoostError(
1774
+ "store dir for %s is missing" % name,
1775
+ hint=("repair with `boost reinstall %s`" % name)
1776
+ if entry.get("tap") == "local"
1777
+ else "repair with `boost sync`")
1771
1778
  chosen[name] = entry
1772
1779
  stamp = datetime.now(UTC).strftime("%Y%m%d")
1773
- ext = ".zip" if args.zip else ".tar.gz"
1780
+ use_zip, format_warning = archive.resolve_export_format(args.out, args.zip)
1781
+ if format_warning:
1782
+ out.warn(format_warning)
1783
+ ext = ".zip" if use_zip else ".tar.gz"
1774
1784
  dest = paths.expand(args.out) if args.out else Path(
1775
1785
  "boost-skills-%s%s" % (stamp, ext))
1776
1786
  if dest.exists() and not args.force:
@@ -1779,9 +1789,10 @@ def cmd_export(argv: list[str]) -> int:
1779
1789
  "different -o path")
1780
1790
  manifest = _boostfile_text(chosen, via="boost export")
1781
1791
  try:
1782
- if args.zip:
1792
+ if use_zip:
1783
1793
  with zipfile.ZipFile(str(dest), "w", zipfile.ZIP_DEFLATED) as zf:
1784
- zf.writestr("Boostfile", manifest)
1794
+ zf.writestr(archive.boostfile_zipinfo(
1795
+ datetime.now(UTC).timetuple()[:6]), manifest)
1785
1796
  for name in chosen:
1786
1797
  sdir = store.skill_store_dir(name)
1787
1798
  for f in sorted(p for p in sdir.rglob("*") if p.is_file()):
@@ -1793,9 +1804,10 @@ def cmd_export(argv: list[str]) -> int:
1793
1804
  ti.size = len(data)
1794
1805
  ti.mtime = int(datetime.now(UTC).timestamp())
1795
1806
  ti.mode = 0o644
1796
- tf.addfile(ti, io.BytesIO(data))
1807
+ tf.addfile(archive.normalize_tar_member(ti), io.BytesIO(data))
1797
1808
  for name in chosen:
1798
- tf.add(str(store.skill_store_dir(name)), arcname=name)
1809
+ tf.add(str(store.skill_store_dir(name)), arcname=name,
1810
+ filter=archive.normalize_tar_member)
1799
1811
  except OSError as e:
1800
1812
  raise BoostError("cannot write %s: %s" % (_tilde(dest), e.strerror or e),
1801
1813
  hint="check the output path exists and is writable") from e