boost-skill-cli 1.0.282__tar.gz → 1.0.284__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 (533) hide show
  1. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/configuration.py +12 -7
  4. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/mcp.py +37 -10
  5. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  6. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  7. boost_skill_cli-1.0.284/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +30 -0
  8. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/one-commit-can-cut-two-releases.md +6 -2
  9. boost_skill_cli-1.0.284/docs/roadmap/items/sbom-declares-the-wrong-version.md +54 -0
  10. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap.html +83 -3
  11. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_configuration.py +7 -0
  12. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_mcp.py +9 -1
  13. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.gitattributes +0 -0
  14. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.gitignore +0 -0
  15. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.gitleaks.toml +0 -0
  16. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.htmlvalidate.json +0 -0
  17. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.lighthouserc.json +0 -0
  18. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.lycheeignore +0 -0
  19. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.markdownlint-cli2.jsonc +0 -0
  20. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.pre-commit-config.yaml +0 -0
  21. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.stylelintrc.json +0 -0
  22. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.vale/styles/boost/Terminology.yml +0 -0
  23. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  24. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/.vale.ini +0 -0
  25. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/CLAUDE.md +0 -0
  26. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/CODE_OF_CONDUCT.md +0 -0
  27. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/CONTRIBUTING.md +0 -0
  28. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/LICENSE +0 -0
  29. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/MANIFEST.in +0 -0
  30. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/Makefile +0 -0
  31. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/README.md +0 -0
  32. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/SECURITY.md +0 -0
  33. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost +0 -0
  34. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/__init__.py +0 -0
  35. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/__main__.py +0 -0
  36. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/cli.py +0 -0
  37. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/cliparse.py +0 -0
  38. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/__init__.py +0 -0
  39. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/_common.py +0 -0
  40. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/bmad.py +0 -0
  41. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/discovery.py +0 -0
  42. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/hooks.py +0 -0
  43. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/info.py +0 -0
  44. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/intelligence.py +0 -0
  45. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/pkg.py +0 -0
  46. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/quality.py +0 -0
  47. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/run.py +0 -0
  48. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/safety.py +0 -0
  49. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/taps.py +0 -0
  50. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/commands/team.py +0 -0
  51. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/__init__.py +0 -0
  52. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/adapters.py +0 -0
  53. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/agents.py +0 -0
  54. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/ai.py +0 -0
  55. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/capabilities.py +0 -0
  56. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/catalog.py +0 -0
  57. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/claude_settings.py +0 -0
  58. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/config.py +0 -0
  59. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/dense.py +0 -0
  60. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/ed25519.py +0 -0
  61. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/embed.py +0 -0
  62. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/faithfulness.py +0 -0
  63. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/frontmatter.py +0 -0
  64. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/gitutil.py +0 -0
  65. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/imperative.py +0 -0
  66. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/injectscan.py +0 -0
  67. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/integrity.py +0 -0
  68. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/journal.py +0 -0
  69. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/lockfile.py +0 -0
  70. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/logs.py +0 -0
  71. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/mcpdecl.py +0 -0
  72. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/minisign.py +0 -0
  73. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/nethttp.py +0 -0
  74. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/output.py +0 -0
  75. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/paths.py +0 -0
  76. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/policy.py +0 -0
  77. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/projectlock.py +0 -0
  78. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/provenance.py +0 -0
  79. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/rag.py +0 -0
  80. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/registry.py +0 -0
  81. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/resolve.py +0 -0
  82. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/rules.py +0 -0
  83. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/scopes.py +0 -0
  84. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/secretscan.py +0 -0
  85. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/selfupdate.py +0 -0
  86. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/serve.py +0 -0
  87. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/stackprobe.py +0 -0
  88. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/staleness.py +0 -0
  89. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/store.py +0 -0
  90. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/trustaudit.py +0 -0
  91. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/typosquat.py +0 -0
  92. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/updatediff.py +0 -0
  93. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/util.py +0 -0
  94. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/core/workflows.py +0 -0
  95. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/data/registries.json +0 -0
  96. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/errors.py +0 -0
  97. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_cli/spin.py +0 -0
  98. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  99. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  100. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_skill_cli.egg-info/requires.txt +0 -0
  101. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/boost_skill_cli.egg-info/top_level.txt +0 -0
  102. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/codecov.yml +0 -0
  103. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/.claude/settings.local.json +0 -0
  104. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/DEBUGGING.md +0 -0
  105. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/adapters.html +0 -0
  106. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/gifs/distill.gif +0 -0
  107. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/gifs/doctor.gif +0 -0
  108. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/gifs/explain.gif +0 -0
  109. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/gifs/hooks.gif +0 -0
  110. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/gifs/install.gif +0 -0
  111. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/gifs/pulse.gif +0 -0
  112. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/gifs/search.gif +0 -0
  113. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/gifs/tap.gif +0 -0
  114. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/tapes/distill.tape +0 -0
  115. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/tapes/doctor.tape +0 -0
  116. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/tapes/explain.tape +0 -0
  117. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/tapes/hooks.tape +0 -0
  118. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/tapes/install.tape +0 -0
  119. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/tapes/pulse.tape +0 -0
  120. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/tapes/search.tape +0 -0
  121. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel/tapes/tap.tape +0 -0
  122. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/carousel.html +0 -0
  123. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/commands.html +0 -0
  124. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/demo.gif +0 -0
  125. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/demo.tape +0 -0
  126. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/design-roadmap.html +0 -0
  127. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/eval.html +0 -0
  128. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/index.html +0 -0
  129. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/mcp-hub.html +0 -0
  130. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/rag-architecture.md +0 -0
  131. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D01.md +0 -0
  132. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D02.md +0 -0
  133. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D03.md +0 -0
  134. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D04.md +0 -0
  135. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D05.md +0 -0
  136. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D06.md +0 -0
  137. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D07.md +0 -0
  138. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D08.md +0 -0
  139. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D09.md +0 -0
  140. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D10.md +0 -0
  141. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D11.md +0 -0
  142. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D12.md +0 -0
  143. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D13.md +0 -0
  144. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D14.md +0 -0
  145. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D15.md +0 -0
  146. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D16.md +0 -0
  147. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D17.md +0 -0
  148. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D18.md +0 -0
  149. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D19.md +0 -0
  150. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D20.md +0 -0
  151. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D21.md +0 -0
  152. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D22.md +0 -0
  153. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D23.md +0 -0
  154. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D24.md +0 -0
  155. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D25.md +0 -0
  156. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/BOOST-D26.md +0 -0
  157. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  158. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  159. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  160. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  161. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  162. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  163. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  164. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  165. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  166. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  167. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  168. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  169. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  170. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  171. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  172. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  173. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  174. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  175. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  176. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  177. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/command-carousel-page.md +0 -0
  178. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  179. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  180. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  181. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  182. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  183. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  184. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  185. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  186. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  187. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  188. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  189. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  190. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  191. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  192. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  193. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  194. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  195. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  196. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  197. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  198. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  199. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  200. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  201. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  202. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  203. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  204. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  205. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/github-community-health-files.md +0 -0
  206. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  207. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  208. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  209. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  210. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  211. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  212. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  213. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  214. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  215. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  216. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  217. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  218. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  219. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  220. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  221. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  222. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  223. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  224. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  225. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  226. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  227. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  228. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  229. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  230. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  231. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  232. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  233. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  234. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  235. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  236. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  237. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  238. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  239. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  240. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  241. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  242. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  243. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  244. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  245. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  246. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  247. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  248. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  249. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  250. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  251. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  252. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  253. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  254. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  255. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  256. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  257. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  258. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  259. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  260. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  261. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  262. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  263. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  264. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  265. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  266. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  267. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  268. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  269. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  270. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  271. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  272. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  273. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  274. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  275. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  276. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  277. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  278. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  279. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  280. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  281. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  282. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  283. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  284. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  285. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  286. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  287. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  288. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  289. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  290. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  291. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  292. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  293. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  294. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  295. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  296. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  297. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  298. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  299. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  300. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  301. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  302. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  303. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  304. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  305. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  306. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  307. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  308. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  309. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  310. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  311. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  312. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  313. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  314. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  315. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  316. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  317. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  318. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  319. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  320. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  321. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  322. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  323. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  324. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  325. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  326. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  327. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/workspace-scope-install.md +0 -0
  328. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  329. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/eslint.config.mjs +0 -0
  330. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/evals/README.md +0 -0
  331. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/evals/__init__.py +0 -0
  332. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/evals/baseline.json +0 -0
  333. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/evals/faithfulness.py +0 -0
  334. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/evals/golden_set.json +0 -0
  335. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/evals/make_corpus.py +0 -0
  336. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/evals/make_golden.py +0 -0
  337. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/evals/metrics.py +0 -0
  338. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/evals/run_evals.py +0 -0
  339. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/examples/README.md +0 -0
  340. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/examples/adapt-demo.sh +0 -0
  341. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/examples/boost-run-prototype.sh +0 -0
  342. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/index.html +0 -0
  343. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/noxfile.py +0 -0
  344. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/pyproject.toml +0 -0
  345. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/coverage-tools.in +0 -0
  346. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/coverage-tools.txt +0 -0
  347. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/lint-tools.in +0 -0
  348. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/lint-tools.txt +0 -0
  349. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/mutation-tools.in +0 -0
  350. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/mutation-tools.txt +0 -0
  351. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/release-tools.in +0 -0
  352. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/release-tools.txt +0 -0
  353. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/test-tools.in +0 -0
  354. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/requirements/test-tools.txt +0 -0
  355. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/a11y_check.py +0 -0
  356. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/bench_cli.sh +0 -0
  357. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/build_command_reference.py +0 -0
  358. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/build_registries.py +0 -0
  359. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/build_roadmap.py +0 -0
  360. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/check_anchors.py +0 -0
  361. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/check_licenses.py +0 -0
  362. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/check_required_checks.py +0 -0
  363. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/ensure_eval_corpus.sh +0 -0
  364. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/eval_explain.py +0 -0
  365. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/eval_gate.py +0 -0
  366. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/eval_recommend.py +0 -0
  367. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/eval_retrieval.py +0 -0
  368. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/eval_stats_summary.py +0 -0
  369. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/import_budget.py +0 -0
  370. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/lock_toolchain.py +0 -0
  371. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/mutation_gate.py +0 -0
  372. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/mutation_shards.py +0 -0
  373. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/mutation_weights.json +0 -0
  374. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/perf_gate.py +0 -0
  375. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/post_deploy_smoke.py +0 -0
  376. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/scripts/release_preflight.py +0 -0
  377. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/setup.cfg +0 -0
  378. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/sonar-project.properties +0 -0
  379. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/style/README.md +0 -0
  380. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/style/boost.css +0 -0
  381. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/style/boost.js +0 -0
  382. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/style/demo.html +0 -0
  383. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/adapt.feature +0 -0
  384. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/browse.feature +0 -0
  385. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/count.feature +0 -0
  386. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/discover.feature +0 -0
  387. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/doctor.feature +0 -0
  388. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/environment.py +0 -0
  389. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/explain.feature +0 -0
  390. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/index.feature +0 -0
  391. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/install.feature +0 -0
  392. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/list.feature +0 -0
  393. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/mcp.feature +0 -0
  394. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/search.feature +0 -0
  395. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/steps/cli_steps.py +0 -0
  396. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/steps/discovery_steps.py +0 -0
  397. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/steps/mcp_steps.py +0 -0
  398. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/bdd/features/steps/quality_steps.py +0 -0
  399. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/conftest.py +0 -0
  400. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/eval/baseline.json +0 -0
  401. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/eval/explain.jsonl +0 -0
  402. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/eval/golden.jsonl +0 -0
  403. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/eval/recommend.jsonl +0 -0
  404. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/eval/taps.txt +0 -0
  405. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_capabilities_policy.py +0 -0
  406. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_adapt.py +0 -0
  407. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_bmad.py +0 -0
  408. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_discovery.py +0 -0
  409. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_hooks.py +0 -0
  410. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_info.py +0 -0
  411. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_intelligence.py +0 -0
  412. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_pkg.py +0 -0
  413. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_quality.py +0 -0
  414. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_taps.py +0 -0
  415. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_cli_team.py +0 -0
  416. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_everyday_loop.py +0 -0
  417. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_integrity_enforce.py +0 -0
  418. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_property_parsers.py +0 -0
  419. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_run.py +0 -0
  420. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_tap_signing.py +0 -0
  421. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/functional/test_workspace_scope.py +0 -0
  422. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/README.md +0 -0
  423. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  424. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  425. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  426. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  427. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  428. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  429. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  430. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  431. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  432. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  433. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  434. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  435. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  436. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  437. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  438. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  439. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  440. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  441. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  442. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  443. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/fuzz_frontmatter.py +0 -0
  444. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/fuzz/fuzz_registry.py +0 -0
  445. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/make_fixture.py +0 -0
  446. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/perf/test_benchmarks.py +0 -0
  447. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/smoke.sh +0 -0
  448. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_a11y_check.py +0 -0
  449. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_adapters.py +0 -0
  450. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_adapters_multi.py +0 -0
  451. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_adapters_runner.py +0 -0
  452. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_agents.py +0 -0
  453. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_ai.py +0 -0
  454. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_capabilities.py +0 -0
  455. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_catalog.py +0 -0
  456. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_check_anchors.py +0 -0
  457. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_check_licenses.py +0 -0
  458. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_claude_settings.py +0 -0
  459. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_cliparse.py +0 -0
  460. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_codeql_analysis_key.py +0 -0
  461. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_command_reference_fresh.py +0 -0
  462. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_community_health_files.py +0 -0
  463. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_config.py +0 -0
  464. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_dense.py +0 -0
  465. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_dense_fallback.py +0 -0
  466. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_dependabot_config.py +0 -0
  467. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_docs_pages_linked.py +0 -0
  468. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_docsite_chrome.py +0 -0
  469. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_ed25519.py +0 -0
  470. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_embed.py +0 -0
  471. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_errors_and_cli_table.py +0 -0
  472. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_eval_faithfulness.py +0 -0
  473. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_eval_gate.py +0 -0
  474. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_eval_metrics.py +0 -0
  475. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_eval_stats_summary.py +0 -0
  476. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_faithfulness.py +0 -0
  477. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_frontmatter.py +0 -0
  478. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_fuzz_targets.py +0 -0
  479. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_gitleaks_config.py +0 -0
  480. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_gitutil.py +0 -0
  481. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_imperative.py +0 -0
  482. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_import_budget.py +0 -0
  483. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_injectscan.py +0 -0
  484. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_integrity.py +0 -0
  485. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_journal.py +0 -0
  486. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_lockfile.py +0 -0
  487. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_logs.py +0 -0
  488. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_marketing_counts.py +0 -0
  489. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_mcpdecl.py +0 -0
  490. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_minisign.py +0 -0
  491. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_mutation_hardening.py +0 -0
  492. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_mutation_shards.py +0 -0
  493. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_mutmut_source_paths.py +0 -0
  494. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_nethttp.py +0 -0
  495. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_output.py +0 -0
  496. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_paths.py +0 -0
  497. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_perf_gate.py +0 -0
  498. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_pkg_confusions.py +0 -0
  499. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_pkg_injection.py +0 -0
  500. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_pkg_secrets.py +0 -0
  501. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_policy.py +0 -0
  502. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_post_deploy_smoke.py +0 -0
  503. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_projectlock.py +0 -0
  504. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_provenance.py +0 -0
  505. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_rag.py +0 -0
  506. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_registries_fresh.py +0 -0
  507. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_registry.py +0 -0
  508. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_release_preflight.py +0 -0
  509. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_required_checks.py +0 -0
  510. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_resolve.py +0 -0
  511. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_roadmap_fresh.py +0 -0
  512. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_rules.py +0 -0
  513. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_scopes.py +0 -0
  514. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_secretscan.py +0 -0
  515. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_selfupdate.py +0 -0
  516. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_serve.py +0 -0
  517. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_spin.py +0 -0
  518. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_stackprobe.py +0 -0
  519. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_staleness.py +0 -0
  520. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_store.py +0 -0
  521. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_token_parity.py +0 -0
  522. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_toolchain_lock.py +0 -0
  523. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_trustaudit.py +0 -0
  524. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_typosquat.py +0 -0
  525. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_updatediff.py +0 -0
  526. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_util.py +0 -0
  527. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_version.py +0 -0
  528. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_workflow_timeouts.py +0 -0
  529. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/unit/test_workflows.py +0 -0
  530. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/visual/a11y_check.mjs +0 -0
  531. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/visual/console_check.mjs +0 -0
  532. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/tests/visual/package.json +0 -0
  533. {boost_skill_cli-1.0.282 → boost_skill_cli-1.0.284}/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.0.282
