boost-skill-cli 1.2.97__tar.gz → 1.2.99__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 (967) hide show
  1. {boost_skill_cli-1.2.97/boost_skill_cli.egg-info → boost_skill_cli-1.2.99}/PKG-INFO +2 -1
  2. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/README.md +1 -0
  3. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost +3 -3
  4. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/_version.py +2 -2
  5. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/cli.py +129 -59
  6. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/_common.py +2 -0
  7. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/configuration.py +122 -35
  8. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/discovery.py +51 -37
  9. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/info.py +73 -11
  10. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/intelligence.py +19 -1
  11. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/pkg.py +25 -4
  12. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/quality.py +8 -18
  13. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/safety.py +1 -1
  14. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/taps.py +48 -7
  15. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/team.py +149 -40
  16. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/ai.py +40 -7
  17. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/chat.py +13 -1
  18. boost_skill_cli-1.2.99/boost_cli/core/discovery.py +46 -0
  19. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/imperative.py +12 -3
  20. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/journal.py +60 -0
  21. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/lockfile.py +17 -0
  22. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/mcphost.py +53 -0
  23. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/output.py +18 -7
  24. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/policy.py +51 -0
  25. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/registry.py +132 -58
  26. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/staleness.py +28 -0
  27. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/store.py +47 -4
  28. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/util.py +37 -0
  29. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/spin.py +16 -0
  30. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99/boost_skill_cli.egg-info}/PKG-INFO +2 -1
  31. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
  32. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/commands.html +4 -3
  33. boost_skill_cli-1.2.99/docs/demo.gif +0 -0
  34. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/eval-latest.json +2 -2
  35. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-ai-degrade-note-blames-path-api-keys-regardless-of-cause-sev.md +3 -3
  36. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-edit-findings.md +3 -3
  37. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-index-findings.md +4 -4
  38. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-info-stats-explain-render-a-different-smaller-shape-for-rule.md +3 -3
  39. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-json-accepted-but-ignored-on-many-branches-cohort-config-pol.md +6 -4
  40. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-mcp-findings.md +3 -3
  41. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-outdated-findings.md +3 -3
  42. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-policy-findings.md +2 -2
  43. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-pulse-findings.md +23 -3
  44. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-quarantine-findings.md +3 -3
  45. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-schedule-findings.md +5 -3
  46. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-simulate-findings.md +4 -4
  47. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-tap-findings.md +3 -3
  48. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-test-findings.md +3 -3
  49. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-update-findings.md +2 -2
  50. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-who-findings.md +3 -3
  51. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap.html +63 -32
  52. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/setup.cfg +1 -0
  53. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/mcp.feature +15 -2
  54. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/steps/mcp_steps.py +15 -0
  55. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/conftest.py +14 -0
  56. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_chat.py +11 -0
  57. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_configuration.py +180 -4
  58. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_discovery.py +121 -1
  59. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_info.py +109 -3
  60. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_intelligence.py +42 -0
  61. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_pkg.py +63 -0
  62. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_quality.py +65 -0
  63. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_taps.py +68 -5
  64. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_team.py +187 -2
  65. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_everyday_loop.py +1 -1
  66. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/smoke.sh +6 -0
  67. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_ai.py +57 -1
  68. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_chat.py +27 -0
  69. boost_skill_cli-1.2.99/tests/unit/test_discovery.py +59 -0
  70. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_errors_and_cli_table.py +139 -0
  71. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_imperative.py +36 -0
  72. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_journal.py +103 -0
  73. boost_skill_cli-1.2.99/tests/unit/test_launcher_python_floor.py +48 -0
  74. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_lockfile.py +39 -0
  75. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_mcphost.py +96 -0
  76. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_mutation_hardening.py +11 -4
  77. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_output.py +30 -0
  78. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_policy.py +96 -0
  79. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_registry.py +170 -0
  80. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_registry_control_chars.py +2 -0
  81. boost_skill_cli-1.2.99/tests/unit/test_schedule_plist.py +41 -0
  82. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_spin.py +27 -0
  83. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_staleness.py +32 -0
  84. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_store.py +83 -0
  85. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_tap_pins.py +3 -1
  86. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_util.py +68 -0
  87. boost_skill_cli-1.2.97/docs/demo.gif +0 -0
  88. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.gitattributes +0 -0
  89. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.gitignore +0 -0
  90. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.gitleaks.toml +0 -0
  91. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.htmlvalidate.json +0 -0
  92. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.lighthouserc.json +0 -0
  93. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.lycheeignore +0 -0
  94. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.markdownlint-cli2.jsonc +0 -0
  95. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.pre-commit-config.yaml +0 -0
  96. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.stylelintrc.json +0 -0
  97. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.vale/styles/boost/AIWriting.yml +0 -0
  98. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.vale/styles/boost/Terminology.yml +0 -0
  99. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  100. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/.vale.ini +0 -0
  101. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/CLAUDE.md +0 -0
  102. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/CODE_OF_CONDUCT.md +0 -0
  103. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/CONTRIBUTING.md +0 -0
  104. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/DCO +0 -0
  105. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/GOVERNANCE.md +0 -0
  106. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/LICENSE +0 -0
  107. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/MAINTAINERS.md +0 -0
  108. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/MANIFEST.in +0 -0
  109. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/Makefile +0 -0
  110. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/SECURITY.md +0 -0
  111. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/SUPPORT.md +0 -0
  112. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/__init__.py +0 -0
  113. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/__main__.py +0 -0
  114. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/cliparse.py +0 -0
  115. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/__init__.py +0 -0
  116. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/bmad.py +0 -0
  117. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/hooks.py +0 -0
  118. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/quickstart.py +0 -0
  119. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/commands/run.py +0 -0
  120. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/__init__.py +0 -0
  121. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/adapters.py +0 -0
  122. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/agents.py +0 -0
  123. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/aihost.py +0 -0
  124. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/archive.py +0 -0
  125. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/bmad.py +0 -0
  126. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/bootstrap.py +0 -0
  127. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/browse.py +0 -0
  128. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/builtin.py +0 -0
  129. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/capabilities.py +0 -0
  130. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/catalog.py +0 -0
  131. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/catalogbundle.py +0 -0
  132. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/claude_settings.py +0 -0
  133. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/complete.py +0 -0
  134. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/config.py +0 -0
  135. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/dense.py +0 -0
  136. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/ed25519.py +0 -0
  137. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/embed.py +0 -0
  138. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/faithfulness.py +0 -0
  139. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/frontmatter.py +0 -0
  140. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/gitutil.py +0 -0
  141. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/hookhost.py +0 -0
  142. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/injectscan.py +0 -0
  143. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/installscan.py +0 -0
  144. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/integrity.py +0 -0
  145. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/jsonstate.py +0 -0
  146. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/localembed.py +0 -0
  147. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/logs.py +0 -0
  148. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/mcp.py +0 -0
  149. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/mcpdecl.py +0 -0
  150. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/minisign.py +0 -0
  151. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/nethttp.py +0 -0
  152. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/paths.py +0 -0
  153. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/projectlock.py +0 -0
  154. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/provenance.py +0 -0
  155. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/rag.py +0 -0
  156. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/resolve.py +0 -0
  157. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/rules.py +0 -0
  158. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/scopes.py +0 -0
  159. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/secretscan.py +0 -0
  160. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/selfupdate.py +0 -0
  161. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/serve.py +0 -0
  162. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/shards.py +0 -0
  163. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/stackprobe.py +0 -0
  164. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/trustaudit.py +0 -0
  165. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/typedvalue.py +0 -0
  166. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/typosquat.py +0 -0
  167. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/updatediff.py +0 -0
  168. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/core/workflows.py +0 -0
  169. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/data/registries.json +0 -0
  170. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/data/rules/boost-first.mdc +0 -0
  171. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_cli/errors.py +0 -0
  172. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_langchain/__init__.py +0 -0
  173. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_langchain/_compat.py +0 -0
  174. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_langchain/graph.py +0 -0
  175. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_langchain/loader.py +0 -0
  176. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_langchain/py.typed +0 -0
  177. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_langchain/retriever.py +0 -0
  178. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  179. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  180. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_skill_cli.egg-info/requires.txt +0 -0
  181. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/boost_skill_cli.egg-info/top_level.txt +0 -0
  182. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/codecov.yml +0 -0
  183. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/.claude/settings.local.json +0 -0
  184. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/DEBUGGING.md +0 -0
  185. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/adapters.html +0 -0
  186. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/architecture/README.md +0 -0
  187. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/architecture/c4-components-core.md +0 -0
  188. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/architecture/c4-containers.md +0 -0
  189. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/architecture/c4-context.md +0 -0
  190. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/architecture/c4-dynamic-install.md +0 -0
  191. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/bmad.md +0 -0
  192. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/gifs/distill.gif +0 -0
  193. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/gifs/doctor.gif +0 -0
  194. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/gifs/explain.gif +0 -0
  195. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/gifs/hooks.gif +0 -0
  196. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/gifs/install.gif +0 -0
  197. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/gifs/pulse.gif +0 -0
  198. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/gifs/search.gif +0 -0
  199. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/gifs/tap.gif +0 -0
  200. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/tapes/distill.tape +0 -0
  201. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/tapes/doctor.tape +0 -0
  202. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/tapes/explain.tape +0 -0
  203. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/tapes/hooks.tape +0 -0
  204. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/tapes/install.tape +0 -0
  205. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/tapes/pulse.tape +0 -0
  206. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/tapes/search.tape +0 -0
  207. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel/tapes/tap.tape +0 -0
  208. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/carousel.html +0 -0
  209. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/chat.html +0 -0
  210. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/code-review.md +0 -0
  211. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/commit-audit.md +0 -0
  212. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/demo-index.json +0 -0
  213. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/demo.html +0 -0
  214. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/demo.tape +0 -0
  215. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/dependencies.md +0 -0
  216. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/design-roadmap.html +0 -0
  217. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/eval.html +0 -0
  218. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/index.html +0 -0
  219. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/langchain.html +0 -0
  220. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/mcp-hub.html +0 -0
  221. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/openssf-badge.md +0 -0
  222. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/openssf-playbook.md +0 -0
  223. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/rag-architecture.md +0 -0
  224. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D01.md +0 -0
  225. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D02.md +0 -0
  226. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D03.md +0 -0
  227. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D04.md +0 -0
  228. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D05.md +0 -0
  229. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D06.md +0 -0
  230. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D07.md +0 -0
  231. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D08.md +0 -0
  232. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D09.md +0 -0
  233. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D10.md +0 -0
  234. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D11.md +0 -0
  235. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D12.md +0 -0
  236. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D13.md +0 -0
  237. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D14.md +0 -0
  238. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D15.md +0 -0
  239. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D16.md +0 -0
  240. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D17.md +0 -0
  241. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D18.md +0 -0
  242. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D19.md +0 -0
  243. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D20.md +0 -0
  244. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D21.md +0 -0
  245. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D22.md +0 -0
  246. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D23.md +0 -0
  247. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D24.md +0 -0
  248. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D25.md +0 -0
  249. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D26.md +0 -0
  250. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/BOOST-D27.md +0 -0
  251. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  252. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  253. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  254. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  255. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  256. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  257. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  258. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  259. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  260. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  261. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-absorb-findings.md +0 -0
  262. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-adapt-findings.md +0 -0
  263. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-adapt-renders-every-sibling-of-a-flat-agents-dir-workflow-as.md +0 -0
  264. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-adapt-run-stats-edit-tag-export-reject-the-tap-name-qualifie.md +0 -0
  265. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-attest-findings.md +0 -0
  266. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-audit-findings.md +0 -0
  267. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-bmad-findings.md +0 -0
  268. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-browse-findings.md +0 -0
  269. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-bundle-findings.md +0 -0
  270. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-catalog-findings.md +0 -0
  271. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-catalog-resolve-one-s-duplicate-name-hint-advertises-path-to.md +0 -0
  272. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-changelog-findings.md +0 -0
  273. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-chat-findings.md +0 -0
  274. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-clean-counts-failed-removals-as-cleaned-journals-the-inflate.md +0 -0
  275. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-cli-py-commands-summaries-and-parser-help-contradict-behavio.md +0 -0
  276. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-cohort-findings.md +0 -0
  277. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-completions-findings.md +0 -0
  278. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-config-findings.md +0 -0
  279. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-config-policy-set-store-type-unchecked-values-consumers-cras.md +0 -0
  280. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-context-findings.md +0 -0
  281. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-corrupt-settings-config-state-json-silently-read-as-empty-th.md +0 -0
  282. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-create-distill-infer-absorb-install-silently-replace-an-inst.md +0 -0
  283. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-create-findings.md +0 -0
  284. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-declined-confirms-never-name-y-boost-assume-yes-snapshot-cle.md +0 -0
  285. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-deps-findings.md +0 -0
  286. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-discover-findings.md +0 -0
  287. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-distill-s-heuristic-merge-drops-repeated-fences-braces-writi.md +0 -0
  288. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-doctor-findings.md +0 -0
  289. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-drift-findings.md +0 -0
  290. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-dry-runs-disagree-with-the-real-run-compact-counts-bytes-it.md +0 -0
  291. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-evolve-findings.md +0 -0
  292. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-explain-findings.md +0 -0
  293. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-export-findings.md +0 -0
  294. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-export-o-cohort-create-and-profile-save-silently-overwrite-e.md +0 -0
  295. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-fingerprint-findings.md +0 -0
  296. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-five-exit-70-crashes-on-bad-paths-data-catalog-export-serve.md +0 -0
  297. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-focus-profile-sideline-by-unlinking-without-recording-it-lis.md +0 -0
  298. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-git-operations-never-set-git-terminal-prompt-0-so-a-404-priv.md +0 -0
  299. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-health-findings.md +0 -0
  300. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-hooks-remove-n-cannot-find-hooks-boost-itself-added-unknown.md +0 -0
  301. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-import-all-skips-the-injection-secret-scans-and-the-per-skil.md +0 -0
  302. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-import-findings.md +0 -0
  303. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-install-dry-run-promises-agents-the-real-install-never-write.md +0 -0
  304. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-install-findings.md +0 -0
  305. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-install-local-writes-empties-the-repo-s-mcp-json-silently-of.md +0 -0
  306. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-lint-findings.md +0 -0
  307. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-log-findings.md +0 -0
  308. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-log-simulate-changelog-headings-echo-the-raw-qualified-argum.md +0 -0
  309. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-mcp-register-s-boost-first-consent-names-only-the-registered.md +0 -0
  310. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-missing-json-on-doctor-test-health-changelog-trending-log-ho.md +0 -0
  311. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-name-miss-errors-unknown-tap-qualifier-unnamed-no-close-matc.md +0 -0
  312. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-onboard-findings.md +0 -0
  313. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-out-table-clips-data-columns-to-an-assumed-80-columns-when-s.md +0 -0
  314. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-out-warn-defaults-to-stdout-infer-absorb-corrupt-skill-md-se.md +0 -0
  315. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-output-wrap-tokens-splits-punctuation-off-backtick-spans-ins.md +0 -0
  316. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-pinned-taps-silently-moved-to-head-by-update-re-clone-and-co.md +0 -0
  317. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-preview-findings.md +0 -0
  318. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-profile-findings.md +0 -0
  319. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-project-scope-seams-uninstall-verify-list-info-reinstall-dis.md +0 -0
  320. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-protocol-findings.md +0 -0
  321. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-quarantine-pin-state-invisible-list-info-doctor-report-links.md +0 -0
  322. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-quickstart-findings.md +0 -0
  323. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-recommend-findings.md +0 -0
  324. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-reindex-findings.md +0 -0
  325. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-reinstall-sync-repair-and-audit-resolve-by-name-tap-ignoring.md +0 -0
  326. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-replay-findings.md +0 -0
  327. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-root-findings.md +0 -0
  328. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-rules-workflows-reported-as-skills-uninstall-claims-a-store.md +0 -0
  329. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-run-findings.md +0 -0
  330. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-search-findings.md +0 -0
  331. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-singular-plural-misses-1-skills-1-issue-need-1-skill-pass-ac.md +0 -0
  332. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-six-count-flags-tap-chat-absorb-lint-changelog-hooks-skip-ut.md +0 -0
  333. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-skill-profile-name-slugging-is-inconsistent-distill-o-accept.md +0 -0
  334. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-snapshot-restore-replaces-the-lock-wholesale-orphaning-newer.md +0 -0
  335. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-stale-prose-after-shipped-changes-catalog-export-live-discov.md +0 -0
  336. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-stray-positionals-and-inapplicable-flags-silently-ignored-ac.md +0 -0
  337. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-sweep-positionals-json-lack-help-strings-and-no-command-help.md +0 -0
  338. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-sync-findings.md +0 -0
  339. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-tag-findings.md +0 -0
  340. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-tap-dry-run-is-silently-ignored-outside-catalog-spec-and-def.md +0 -0
  341. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-taps-findings.md +0 -0
  342. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-taps-outdated-decay-policy-snapshot-json-emit-display-string.md +0 -0
  343. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-trust-findings.md +0 -0
  344. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-trust-verify-labels-a-manifest-tampered-after-signing-by-a-t.md +0 -0
  345. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-unpin-findings.md +0 -0
  346. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-untap-findings.md +0 -0
  347. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-verify-drift-say-nothing-installed-exit-0-and-doctor-says-lo.md +0 -0
  348. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/audit-verify-findings.md +0 -0
  349. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  350. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  351. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  352. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  353. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  354. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  355. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/boost-first-rule.md +0 -0
  356. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  357. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  358. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/branch-current-gate.md +0 -0
  359. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  360. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  361. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  362. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  363. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  364. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  365. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  366. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/capability-policy-skips-rules-and-workflows.md +0 -0
  367. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/catalog-categories-beyond-curated.md +0 -0
  368. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  369. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  370. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  371. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  372. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  373. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  374. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  375. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/cli-audit-2026-08-full-sweep.md +0 -0
  376. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/cli-command-audit.md +0 -0
  377. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  378. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  379. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  380. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  381. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/command-carousel-page.md +0 -0
  382. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  383. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  384. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  385. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  386. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/concurrent-rag-builds-delete-each-others-temp-index.md +0 -0
  387. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  388. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  389. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  390. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  391. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  392. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  393. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +0 -0
  394. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  395. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  396. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  397. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  398. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  399. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  400. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  401. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  402. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  403. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  404. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  405. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  406. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  407. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  408. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  409. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  410. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  411. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  412. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  413. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  414. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  415. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  416. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  417. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  418. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  419. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  420. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  421. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  422. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  423. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  424. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  425. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  426. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  427. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  428. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  429. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  430. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  431. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  432. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  433. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  434. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  435. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  436. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  437. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/github-community-health-files.md +0 -0
  438. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  439. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  440. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  441. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  442. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  443. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  444. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  445. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  446. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  447. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  448. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  449. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  450. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  451. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  452. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  453. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  454. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  455. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  456. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  457. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  458. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  459. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  460. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  461. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  462. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  463. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  464. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  465. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  466. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  467. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  468. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  469. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  470. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  471. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  472. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  473. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  474. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  475. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  476. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  477. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  478. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  479. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  480. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  481. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  482. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  483. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  484. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  485. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  486. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  487. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  488. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  489. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  490. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  491. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  492. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  493. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  494. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  495. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  496. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  497. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  498. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  499. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  500. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  501. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  502. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  503. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  504. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  505. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mutation-shards-rerun-full-set-every-push.md +0 -0
  506. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  507. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  508. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +0 -0
  509. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  510. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  511. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  512. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  513. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  514. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  515. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  516. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  517. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/openssf-playbook.md +0 -0
  518. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/openssf-silver.md +0 -0
  519. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  520. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  521. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  522. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  523. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  524. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  525. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  526. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  527. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  528. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  529. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  530. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  531. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  532. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  533. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  534. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  535. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  536. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  537. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  538. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  539. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/publish-the-keyword-index.md +0 -0
  540. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  541. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  542. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  543. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  544. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  545. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  546. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  547. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  548. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  549. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  550. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  551. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  552. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/relicence-apache-2.md +0 -0
  553. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  554. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  555. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  556. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  557. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  558. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  559. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  560. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  561. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  562. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  563. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  564. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  565. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  566. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  567. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  568. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  569. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  570. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  571. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  572. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  573. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  574. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  575. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  576. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  577. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  578. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  579. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  580. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  581. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  582. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  583. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  584. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  585. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  586. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  587. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/shard-refresh-skips-processed-commits.md +0 -0
  588. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  589. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  590. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  591. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  592. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/shrink-the-published-index.md +0 -0
  593. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  594. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  595. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  596. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  597. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  598. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  599. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  600. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  601. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  602. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  603. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  604. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  605. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  606. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  607. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  608. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  609. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  610. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  611. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  612. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  613. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  614. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  615. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  616. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  617. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  618. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  619. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  620. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  621. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  622. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  623. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  624. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  625. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  626. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  627. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  628. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  629. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  630. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  631. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  632. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  633. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  634. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  635. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  636. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/workspace-scope-install.md +0 -0
  637. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/zip-strict-audit.md +0 -0
  638. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  639. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  640. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/security-design.md +0 -0
  641. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/semantic-search.md +0 -0
  642. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  643. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/verifying-releases.md +0 -0
  644. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/vex/meta.md +0 -0
  645. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/vex/openvex.json +0 -0
  646. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  647. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  648. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  649. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  650. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/eslint.config.mjs +0 -0
  651. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/README.md +0 -0
  652. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/__init__.py +0 -0
  653. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/baseline.json +0 -0
  654. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/faithfulness.py +0 -0
  655. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/golden_set.json +0 -0
  656. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/make_corpus.py +0 -0
  657. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/make_golden.py +0 -0
  658. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/metrics.py +0 -0
  659. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/publish_golden_dataset.py +0 -0
  660. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/evals/run_evals.py +0 -0
  661. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/examples/README.md +0 -0
  662. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/examples/adapt-demo.sh +0 -0
  663. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/examples/boost-run-prototype.sh +0 -0
  664. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/index.html +0 -0
  665. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/noxfile.py +0 -0
  666. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/pyproject.toml +0 -0
  667. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/coverage-tools.in +0 -0
  668. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/coverage-tools.txt +0 -0
  669. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/lint-tools.in +0 -0
  670. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/lint-tools.txt +0 -0
  671. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/mutation-tools.in +0 -0
  672. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/mutation-tools.txt +0 -0
  673. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/platform-pins.lock +0 -0
  674. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/release-tools.in +0 -0
  675. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/release-tools.txt +0 -0
  676. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/test-tools.in +0 -0
  677. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/requirements/test-tools.txt +0 -0
  678. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/a11y_check.py +0 -0
  679. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/add_spdx_headers.py +0 -0
  680. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/bench_cli.sh +0 -0
  681. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/build_command_reference.py +0 -0
  682. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/build_demo_index.py +0 -0
  683. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/build_registries.py +0 -0
  684. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/build_roadmap.py +0 -0
  685. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/build_scale_corpus.py +0 -0
  686. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/build_vex.py +0 -0
  687. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/check_anchors.py +0 -0
  688. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/check_branch_current.py +0 -0
  689. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/check_dco.py +0 -0
  690. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/check_licenses.py +0 -0
  691. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/check_reproducible.py +0 -0
  692. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/check_required_checks.py +0 -0
  693. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/ensure_eval_corpus.sh +0 -0
  694. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/eval_corpus.py +0 -0
  695. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/eval_explain.py +0 -0
  696. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/eval_gate.py +0 -0
  697. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/eval_recommend.py +0 -0
  698. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/eval_retrieval.py +0 -0
  699. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/eval_stats_summary.py +0 -0
  700. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/eval_tools.py +0 -0
  701. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/import_budget.py +0 -0
  702. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/lock_toolchain.py +0 -0
  703. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/measure_near_duplicate_bound.py +0 -0
  704. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/measure_registry.py +0 -0
  705. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/mutation_gate.py +0 -0
  706. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/mutation_shards.py +0 -0
  707. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/mutation_weights.json +0 -0
  708. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/normalize_sdist.py +0 -0
  709. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/page_budget.py +0 -0
  710. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/perf_gate.py +0 -0
  711. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/post_deploy_smoke.py +0 -0
  712. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/publish_eval_json.py +0 -0
  713. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/publish_shards.py +0 -0
  714. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/release_guard.py +0 -0
  715. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/release_preflight.py +0 -0
  716. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/serve_docs.py +0 -0
  717. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/scripts/shard_plan.py +0 -0
  718. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/sonar-project.properties +0 -0
  719. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/style/README.md +0 -0
  720. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/style/boost.css +0 -0
  721. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/style/boost.js +0 -0
  722. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/style/demo.html +0 -0
  723. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/adapt.feature +0 -0
  724. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/browse.feature +0 -0
  725. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/count.feature +0 -0
  726. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/discover.feature +0 -0
  727. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/doctor.feature +0 -0
  728. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/environment.py +0 -0
  729. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/explain.feature +0 -0
  730. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/index.feature +0 -0
  731. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/install.feature +0 -0
  732. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/list.feature +0 -0
  733. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/search.feature +0 -0
  734. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/steps/cli_steps.py +0 -0
  735. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/steps/discovery_steps.py +0 -0
  736. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/bdd/features/steps/quality_steps.py +0 -0
  737. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/eval/baseline.json +0 -0
  738. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/eval/explain.jsonl +0 -0
  739. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  740. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/eval/golden-natural.jsonl +0 -0
  741. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/eval/golden.jsonl +0 -0
  742. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/eval/recommend.jsonl +0 -0
  743. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/eval/taps-scale.txt +0 -0
  744. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/eval/taps.txt +0 -0
  745. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/eval/tool_calls.jsonl +0 -0
  746. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_bmad_all_hosts.py +0 -0
  747. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_capabilities_policy.py +0 -0
  748. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_adapt.py +0 -0
  749. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_bmad.py +0 -0
  750. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_catalog.py +0 -0
  751. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_hooks.py +0 -0
  752. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_hooks_gemini.py +0 -0
  753. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_pane_width.py +0 -0
  754. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_quickstart.py +0 -0
  755. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_cli_tap_pins.py +0 -0
  756. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_integrity_enforce.py +0 -0
  757. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_kind_conformance.py +0 -0
  758. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_property_parsers.py +0 -0
  759. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_run.py +0 -0
  760. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_tap_signing.py +0 -0
  761. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/functional/test_workspace_scope.py +0 -0
  762. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/README.md +0 -0
  763. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  764. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  765. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  766. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  767. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  768. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  769. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  770. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  771. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  772. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  773. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  774. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  775. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  776. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  777. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  778. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  779. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  780. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  781. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  782. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  783. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  784. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  785. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  786. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/fuzz_frontmatter.py +0 -0
  787. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/fuzz/fuzz_registry.py +0 -0
  788. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/langchain/conftest.py +0 -0
  789. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/langchain/test_graph.py +0 -0
  790. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/langchain/test_loader.py +0 -0
  791. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/langchain/test_retriever.py +0 -0
  792. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/make_fixture.py +0 -0
  793. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/perf/test_benchmarks.py +0 -0
  794. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_a11y_check.py +0 -0
  795. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_action_pin_lockstep.py +0 -0
  796. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_adapters.py +0 -0
  797. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_adapters_multi.py +0 -0
  798. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_adapters_runner.py +0 -0
  799. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_agents.py +0 -0
  800. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_aihost.py +0 -0
  801. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_archive.py +0 -0
  802. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_bmad_core.py +0 -0
  803. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_boost_first_offer.py +0 -0
  804. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_bootstrap.py +0 -0
  805. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_bot_pr_dco.py +0 -0
  806. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_branch_current.py +0 -0
  807. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_browse.py +0 -0
  808. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_builtin.py +0 -0
  809. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_capabilities.py +0 -0
  810. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_catalog.py +0 -0
  811. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_catalogbundle.py +0 -0
  812. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_check_anchors.py +0 -0
  813. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_check_dco.py +0 -0
  814. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_check_licenses.py +0 -0
  815. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_check_reproducible.py +0 -0
  816. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_claude_settings.py +0 -0
  817. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_clean_internal_cache.py +0 -0
  818. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_cli_update_shards.py +0 -0
  819. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_cliparse.py +0 -0
  820. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_codeql_analysis_key.py +0 -0
  821. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_command_reference_fresh.py +0 -0
  822. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_community_health_files.py +0 -0
  823. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_compact.py +0 -0
  824. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_complete.py +0 -0
  825. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_complete_rc_block.py +0 -0
  826. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_config.py +0 -0
  827. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_content_dedupe.py +0 -0
  828. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_content_identity.py +0 -0
  829. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_crash_redaction.py +0 -0
  830. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dedup_trust.py +0 -0
  831. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_demo_index.py +0 -0
  832. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense.py +0 -0
  833. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  834. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_embed_dedupe.py +0 -0
  835. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_entry_reuse.py +0 -0
  836. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_entry_vectors.py +0 -0
  837. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_fallback.py +0 -0
  838. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_fix_hint.py +0 -0
  839. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_progress.py +0 -0
  840. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_quantized.py +0 -0
  841. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_ready_order.py +0 -0
  842. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_shard_real_schema.py +0 -0
  843. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  844. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_shards.py +0 -0
  845. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_status.py +0 -0
  846. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_status_cheap.py +0 -0
  847. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dense_vector_dedupe.py +0 -0
  848. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_dependabot_config.py +0 -0
  849. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_distill_merge.py +0 -0
  850. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_docs_pages_linked.py +0 -0
  851. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_docsite_chrome.py +0 -0
  852. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_doctor_output_polish.py +0 -0
  853. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_drift_hint.py +0 -0
  854. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_ed25519.py +0 -0
  855. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_embed.py +0 -0
  856. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_embed_local.py +0 -0
  857. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_embed_truncated_response.py +0 -0
  858. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_entry_key.py +0 -0
  859. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_eval_baseline.py +0 -0
  860. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_eval_corpus.py +0 -0
  861. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_eval_faithfulness.py +0 -0
  862. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_eval_gate.py +0 -0
  863. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_eval_grading.py +0 -0
  864. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_eval_metrics.py +0 -0
  865. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_eval_stats_summary.py +0 -0
  866. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_eval_tools.py +0 -0
  867. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_eval_tools_probe.py +0 -0
  868. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  869. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_faithfulness.py +0 -0
  870. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_frontmatter.py +0 -0
  871. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_fuzz_targets.py +0 -0
  872. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  873. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_gitleaks_config.py +0 -0
  874. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_gitutil.py +0 -0
  875. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_gitutil_lfs.py +0 -0
  876. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_gitutil_sparse.py +0 -0
  877. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_gstack_coexistence.py +0 -0
  878. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_hook_settings_hosts.py +0 -0
  879. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_hookhost.py +0 -0
  880. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_import_budget.py +0 -0
  881. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_injectscan.py +0 -0
  882. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_install_permission_error.py +0 -0
  883. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_installscan.py +0 -0
  884. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_integrity.py +0 -0
  885. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_jsonstate.py +0 -0
  886. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_langchain_packaging.py +0 -0
  887. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_link_ownership.py +0 -0
  888. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_localembed.py +0 -0
  889. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_localembed_e2e.py +0 -0
  890. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_logs.py +0 -0
  891. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_marketing_counts.py +0 -0
  892. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_mcp.py +0 -0
  893. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_mcp_install_scan.py +0 -0
  894. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_mcp_read.py +0 -0
  895. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_mcpdecl.py +0 -0
  896. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_measure_registry.py +0 -0
  897. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_minisign.py +0 -0
  898. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_mutation_shards.py +0 -0
  899. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_mutation_subfile_shards.py +0 -0
  900. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_mutmut_source_paths.py +0 -0
  901. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_near_duplicate_collapse.py +0 -0
  902. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_nethttp.py +0 -0
  903. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_normalize_sdist.py +0 -0
  904. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_page_budget.py +0 -0
  905. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_paths.py +0 -0
  906. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_perf_gate.py +0 -0
  907. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_pkg_confusions.py +0 -0
  908. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_pkg_injection.py +0 -0
  909. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_pkg_secrets.py +0 -0
  910. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_platform_pins.py +0 -0
  911. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_post_deploy_smoke.py +0 -0
  912. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_project_mcp_sidecar.py +0 -0
  913. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_projectlock.py +0 -0
  914. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_provenance.py +0 -0
  915. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_publish_golden_dataset.py +0 -0
  916. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_rag.py +0 -0
  917. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_rag_fastpath.py +0 -0
  918. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_rag_fusion.py +0 -0
  919. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_registries_fresh.py +0 -0
  920. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_registry_categories.py +0 -0
  921. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_registry_parallel.py +0 -0
  922. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_release_guard.py +0 -0
  923. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_release_preflight.py +0 -0
  924. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_required_checks.py +0 -0
  925. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_rerank_cache.py +0 -0
  926. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_resolve.py +0 -0
  927. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_retrieve_any_near_duplicates.py +0 -0
  928. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_roadmap_fresh.py +0 -0
  929. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_rules.py +0 -0
  930. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_scale_corpus.py +0 -0
  931. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_scopes.py +0 -0
  932. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_secretscan.py +0 -0
  933. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_selfupdate.py +0 -0
  934. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_serve.py +0 -0
  935. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_serve_docs.py +0 -0
  936. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_shard_plan.py +0 -0
  937. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_shards.py +0 -0
  938. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_shards_incremental.py +0 -0
  939. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_shards_ingest.py +0 -0
  940. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_shards_matrix.py +0 -0
  941. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_smoke_covers_every_command.py +0 -0
  942. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_spdx_headers.py +0 -0
  943. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_stackprobe.py +0 -0
  944. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_store_materialize.py +0 -0
  945. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_sync_blocked_links.py +0 -0
  946. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  947. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_token_parity.py +0 -0
  948. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_toolchain_lock.py +0 -0
  949. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_trustaudit.py +0 -0
  950. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_typedvalue.py +0 -0
  951. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_typosquat.py +0 -0
  952. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_updatediff.py +0 -0
  953. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_version.py +0 -0
  954. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_version_tags.py +0 -0
  955. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_vex.py +0 -0
  956. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_visual_harness_flags.py +0 -0
  957. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_workflow_concurrency.py +0 -0
  958. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  959. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  960. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_workflow_timeouts.py +0 -0
  961. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_workflows.py +0 -0
  962. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  963. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/visual/a11y_check.mjs +0 -0
  964. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/visual/console_check.mjs +0 -0
  965. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/visual/package-lock.json +0 -0
  966. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/visual/package.json +0 -0
  967. {boost_skill_cli-1.2.97 → boost_skill_cli-1.2.99}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.97
3
+ Version: 1.2.99
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -468,6 +468,7 @@ is the whole setup.
468
468
  boost mcp register # every installed host (default: --host auto)
469
469
  boost mcp register --host gemini # just one
470
470
  boost mcp register --no-seed # register only; tap nothing
471
+ boost mcp register --dry-run # print the resolved command per host; change nothing
471
472
  boost mcp unregister # same host selection, in reverse
472
473
  ```
473
474
 
@@ -426,6 +426,7 @@ is the whole setup.
426
426
  boost mcp register # every installed host (default: --host auto)
427
427
  boost mcp register --host gemini # just one
428
428
  boost mcp register --no-seed # register only; tap nothing
429
+ boost mcp register --dry-run # print the resolved command per host; change nothing
429
430
  boost mcp unregister # same host selection, in reverse
430
431
  ```
431
432
 
@@ -2,7 +2,7 @@
2
2
  # Copyright the boost contributors.
3
3
  # SPDX-License-Identifier: Apache-2.0
4
4
  # boost — Homebrew for AI coding skills.
5
- # Thin shim: finds Python 3.9+, runs the boost_cli package that lives
5
+ # Thin shim: finds Python 3.12+, runs the boost_cli package that lives
6
6
  # next to this script (resolving symlinks, so `ln -s .../boost ~/bin/boost`