3
+ Version: 1.0.284
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -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.0.282'
22
- __version_tuple__ = version_tuple = (1, 0, 282)
21
+ __version__ = version = '1.0.284'
22
+ __version_tuple__ = version_tuple = (1, 0, 284)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -917,11 +917,14 @@ def _tool_discover_github(args: dict):
917
917
 
918
918
  REGISTRY.register(
919
919
  "boost_search",
920
- "FIRST STOP before writing a skill, subagent, slash-command, rule, or any "
921
- "reusable block of agent instructions from scratch: search thousands of "
922
- "curated, installable AI-agent skills across the configured registries. "
923
- "Returns ranked matches you can install in one call — don't reinvent one "
924
- "that already exists.",
920
+ "Find an existing, installable skill instead of improvising one. Reach for "
921
+ "this at two moments: (1) when starting non-trivial work — check whether a "
922
+ "vetted skill already covers the task before planning it yourself; (2) as "
923
+ "the FIRST STOP before writing a skill, subagent, slash-command, rule, or "
924
+ "any reusable block of agent instructions from scratch. Searches thousands "
925
+ "of curated AI-agent skills across the configured registries and returns "
926
+ "ranked matches you can install in one call — don't reinvent one that "
927
+ "already exists.",
925
928
  {"type": "object",
926
929
  "properties": {"query": {"type": "string",
927
930
  "description": "what the skill should do (a task, "
@@ -930,8 +933,10 @@ REGISTRY.register(
930
933
  _tool_search)
931
934
  REGISTRY.register(
932
935
  "boost_list",
933
- "List the skills already installed by boost — check here first to avoid "
934
- "reinstalling or duplicating something you already have.",
936
+ "List the skills already installed and usable right now. Check at the "
937
+ "START of a task to leverage a capability you already have — an installed "
938
+ "skill is a vetted procedure you can follow immediately, at no cost — and "
939
+ "again before installing, to avoid duplicating something you have.",
935
940
  {"type": "object", "properties": {}},
936
941
  _tool_list)
937
942
  REGISTRY.register(
@@ -83,19 +83,46 @@ PROTOCOL_VERSION = "2024-11-05"
83
83
  # Server-level guidance returned in the `initialize` result. MCP hosts load this
84
84
  # into the model's context, so it is boost's one chance to tell an agent WHEN it
85
85
  # is relevant — the difference between a search tool that sits unused and one an
86
- # agent reaches for before reinventing a skill. Framed by the agent's trigger
87
- # ("about to author reusable instructions"), not boost's nouns.
86
+ # agent reaches for. Framed by the agent's triggers, not boost's nouns.
87
+ #
88
+ # It declares TWO triggers, and the first exists because the second alone was
89
+ # not enough. Framed only as "before you author a skill", agents reached for
90
+ # boost exclusively when they were already about to write one — which is the
91
+ # rarer moment. The common one is starting ordinary work that an installed or
92
+ # installable skill already covers, and nothing was telling them to look. The
93
+ # closing proportion note is load-bearing in the other direction: an unbounded
94
+ # "always check first" turns every trivial turn into a tool call, and an agent
95
+ # that learns to ignore the guidance ignores all of it.
88
96
  INSTRUCTIONS = (
89
97
  "boost is a package manager for AI-agent skills: reusable, version-tracked "
90
98
  "capabilities (skills, rules, slash-commands, subagents) from curated "
91
- "registries. BEFORE you author a new skill, subagent, slash-command, rule, "
92
- "or any reusable block of agent instructions — or when the user describes a "
93
- "repeatable workflow (\"set up code review\", \"add a commit convention\") — "
94
- "call boost_search FIRST to check whether a vetted one already exists. "
95
- "Installing beats hand-writing: an installed skill is version-pinned, wired "
96
- "into every agent on this machine, policy-governed, and shareable with the "
97
- "team. Typical flow: boost_search -> boost_info -> boost_install. Only build "
98
- "from scratch when a search turns up nothing relevant."
99
+ "registries.\n"
100
+ "\n"
101
+ "Two moments make boost relevant. The first is the one usually missed:\n"
102
+ "\n"
103
+ "1. STARTING A TASK. Before doing non-trivial work — building a feature, "
104
+ "setting up tooling or CI, reviewing code, debugging a class of problem, "
105
+ "writing docs — stop and check whether a skill already covers it. Call "
106
+ "boost_list for what is installed and usable right now, and boost_search "
107
+ "for what could be. A matching skill is a procedure someone already got "
108
+ "right and vetted; following it beats reconstructing the same steps from "
109
+ "memory.\n"
110
+ "\n"
111
+ "2. AUTHORING. Before you write a new skill, subagent, slash-command, "
112
+ "rule, or any reusable block of agent instructions — or when the user "
113
+ "describes a repeatable workflow (\"set up code review\", \"add a commit "
114
+ "convention\") — call boost_search FIRST to check whether a vetted one "
115
+ "already exists. Installing beats hand-writing: an installed skill is "
116
+ "version-pinned, wired into every agent on this machine, policy-governed, "
117
+ "and shareable with the team.\n"
118
+ "\n"
119
+ "Typical flow: boost_search -> boost_info -> boost_install. Only build "
120
+ "from scratch when a search turns up nothing relevant.\n"
121
+ "\n"
122
+ "Proportion: skip the check for trivial or one-off turns — answering a "
123
+ "question, a small edit, running a command you were just handed. Checking "
124
+ "once when a task starts is the habit; checking before every tool call is "
125
+ "noise."
99
126
  )
100
127
 
101
128
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.282
3
+ Version: 1.0.284
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -232,6 +232,7 @@ docs/roadmap/items/make-the-roadmaps-discoverable.md
232
232
  docs/roadmap/items/markdown-consistency-markdownlint-cli2.md
233
233
  docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md
234
234
  docs/roadmap/items/mcp-aware-skills.md
235
+ docs/roadmap/items/mcp-check-skills-before-starting-a-task.md
235
236
  docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md
236
237
  docs/roadmap/items/mcp-launch-objc-fork-safety.md
237
238
  docs/roadmap/items/mcp-register-names-server-before-env.md
@@ -287,6 +288,7 @@ docs/roadmap/items/rule-install-native-materialization.md
287
288
  docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md
288
289
  docs/roadmap/items/runtime-explain-faithfulness-guardrail.md
289
290
  docs/roadmap/items/sbom-aware-scanning-osv-scanner.md
291
+ docs/roadmap/items/sbom-declares-the-wrong-version.md
290
292
  docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md
291
293
  docs/roadmap/items/sbom-release-event-never-fires.md
292
294
  docs/roadmap/items/scan-and-sync-rules-and-workflows.md
@@ -0,0 +1,30 @@
1
+ ---
2
+ id: mcp-check-skills-before-starting-a-task
3
+ board: code
4
+ section: dx
5
+ status: inflight
6
+ category: Interop · Adoption
7
+ complexity: S
8
+ impact: High
9
+ wow: 3
10
+ note: agent reflex
11
+ order: 64
12
+ owner: mcp-task-entrance
13
+ pr: 318
14
+ title: MCP — check for a skill when a task starts, not only when authoring one
15
+ ---
16
+ <a href="#mcp-search-before-reinventing">The previous pass</a> gave the MCP server
17
+ <code>initialize</code> <code>instructions</code> and intent-framed tool descriptions, but
18
+ framed both around a single trigger: <em>before you author a new skill</em>. That is the
19
+ rarer moment. Observed behaviour matched the framing exactly — agents called
20
+ <code>boost_search</code> only when they were already about to write a skill, and never to ask
21
+ whether an installed one covered the work in front of them. The common case, starting
22
+ ordinary work that a vetted skill already handles, had nothing pointing at it.
23
+ Broaden to <strong>two</strong> declared triggers: <em>starting a task</em> (call
24
+ <code>boost_list</code> for what is usable right now, <code>boost_search</code> for what could
25
+ be) and the existing <em>authoring</em> one. <code>boost_list</code> is re-framed from "avoid a
26
+ duplicate install" to "leverage a capability you already have" — it is the free half of the
27
+ check. A closing proportion note bounds it, because an unbounded <em>always check first</em>
28
+ turns every trivial turn into a tool call and an agent that learns to ignore the guidance
29
+ ignores all of it. Both triggers and the bound are pinned by tests, so dropping either
30
+ regresses.
@@ -48,5 +48,9 @@ ci will trigger its own release, but it means some merges never get their own ve
48
48
 
49
49
  <b>Already mitigated:</b> <code>sbom.yml</code> now builds and attaches an SBOM for <em>every</em>
50
50
  tag on the commit rather than only the highest, so a duplicate release no longer produces a release
51
- with no SBOM. Each tag is built separately, because setuptools-scm reads the version from the tag
52
- and one SBOM cannot honestly describe two versions.
51
+ with no SBOM. Each tag is built separately so its SBOM carries its own version.
52
+
53
+ <b>Correction:</b> the claim above originally read "because setuptools-scm reads the version from
54
+ the tag", and that is false — it reads the version from the <em>commit</em>, so separate checkouts
55
+ of two tags on one commit produce the same version. That was a second, quieter consequence of the
56
+ duplicate release, fixed separately in <code>sbom-declares-the-wrong-version</code>.
@@ -0,0 +1,54 @@
1
+ ---
2
+ id: sbom-declares-the-wrong-version
3
+ board: code
4
+ section: trust
5
+ status: shipped
6
+ category: Supply chain · Bug
7
+ complexity: S
8
+ impact: High
9
+ wow: 5
10
+ note: fixed — release v1.0.278's SBOM declared 1.0.277; the version is now pinned to the tag
11
+ order: 68
12
+ owner: loop/sbom-tag-version
13
+ pr:
14
+ title: The SBOM can declare a different version than the release it is attached to
15
+ ---
16
+ <code>sbom.yml</code> builds each released tag separately so that every release gets an SBOM
17
+ describing <em>its own</em> version. It does that by checking the tag out:
18
+ <code>git checkout --detach "refs/tags/$TAG"</code>. The premise is wrong.
19
+ <b>setuptools-scm derives the version from the commit, not from the ref used to reach it</b>, so
20
+ when one commit carries two tags every checkout resolves to the same version — whichever one
21
+ <code>git describe</code> picks, which is not the highest.
22
+
23
+ Measured against the real repository, detached at each tag in turn:
24
+
25
+ <code>checked out v1.0.278 -&gt; setuptools-scm says: 1.0.277</code><br>
26
+ <code>checked out v1.0.277 -&gt; setuptools-scm says: 1.0.277</code>
27
+
28
+ And confirmed in production rather than in a fixture — the published asset on
29
+ <code>v1.0.278</code>, downloaded from the release, contains
30
+ <code>{"name": "boost-skill-cli", "version": "1.0.277"}</code>. <b>The SBOM attached to release
31
+ v1.0.278 describes v1.0.277.</b> A consumer resolving that release's bill of materials gets a
32
+ document for a different version, which is precisely the trust property an SBOM exists to provide.
33
+
34
+ The blast radius is bounded by how often one commit cuts two releases, which
35
+ <code>one-commit-can-cut-two-releases</code> documents happening three times so far
36
+ (<code>246</code>/<code>247</code>, <code>248</code>/<code>249</code>, <code>277</code>/<code>278</code>).
37
+ Every duplicate pair mislabels one of its two SBOMs. It is <em>not</em> latent in
38
+ <code>publish.yml</code>, which builds the PyPI dist: that job checks out before the sibling run's
39
+ tag exists, so it happens to resolve correctly — all 281 PyPI versions are present and correctly
40
+ numbered. The defect is specific to the job that runs <em>after</em> both tags are in place.
41
+
42
+ <b>Shipped.</b> The build now pins the version to the tag it is building
43
+ (<code>SETUPTOOLS_SCM_PRETEND_VERSION_FOR_BOOST_SKILL_CLI="${TAG#v}"</code>) and then asserts the
44
+ wheel it produced carries that version, so a package rename — which would silently unhook the
45
+ scoped variable and restore the bug — fails the job instead of shipping a mislabelled document.
46
+ Verified both ways against the live repository: without the pin, <code>v1.0.278</code> resolves to
47
+ <code>1.0.277</code>; with it, <code>1.0.278</code>.
48
+
49
+ The same exercise settled the other thing this workflow had never proven: the multi-tag loop
50
+ itself. Both <code>run:</code> blocks were extracted verbatim from the YAML and driven against a
51
+ fixture repository with two tags on one commit, with <code>gh</code> and the build toolchain
52
+ stubbed. Resolution returns both tags newest-first, the loop iterates both, and it issues a
53
+ separate <code>upload</code> and a separate post-upload <code>view</code> assertion per tag. That
54
+ path had never executed in production — every commit since it shipped has carried exactly one tag.
@@ -110,7 +110,7 @@
110
110
  <div class="stat"><b>16</b><span>Shipped</span></div>
111
111
  <div class="stat"><b>1</b><span>Next up</span></div>
112
112
  <div class="stat"><b>4</b><span>Planned</span></div>
113
- <div class="stat"><b>173</b><span>Loop finds</span></div>
113
+ <div class="stat"><b>175</b><span>Loop finds</span></div>
114
114
  <!-- /ROADMAP:stats -->
115
115
  </div>
116
116
  </section>
@@ -2707,8 +2707,12 @@ ci will trigger its own release, but it means some merges never get their own ve
2707
2707
 
2708
2708
  <b>Already mitigated:</b> <code>sbom.yml</code> now builds and attaches an SBOM for <em>every</em>
2709
2709
  tag on the commit rather than only the highest, so a duplicate release no longer produces a release
2710
- with no SBOM. Each tag is built separately, because setuptools-scm reads the version from the tag
2711
- and one SBOM cannot honestly describe two versions.</p>
2710
+ with no SBOM. Each tag is built separately so its SBOM carries its own version.
2711
+
2712
+ <b>Correction:</b> the claim above originally read "because setuptools-scm reads the version from
2713
+ the tag", and that is false — it reads the version from the <em>commit</em>, so separate checkouts
2714
+ of two tags on one commit produce the same version. That was a second, quieter consequence of the
2715
+ duplicate release, fixed separately in <code>sbom-declares-the-wrong-version</code>.</p>
2712
2716
  <div class="meta">
2713
2717
  <span class="m">Complexity <b>M</b></span>
2714
2718
  <span class="m">Impact <b>Med</b></span>
@@ -3151,6 +3155,32 @@ three states: a <b>failing</b> actionlint now fails <code>make</code> (exit 2) i
3151
3155
  <span class="m">fixed — a failing actionlint now fails make, in all three targets</span>
3152
3156
  </div>
3153
3157
  </article>
3158
+
3159
+ <article class="cap rcard" id="mcp-check-skills-before-starting-a-task">
3160
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">Interop · Adoption</span></div>
3161
+ <h3>MCP — check for a skill when a task starts, not only when authoring one</h3>
3162
+ <p><a href="#mcp-search-before-reinventing">The previous pass</a> gave the MCP server
3163
+ <code>initialize</code> <code>instructions</code> and intent-framed tool descriptions, but
3164
+ framed both around a single trigger: <em>before you author a new skill</em>. That is the
3165
+ rarer moment. Observed behaviour matched the framing exactly — agents called
3166
+ <code>boost_search</code> only when they were already about to write a skill, and never to ask
3167
+ whether an installed one covered the work in front of them. The common case, starting
3168
+ ordinary work that a vetted skill already handles, had nothing pointing at it.
3169
+ Broaden to <strong>two</strong> declared triggers: <em>starting a task</em> (call
3170
+ <code>boost_list</code> for what is usable right now, <code>boost_search</code> for what could
3171
+ be) and the existing <em>authoring</em> one. <code>boost_list</code> is re-framed from "avoid a
3172
+ duplicate install" to "leverage a capability you already have" — it is the free half of the
3173
+ check. A closing proportion note bounds it, because an unbounded <em>always check first</em>
3174
+ turns every trivial turn into a tool call and an agent that learns to ignore the guidance
3175
+ ignores all of it. Both triggers and the bound are pinned by tests, so dropping either
3176
+ regresses.</p>
3177
+ <div class="meta">
3178
+ <span class="m">Complexity <b>S</b></span>
3179
+ <span class="m hi">Impact <b>High</b></span>
3180
+ <span class="m">Wow <b class="wow">★★★</b></span>
3181
+ <span class="m">agent reflex</span>
3182
+ </div>
3183
+ </article>
3154
3184
  <!-- /ROADMAP:cards -->
3155
3185
 
3156
3186
  </div>
@@ -4253,6 +4283,56 @@ having found error-severity alerts.</p>
4253
4283
  <span class="m">safe scoped to CodeQL (0 open) — adding Scorecard deadlocks every merge</span>
4254
4284
  </div>
4255
4285
  </article>
4286
+
4287
+ <article class="cap rcard" id="sbom-declares-the-wrong-version">
4288
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Supply chain · Bug</span></div>
4289
+ <h3>The SBOM can declare a different version than the release it is attached to</h3>
4290
+ <p><code>sbom.yml</code> builds each released tag separately so that every release gets an SBOM
4291
+ describing <em>its own</em> version. It does that by checking the tag out:
4292
+ <code>git checkout --detach "refs/tags/$TAG"</code>. The premise is wrong.
4293
+ <b>setuptools-scm derives the version from the commit, not from the ref used to reach it</b>, so
4294
+ when one commit carries two tags every checkout resolves to the same version — whichever one
4295
+ <code>git describe</code> picks, which is not the highest.
4296
+
4297
+ Measured against the real repository, detached at each tag in turn:
4298
+
4299
+ <code>checked out v1.0.278 -&gt; setuptools-scm says: 1.0.277</code><br>
4300
+ <code>checked out v1.0.277 -&gt; setuptools-scm says: 1.0.277</code>
4301
+
4302
+ And confirmed in production rather than in a fixture — the published asset on
4303
+ <code>v1.0.278</code>, downloaded from the release, contains
4304
+ <code>{"name": "boost-skill-cli", "version": "1.0.277"}</code>. <b>The SBOM attached to release
4305
+ v1.0.278 describes v1.0.277.</b> A consumer resolving that release's bill of materials gets a
4306
+ document for a different version, which is precisely the trust property an SBOM exists to provide.
4307
+
4308
+ The blast radius is bounded by how often one commit cuts two releases, which
4309
+ <code>one-commit-can-cut-two-releases</code> documents happening three times so far
4310
+ (<code>246</code>/<code>247</code>, <code>248</code>/<code>249</code>, <code>277</code>/<code>278</code>).
4311
+ Every duplicate pair mislabels one of its two SBOMs. It is <em>not</em> latent in
4312
+ <code>publish.yml</code>, which builds the PyPI dist: that job checks out before the sibling run's
4313
+ tag exists, so it happens to resolve correctly — all 281 PyPI versions are present and correctly
4314
+ numbered. The defect is specific to the job that runs <em>after</em> both tags are in place.
4315
+
4316
+ <b>Shipped.</b> The build now pins the version to the tag it is building
4317
+ (<code>SETUPTOOLS_SCM_PRETEND_VERSION_FOR_BOOST_SKILL_CLI="${TAG#v}"</code>) and then asserts the
4318
+ wheel it produced carries that version, so a package rename — which would silently unhook the
4319
+ scoped variable and restore the bug — fails the job instead of shipping a mislabelled document.
4320
+ Verified both ways against the live repository: without the pin, <code>v1.0.278</code> resolves to
4321
+ <code>1.0.277</code>; with it, <code>1.0.278</code>.
4322
+
4323
+ The same exercise settled the other thing this workflow had never proven: the multi-tag loop
4324
+ itself. Both <code>run:</code> blocks were extracted verbatim from the YAML and driven against a
4325
+ fixture repository with two tags on one commit, with <code>gh</code> and the build toolchain
4326
+ stubbed. Resolution returns both tags newest-first, the loop iterates both, and it issues a
4327
+ separate <code>upload</code> and a separate post-upload <code>view</code> assertion per tag. That
4328
+ path had never executed in production — every commit since it shipped has carried exactly one tag.</p>
4329
+ <div class="meta">
4330
+ <span class="m">Complexity <b>S</b></span>
4331
+ <span class="m hi">Impact <b>High</b></span>
4332
+ <span class="m">Wow <b class="wow">★★★★★</b></span>
4333
+ <span class="m">fixed — release v1.0.278's SBOM declared 1.0.277; the version is now pinned to the tag</span>
4334
+ </div>
4335
+ </article>
4256
4336
  <!-- /ROADMAP:cards -->
4257
4337
 
4258
4338
  </div>
@@ -876,8 +876,15 @@ class TestMcp:
876
876
  from boost_cli.commands import configuration
877
877
  specs = {s["name"]: s["description"].lower()
878
878
  for s in configuration.REGISTRY.specs()}
879
+ # search carries BOTH triggers: starting a task, and authoring. The
880
+ # second alone is why the tool sat unused for ordinary work.
881
+ assert "starting non-trivial work" in specs["boost_search"]
879
882
  assert "first stop before writing" in specs["boost_search"]
880
883
  assert "reinvent" in specs["boost_search"]
884
+ # list is the cheap half of the task-start check — leverage what is
885
+ # already installed, not merely "avoid a duplicate install".
886
+ assert "start" in specs["boost_list"]
887
+ assert "leverage" in specs["boost_list"]
881
888
  # install points back at the search that should precede it
882
889
  assert "boost_search" in specs["boost_install"]
883
890
  # info is framed as the vet-before-install step
@@ -116,9 +116,17 @@ class TestHandleRequest:
116
116
  instr = resp["result"]["instructions"]
117
117
  assert instr == mcp.INSTRUCTIONS
118
118
  low = instr.lower()
119
- assert "before you author" in low # the trigger moment
119
+ # TWO triggers must survive here. Authoring alone was the original
120
+ # framing and it under-fired: agents reached for boost only when about
121
+ # to write a skill, never to check whether one already covered the work
122
+ # in front of them. Dropping either trigger regresses that.
123
+ assert "starting a task" in low # trigger 1: leverage first
124
+ assert "boost_list" in instr # ...what is already installed
125
+ assert "before you write a new skill" in low # trigger 2: authoring
120
126
  assert "boost_search" in instr # the concrete first action
121
127
  assert "already exists" in low # the "don't reinvent" frame
128
+ # ...and it must stay bounded, or an agent learns to ignore all of it.
129
+ assert "skip the check for trivial" in low
122
130
 
123
131
  def test_protocol_version_constant(self):
124
132
  assert mcp.PROTOCOL_VERSION == "2024-11-05"