7
7
  # just works). No PyPI, no Artifactory — stdlib only.
8
8
  set -euo pipefail
@@ -24,7 +24,7 @@ fi
24
24
  find_python() {
25
25
  for py in python3 python; do
26
26
  if command -v "$py" >/dev/null 2>&1; then
27
- if "$py" -c 'import sys; sys.exit(0 if sys.version_info >= (3, 9) else 1)' 2>/dev/null; then
27
+ if "$py" -c 'import sys; sys.exit(0 if sys.version_info >= (3, 12) else 1)' 2>/dev/null; then
28
28
  echo "$py"
29
29
  return 0
30
30
  fi
@@ -34,7 +34,7 @@ find_python() {
34
34
  }
35
35
 
36
36
  PY="$(find_python)" || {
37
- echo "boost: Python 3.9+ is required but was not found on PATH" >&2
37
+ echo "boost: Python 3.12+ is required but was not found on PATH" >&2
38
38
  echo " hint: brew install python3" >&2
39
39
  exit 1
40
40
  }
@@ -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.97'
22
- __version_tuple__ = version_tuple = (1, 2, 97)
21
+ __version__ = version = '1.2.99'
22
+ __version_tuple__ = version_tuple = (1, 2, 99)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -11,6 +11,7 @@ from __future__ import annotations
11
11
  import contextlib
12
12
  import difflib
13
13
  import importlib
14
+ import os
14
15
  import sys
15
16
  import time
16
17
 
@@ -195,6 +196,9 @@ def print_help() -> None:
195
196
  else:
196
197
  print(usage)
197
198
  print(" " + detail)
199
+ print(out.c(
200
+ "Options: -V/--version -v/--verbose --debug -q/--quiet",
201
+ out.DIM))
198
202
 
199
203
  width = max(len(n) for n, _, _, _ in COMMANDS)
200
204
  for idx, (gkey, (_icon, title, desc)) in enumerate(GROUPS.items()):
@@ -220,6 +224,21 @@ def print_help() -> None:
220
224
 
221
225
 
222
226
  def print_command_help(name: str) -> int:
227
+ # `main`'s own aliases (-h/--help, -V/--version/version, help itself)
228
+ # never appear in COMMANDS, so `boost help --help` used to fall straight
229
+ # into `_unknown` and get difflib-guessed at an unrelated command
230
+ # (`--help` -> "heal", `version` -> "verify"). Resolve them the same way
231
+ # `main` does before treating the name as an unrecognized command.
232
+ if name in ("-h", "--help"):
233
+ print_help()
234
+ return 0
235
+ if name in ("-V", "--version", "version"):
236
+ print_version()
237
+ return 0
238
+ if name == "help":
239
+ print(out.c("boost help [COMMAND]", out.BOLD)
240
+ + " — show this index, or one command's own --help")
241
+ return 0
223
242
  meta = resolve(name)
224
243
  if not meta:
225
244
  return _unknown(name)
@@ -237,6 +256,13 @@ def _crash_hint(report) -> str:
237
256
 
238
257
 
239
258
  def _unknown(name: str) -> int:
259
+ # A dash-prefixed token is a mistyped flag, not a command guess — nothing
260
+ # in _BY_NAME is a plausible correction for e.g. `--hepl`, and guessing
261
+ # one anyway ("did you mean: heal?") reads as a wrong command suggestion
262
+ # rather than what actually happened.
263
+ if name.startswith("-"):
264
+ out.err("unknown option: %s" % name, hint="see `boost --help`")
265
+ return 2
240
266
  close = difflib.get_close_matches(name, list(_BY_NAME), n=3)
241
267
  out.err("unknown command: %s" % name,
242
268
  hint=("did you mean: %s?" % ", ".join(close)) if close
@@ -286,6 +312,102 @@ def _extract_globals(argv: list[str]) -> tuple[dict, list[str]]:
286
312
  return opts, argv[i:]
287
313
 
288
314
 
315
+ def _seal_broken_stdout() -> None:
316
+ """Stop CPython's own exit-time flush from re-raising BrokenPipeError.
317
+
318
+ A downstream reader closing early (``boost --help | head``) does not
319
+ raise the moment boost prints — small writes fit the pipe's kernel buffer
320
+ and succeed silently, so the error only surfaces on the next explicit
321
+ flush. Left unhandled it surfaces on the *interpreter's own* final flush
322
+ of stdout at shutdown, which happens outside any of boost's try/except
323
+ blocks: Python prints "Exception ignored on flushing sys.stdout:
324
+ BrokenPipeError" straight to stderr and the process exits non-zero.
325
+ Redirecting the fd to devnull means that final flush lands somewhere
326
+ that cannot raise.
327
+ """
328
+ with contextlib.suppress(Exception):
329
+ sys.stdout.flush()
330
+ with contextlib.suppress(Exception):
331
+ devnull = os.open(os.devnull, os.O_WRONLY)
332
+ try:
333
+ os.dup2(devnull, sys.stdout.fileno())
334
+ finally:
335
+ os.close(devnull)
336
+
337
+
338
+ def _route(argv: list[str]) -> int:
339
+ try:
340
+ if not argv or argv[0] in ("-h", "--help"):
341
+ print_help()
342
+ return 0
343
+ if argv[0] in ("-V", "--version", "version"):
344
+ print_version()
345
+ return 0
346
+ if argv[0] == "help":
347
+ if len(argv) > 1:
348
+ return print_command_help(argv[1])
349
+ print_help()
350
+ return 0
351
+ name, rest = argv[0], argv[1:]
352
+ if name in _PLUMBING:
353
+ # Before the _BY_NAME guard (it is not a command) and before
354
+ # log_invocation: this runs on every TAB, and logging a line per
355
+ # keystroke would bury the diagnostic log in completion noise.
356
+ return _PLUMBING[name](rest)
357
+ if name not in _BY_NAME:
358
+ return _unknown(name)
359
+ logs.log_invocation([name, *rest])
360
+ start = time.perf_counter()
361
+ rc = 70 # assume the worst until a handler proves otherwise
362
+ try:
363
+ rc = _dispatch(name, rest)
364
+ return rc
365
+ except BoostError as e:
366
+ logs.get_logger().info("BoostError: %s", e.message)
367
+ rc = 1
368
+ out.err(e.message, hint=e.hint)
369
+ return rc
370
+ except KeyboardInterrupt:
371
+ logs.get_logger().debug("interrupted by user")
372
+ rc = 130
373
+ print()
374
+ return rc
375
+ except BrokenPipeError:
376
+ # Reclassify before `except Exception` below can mistake a
377
+ # closed pipe for a crash and write a spurious crash report.
378
+ rc = 0
379
+ return rc
380
+ except SystemExit as e:
381
+ # argparse (--help, usage errors) exits via SystemExit, which is
382
+ # a BaseException and so skips the `except Exception` below
383
+ # entirely — left uncaught, the trail journaled the preset rc=70
384
+ # for every benign --help and usage exit instead of the real 0
385
+ # or 2.
386
+ code = e.code
387
+ rc = 0 if code is None else code if isinstance(code, int) else 1
388
+ raise
389
+ except Exception as e:
390
+ report = logs.write_crash_report(e, [name, *rest])
391
+ if logs.is_debug():
392
+ raise
393
+ out.err("boost hit an unexpected error: %s: %s"
394
+ % (type(e).__name__, e),
395
+ hint=_crash_hint(report))
396
+ return 70 # EX_SOFTWARE
397
+ finally:
398
+ # Bookend every invocation with its exit code + duration, even
399
+ # when the --debug path re-raises the traceback above.
400
+ logs.log_completion([name, *rest], rc,
401
+ (time.perf_counter() - start) * 1000)
402
+ finally:
403
+ # Force any buffered output through now, still inside `main`'s own
404
+ # BrokenPipeError handler below — a `--help`/`--version`/`count`
405
+ # write that merely fit the pipe's buffer never raised above, and
406
+ # would otherwise wait until the unhandled, uncatchable flush at
407
+ # interpreter shutdown to report the broken pipe.
408
+ sys.stdout.flush()
409
+
410
+
289
411
  def main(argv: list[str] | None = None) -> int:
290
412
  argv = list(sys.argv[1:] if argv is None else argv)
291
413
  out.harden_console_encoding()
@@ -297,64 +419,12 @@ def main(argv: list[str] | None = None) -> int:
297
419
  opts, argv = _extract_globals(argv)
298
420
  logs.configure(verbose=opts["verbose"], debug=opts["debug"],
299
421
  quiet=opts["quiet"])
300
- if not argv or argv[0] in ("-h", "--help"):
301
- print_help()
302
- return 0
303
- if argv[0] in ("-V", "--version", "version"):
304
- print_version()
305
- return 0
306
- if argv[0] == "help":
307
- if len(argv) > 1:
308
- return print_command_help(argv[1])
309
- print_help()
310
- return 0
311
- name, rest = argv[0], argv[1:]
312
- if name in _PLUMBING:
313
- # Before the _BY_NAME guard (it is not a command) and before
314
- # log_invocation: this runs on every TAB, and logging a line per
315
- # keystroke would bury the diagnostic log in completion noise.
316
- return _PLUMBING[name](rest)
317
- if name not in _BY_NAME:
318
- return _unknown(name)
319
- logs.log_invocation([name, *rest])
320
- start = time.perf_counter()
321
- rc = 70 # assume the worst until a handler proves otherwise
322
422
  try:
323
- rc = _dispatch(name, rest)
324
- return rc
325
- except BoostError as e:
326
- logs.get_logger().info("BoostError: %s", e.message)
327
- rc = 1
328
- out.err(e.message, hint=e.hint)
329
- return rc
330
- except KeyboardInterrupt:
331
- logs.get_logger().debug("interrupted by user")
332
- rc = 130
333
- print()
334
- return rc
423
+ return _route(argv)
335
424
  except BrokenPipeError:
336
- with contextlib.suppress(Exception):
337
- sys.stdout.close()
338
- rc = 0
339
- return rc
340
- except SystemExit as e:
341
- # argparse (--help, usage errors) exits via SystemExit, which is a
342
- # BaseException and so skips the `except Exception` below entirely —
343
- # left uncaught, the trail journaled the preset rc=70 for every
344
- # benign --help and usage exit instead of the real 0 or 2.
345
- code = e.code
346
- rc = 0 if code is None else code if isinstance(code, int) else 1
347
- raise
348
- except Exception as e:
349
- report = logs.write_crash_report(e, [name, *rest])
350
- if logs.is_debug():
351
- raise
352
- out.err("boost hit an unexpected error: %s: %s"
353
- % (type(e).__name__, e),
354
- hint=_crash_hint(report))
355
- return 70 # EX_SOFTWARE
356
- finally:
357
- # Bookend every invocation with its exit code + duration, even when the
358
- # --debug path re-raises the traceback above.
359
- logs.log_completion([name, *rest], rc,
360
- (time.perf_counter() - start) * 1000)
425
+ # Covers the early-return paths above (`--help`, `--version`,
426
+ # `help`, `__complete`) that have no try/except of their own, plus
427
+ # the final flush in `_route`'s own `finally` surfacing a pipe error
428
+ # the dispatch path's flush-free writes didn't.
429
+ _seal_broken_stdout()
430
+ return 0
@@ -80,6 +80,7 @@ def _iter_installed(names: list[str] | None = None) -> list[tuple[str, dict]]:
80
80
  """
81
81
  skills = lockfile.installed()
82
82
  if names:
83
+ names = list(dict.fromkeys(names)) # order-preserving dedupe
83
84
  missing, other_kind = [], []
84
85
  for n in names:
85
86
  if n in skills:
@@ -118,6 +119,7 @@ def _iter_installed_all(
118
119
  names: list[str] | None = None) -> list[tuple[str, str, dict]]:
119
120
  """[(kind, name, lock_entry)] across every section, or the given names."""
120
121
  if names:
122
+ names = list(dict.fromkeys(names)) # order-preserving dedupe
121
123
  out, missing = [], []
122
124
  for n in names:
123
125
  found = lockfile.find_any(n)
@@ -125,13 +125,21 @@ def cmd_config(argv) -> int:
125
125
  "`boost config unset` it first") from e
126
126
  val = config.get(args.key)
127
127
  journal.log("config", args.key, op="set")
128
+ if args.json:
129
+ print(json.dumps({"key": args.key, "value": val}))
130
+ return 0
128
131
  out.ok("set %s = %s"
129
132
  % (args.key, val if isinstance(val, str) else json.dumps(val)))
130
133
  return 0
131
134
 
132
135
  # unset
133
- if config.unset(args.key):
136
+ was_set = config.unset(args.key)
137
+ if was_set:
134
138
  journal.log("config", args.key, op="unset")
139
+ if args.json:
140
+ print(json.dumps({"key": args.key, "unset": was_set}))
141
+ return 0
142
+ if was_set:
135
143
  out.ok("unset %s" % args.key)
136
144
  else:
137
145
  out.info("%s not set" % args.key)
@@ -512,6 +520,9 @@ def cmd_policy(argv) -> int:
512
520
  pol[args.key] = _parse_policy_value(args.key, args.value)
513
521
  policy.save(pol)
514
522
  journal.log("policy", args.key, op="set")
523
+ if args.json:
524
+ print(json.dumps({"key": args.key, "value": pol[args.key]}))
525
+ return 0
515
526
  out.ok("set %s = %s" % (args.key, json.dumps(pol[args.key])))
516
527
  return 0
517
528
 
@@ -520,6 +531,9 @@ def cmd_policy(argv) -> int:
520
531
  pol[args.key] = policy.DEFAULTS[args.key]
521
532
  policy.save(pol)
522
533
  journal.log("policy", args.key, op="unset")
534
+ if args.json:
535
+ print(json.dumps({"key": args.key, "value": policy.DEFAULTS[args.key]}))
536
+ return 0
523
537
  out.ok("reset %s to default (%s)"
524
538
  % (args.key, json.dumps(policy.DEFAULTS[args.key])))
525
539
  return 0
@@ -529,7 +543,9 @@ def cmd_policy(argv) -> int:
529
543
  everything = lockfile.all_installed()
530
544
  min_score = int(pol.get("min_quality_score") or 0)
531
545
  violations = [] # (name, problem)
546
+ not_checked: set[str] = set()
532
547
  total = 0
548
+ skill_count = len(everything.get("skill", {}))
533
549
  for kind, section in everything.items():
534
550
  for name, entry in sorted(section.items()):
535
551
  total += 1
@@ -541,12 +557,36 @@ def cmd_policy(argv) -> int:
541
557
  violations.append((label, "tap %s is blocked" % tap))
542
558
  if pol["allowed_taps"] and tap not in pol["allowed_taps"] and tap != "local":
543
559
  violations.append((label, "tap %s is not on the allowlist" % tap))
560
+ violations.extend(
561
+ (label, msg) for msg in policy.check_installed_version(entry))
562
+ # require_description and denied_capabilities need the item's
563
+ # own content, which only a skill has on disk (see
564
+ # store.read_skill_meta) — a rule or workflow lands in a shared
565
+ # agent file with no per-item body to check.
566
+ if kind == "skill" and (pol["require_description"] or pol["denied_capabilities"]):
567
+ meta_body = store.read_skill_meta(name)
568
+ if meta_body is None:
569
+ not_checked.add(
570
+ "require_description/denied_capabilities "
571
+ "(store copy unreadable)")
572
+ else:
573
+ meta, body = meta_body
574
+ violations.extend(
575
+ (label, msg)
576
+ for msg in policy.check_installed_meta(meta, body))
577
+ elif kind != "skill" and (pol["require_description"] or pol["denied_capabilities"]):
578
+ not_checked.add(
579
+ "require_description/denied_capabilities for %s items "
580
+ "(no on-disk body to check)" % kind)
544
581
  # Quality scoring reads a store directory, which only skills have.
545
582
  if min_score and kind == "skill":
546
583
  score, _notes = util.score_skill(store.skill_store_dir(name))
547
584
  if score < min_score:
548
585
  violations.append(
549
586
  (label, "quality score %d < required %d" % (score, min_score)))
587
+ max_skills_msg = policy.max_skills_violation(skill_count)
588
+ if max_skills_msg:
589
+ violations.append(("(environment)", max_skills_msg))
550
590
  unpinned = sorted(
551
591
  n if k == "skill" else "%s (%s)" % (n, k)
552
592
  for k, section in everything.items()
@@ -560,6 +600,8 @@ def cmd_policy(argv) -> int:
560
600
  else ", ".join("%d %s%s" % (n, kind, _s(n))
561
601
  for kind, n in counts.items()))
562
602
 
603
+ enforce = config.get("policy_enforce", True)
604
+
563
605
  if args.json:
564
606
  print(json.dumps({
565
607
  # "skills" keeps its original meaning — the skill count — with the
@@ -570,14 +612,23 @@ def cmd_policy(argv) -> int:
570
612
  "violations": [{"skill": s, "violation": v} for s, v in violations],
571
613
  "pin_only": bool(pol["pin_only"]),
572
614
  "unpinned": unpinned if pol["pin_only"] else [],
615
+ "enforce": enforce,
616
+ "not_checked": sorted(not_checked),
573
617
  }, indent=2))
574
618
  return 1 if violations else 0
575
619
 
576
620
  _warn_invalid_policy_values()
621
+ if not enforce:
622
+ out.warn("policy_enforce is off — `boost install` does not enforce "
623
+ "any of the rules below; this report names what would be "
624
+ "flagged, not what is currently blocked")
577
625
  if pol["pin_only"]:
578
- out.info("pin-only mode is on — installs/updates are frozen"
626
+ out.info("pin-only mode is on — new installs and skill updates are "
627
+ "frozen (tap refreshes via `boost update` are unaffected)"
579
628
  + (" (%d unpinned item(s): %s)"
580
629
  % (len(unpinned), ", ".join(unpinned)) if unpinned else ""))
630
+ for note in sorted(not_checked):
631
+ out.dim(" not checked: %s" % note)
581
632
  if violations:
582
633
  out.table(violations, headers=("ITEM", "VIOLATION"))
583
634
  print()
@@ -960,6 +1011,21 @@ def _interval_label(seconds) -> str:
960
1011
  return "%ss" % seconds
961
1012
 
962
1013
 
1014
+ def _plist_interval_seconds(text: str) -> int | None:
1015
+ """Parse a usable ``StartInterval`` out of plist ``text``.
1016
+
1017
+ None for both "no ``StartInterval`` key" and "``StartInterval`` present
1018
+ but not positive" — a zero or negative interval can never fire, and
1019
+ treating it as usable is what let the next-run loop in ``cmd_schedule``
1020
+ spin forever advancing ``nxt`` by zero seconds each pass.
1021
+ """
1022
+ m = re.search(r"<key>StartInterval</key>\s*<integer>(-?\d+)</integer>", text)
1023
+ if not m:
1024
+ return None
1025
+ secs = int(m.group(1))
1026
+ return secs if secs > 0 else None
1027
+
1028
+
963
1029
  def cmd_schedule(argv) -> int:
964
1030
  """boost schedule [status|enable [--interval 6h|12h|daily]|disable]"""
965
1031
  p = cliparse.parser(
@@ -985,10 +1051,8 @@ def cmd_schedule(argv) -> int:
985
1051
  plist = _plist_path()
986
1052
  if plist.exists():
987
1053
  present = True
988
- m = re.search(r"<key>StartInterval</key>\s*<integer>(\d+)</integer>",
989
- plist.read_text(encoding="utf-8"))
990
- if m:
991
- secs = int(m.group(1))
1054
+ secs = _plist_interval_seconds(plist.read_text(encoding="utf-8"))
1055
+ if secs is not None:
992
1056
  interval = _interval_label(secs)
993
1057
  nxt = datetime.fromtimestamp(plist.stat().st_mtime + secs)
994
1058
  while nxt < datetime.now():
@@ -1015,7 +1079,8 @@ def cmd_schedule(argv) -> int:
1015
1079
  out.kv("platform", "%s (%s)" % (sys.platform, "launchd" if darwin else "cron"))
1016
1080
  out.kv("scheduled", "yes" if present else "no")
1017
1081
  if present:
1018
- out.kv("interval", "every %s" % interval)
1082
+ out.kv("interval", "every %s" % interval if interval is not None
1083
+ else "unknown (plist has no usable StartInterval)")
1019
1084
  out.kv("next run", next_run.strftime("%Y-%m-%d %H:%M (approx)")
1020
1085
  if next_run else "unknown")
1021
1086
  else:
@@ -1639,29 +1704,26 @@ def _mcp_tool(tool: str, args: dict):
1639
1704
  return REGISTRY.call(tool, args)
1640
1705
 
1641
1706
 
1642
- #: Substrings an agent CLI uses to say "this server is already registered".
1643
- #: Registering twice is not a failure — it is the state the user asked for —
1644
- #: and treating it as one is what made `--host auto` abort on host one and
1645
- #: never reach host two on any machine where boost was already in Claude.
1646
- _ALREADY = ("already exists", "already registered", "already configured")
1647
-
1648
-
1649
1707
  def _run_mcp_host(host: str, action: str, cmd) -> tuple[str, str]:
1650
1708
  """Run one host's register/unregister argv.
1651
1709
 
1652
1710
  Returns ``(status, detail)`` where status is:
1653
1711
 
1654
- * ``"ran"`` — the CLI ran and succeeded;
1655
- * ``"already"`` — it reported the server is already in the state asked
1656
- for, which is success with a different wording;
1657
- * ``"missing"`` — the CLI is not installed. Not an error: most machines
1658
- have one agent CLI, not all of them;
1659
- * ``"failed"`` — it is installed and something else went wrong.
1712
+ * ``"ran"`` — the CLI ran and did what was asked;
1713
+ * ``"already"`` — register reported the server is already in that
1714
+ state, which is success with a different wording;
1715
+ * ``"not_registered"`` — unregister reported there was nothing to remove,
1716
+ likewise success with a different wording;
1717
+ * ``"missing"`` — the CLI is not installed. Not an error: most
1718
+ machines have one agent CLI, not all of them;
1719
+ * ``"failed"`` — it is installed and something else went wrong.
1660
1720
 
1661
1721
  It **returns** rather than raises so one host cannot end the sweep. That
1662
1722
  was the bug: a present CLI exiting non-zero raised straight out of the
1663
1723
  loop, so with boost already registered in Claude, `--host auto` died on
1664
- "already exists" and never reached the second agent.
1724
+ "already exists" and never reached the second agent. The text
1725
+ classification itself lives in :func:`mcphost.classify_result`, which is
1726
+ pure and mutation-tested without a real agent CLI on PATH.
1665
1727
  """
1666
1728
  exe = mcphost.cli(host)
1667
1729
  if not shutil.which(exe):
@@ -1672,13 +1734,8 @@ def _run_mcp_host(host: str, action: str, cmd) -> tuple[str, str]:
1672
1734
  return "failed", str(e)
1673
1735
  for ln in (proc.stdout or "").strip().splitlines():
1674
1736
  out.info(ln)
1675
- if proc.returncode == 0:
1676
- return "ran", ""
1677
- blob = ((proc.stderr or "") + (proc.stdout or "")).lower()
1678
- if action == "register" and any(k in blob for k in _ALREADY):
1679
- return "already", ""
1680
- tail = (proc.stderr or "").strip().splitlines()
1681
- return "failed", tail[-1] if tail else "unknown error"
1737
+ return mcphost.classify_result(action, proc.returncode,
1738
+ proc.stdout, proc.stderr)
1682
1739
 
1683
1740
 
1684
1741
  def _seed_catalog_for_mcp(force: bool) -> None:
@@ -1787,7 +1844,7 @@ def _offer_boost_first(hosts: list[str]) -> None:
1787
1844
 
1788
1845
 
1789
1846
  def cmd_mcp(argv) -> int:
1790
- """boost mcp [register|unregister] [--host H] [--stdio] [--seed|--no-seed]"""
1847
+ """boost mcp [register|unregister] [--host H] [--stdio] [--seed|--no-seed] [--dry-run]"""
1791
1848
  p = cliparse.parser(
1792
1849
  prog="boost mcp",
1793
1850
  description="Register boost as an MCP server for your agent CLIs")
@@ -1800,6 +1857,9 @@ def cmd_mcp(argv) -> int:
1800
1857
  % ", ".join(mcphost.hosts()))
1801
1858
  p.add_argument("--stdio", action="store_true",
1802
1859
  help="run the MCP server on stdin/stdout (used by the agent)")
1860
+ p.add_argument("--dry-run", action="store_true",
1861
+ help="print the resolved command and install status per "
1862
+ "host; register or tap nothing")
1803
1863
  # Mutually exclusive: `--seed --no-seed` used to resolve silently to the
1804
1864
  # network-touching side, which is the wrong way for an ambiguous pair of
1805
1865
  # explicitly typed flags to break.
@@ -1821,6 +1881,25 @@ def cmd_mcp(argv) -> int:
1821
1881
  raise BoostError("unknown MCP host %r" % args.host,
1822
1882
  hint="known hosts: %s" % ", ".join(mcphost.hosts())) from e
1823
1883
 
1884
+ shim = str(paths.launcher())
1885
+ verb = "register" if args.action == "register" else "unregister"
1886
+
1887
+ if args.dry_run:
1888
+ # Before seeding and before any subprocess runs — the flag exists so
1889
+ # the argv boost would run is visible in the one case that mattered
1890
+ # (`--host gemini` with `gemini` on PATH), not only the one case that
1891
+ # was already visible for free (the CLI missing entirely).
1892
+ for host in targets:
1893
+ installed = shutil.which(mcphost.cli(host)) is not None
1894
+ cmd = mcphost.argv(host, args.action, shim)
1895
+ out.info("%s %s: %s" % (
1896
+ mcphost.label(host),
1897
+ out.role("(installed)" if installed else "(not installed)",
1898
+ "muted"),
1899
+ " ".join(cmd)))
1900
+ out.dim(" dry run — nothing was %sed, nothing tapped" % verb)
1901
+ return 0
1902
+
1824
1903
  # After the host name is validated and before anything is registered. The
1825
1904
  # ordering is not cosmetic in either direction: seeding first meant a
1826
1905
  # typo'd `--host` spent 14-45s and half a gigabyte before argparse's own
@@ -1829,12 +1908,14 @@ def cmd_mcp(argv) -> int:
1829
1908
  if args.action == "register" and (args.seed_ok or args.seed):
1830
1909
  _seed_catalog_for_mcp(args.seed)
1831
1910
 
1832
- shim = str(paths.launcher())
1833
1911
  # `auto` skips hosts that are not installed; naming a host explicitly (or
1834
1912
  # `all`) always reports it, so a user setting up a machine can see the argv
1835
- # for an agent CLI they have not installed yet.
1913
+ # for an agent CLI they have not installed yet. `named` is narrower than
1914
+ # `explicit`: it excludes `all`, which — like `auto` — deliberately shows
1915
+ # every host's argv without treating "not installed" as a failure.
1836
1916
  explicit = args.host not in (None, "", "auto")
1837
- done, already, missing, failed = [], [], [], {}
1917
+ named = mcphost.is_named(args.host)
1918
+ done, already, not_registered, missing, failed = [], [], [], [], {}
1838
1919
  for host in targets:
1839
1920
  cmd = mcphost.argv(host, args.action, shim)
1840
1921
  status, detail = _run_mcp_host(host, args.action, cmd)
@@ -1842,6 +1923,8 @@ def cmd_mcp(argv) -> int:
1842
1923
  done.append(host)
1843
1924
  elif status == "already":
1844
1925
  already.append(host)
1926
+ elif status == "not_registered":
1927
+ not_registered.append(host)
1845
1928
  elif status == "failed":
1846
1929
  # Collected, not raised: the next host is a different agent on a
1847
1930
  # different config file and has nothing to do with this failure.
@@ -1853,7 +1936,6 @@ def cmd_mcp(argv) -> int:
1853
1936
  % mcphost.cli(host))
1854
1937
  out.info(" ".join(cmd))
1855
1938
 
1856
- verb = "register" if args.action == "register" else "unregister"
1857
1939
  for host in done:
1858
1940
  # agy has no scopes — one global file — so claiming "(scope: user)"
1859
1941
  # would describe a distinction its CLI does not have.
@@ -1863,6 +1945,8 @@ def cmd_mcp(argv) -> int:
1863
1945
  for host in already:
1864
1946
  out.ok("already registered with %s — nothing to do"
1865
1947
  % mcphost.label(host))
1948
+ for host in not_registered:
1949
+ out.ok("%s: not registered — nothing to do" % mcphost.label(host))
1866
1950
  for host, detail in failed.items():
1867
1951
  out.warn("%s: %s mcp %s failed — %s"
1868
1952
  % (mcphost.label(host), mcphost.cli(host), args.action,
@@ -1870,7 +1954,7 @@ def cmd_mcp(argv) -> int:
1870
1954
  out.info(out.role("run it yourself: %s"
1871
1955
  % " ".join(mcphost.argv(host, args.action, shim)),
1872
1956
  "muted"))
1873
- settled = done + already
1957
+ settled = done + already + not_registered
1874
1958
  if not settled:
1875
1959
  if failed:
1876
1960
  # Every installed CLI failed. That is a real error — but only after
@@ -1885,7 +1969,10 @@ def cmd_mcp(argv) -> int:
1885
1969
  for host in missing:
1886
1970
  out.info(" ".join(mcphost.argv(host, args.action, shim)))
1887
1971
  journal.log("mcp", args.action, hosts="")
1888
- return 0
1972
+ # A single named host whose CLI is missing is a no-op, not a success:
1973
+ # `--host all` and `auto` both tolerate an absent CLI by design (see
1974
+ # `mcphost.is_named`), so only a one-host request fails here.
1975
+ return 1 if named else 0
1889
1976
  if args.action == "register":
1890
1977
  _offer_boost_first(settled)
1891
1978
  journal.log("mcp", args.action, hosts=",".join(settled))