boost-skill-cli 1.0.253__tar.gz → 1.0.255__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 (500) hide show
  1. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/store.py +35 -2
  4. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  5. boost_skill_cli-1.0.255/docs/roadmap/items/sbom-release-event-never-fires.md +54 -0
  6. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap.html +27 -8
  7. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_store.py +120 -0
  8. boost_skill_cli-1.0.253/docs/roadmap/items/sbom-release-event-never-fires.md +0 -35
  9. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.gitattributes +0 -0
  10. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.gitignore +0 -0
  11. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.gitleaks.toml +0 -0
  12. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.htmlvalidate.json +0 -0
  13. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.lighthouserc.json +0 -0
  14. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.lycheeignore +0 -0
  15. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.markdownlint-cli2.jsonc +0 -0
  16. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.pre-commit-config.yaml +0 -0
  17. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.stylelintrc.json +0 -0
  18. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.vale/styles/boost/Terminology.yml +0 -0
  19. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  20. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/.vale.ini +0 -0
  21. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/CLAUDE.md +0 -0
  22. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/CONTRIBUTING.md +0 -0
  23. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/LICENSE +0 -0
  24. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/MANIFEST.in +0 -0
  25. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/Makefile +0 -0
  26. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/README.md +0 -0
  27. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/SECURITY.md +0 -0
  28. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost +0 -0
  29. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/__init__.py +0 -0
  30. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/__main__.py +0 -0
  31. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/cli.py +0 -0
  32. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/cliparse.py +0 -0
  33. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/__init__.py +0 -0
  34. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/_common.py +0 -0
  35. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/bmad.py +0 -0
  36. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/configuration.py +0 -0
  37. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/discovery.py +0 -0
  38. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/hooks.py +0 -0
  39. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/info.py +0 -0
  40. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/intelligence.py +0 -0
  41. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/pkg.py +0 -0
  42. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/quality.py +0 -0
  43. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/run.py +0 -0
  44. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/safety.py +0 -0
  45. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/taps.py +0 -0
  46. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/commands/team.py +0 -0
  47. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/__init__.py +0 -0
  48. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/adapters.py +0 -0
  49. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/agents.py +0 -0
  50. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/ai.py +0 -0
  51. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/capabilities.py +0 -0
  52. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/catalog.py +0 -0
  53. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/claude_settings.py +0 -0
  54. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/config.py +0 -0
  55. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/dense.py +0 -0
  56. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/ed25519.py +0 -0
  57. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/embed.py +0 -0
  58. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/faithfulness.py +0 -0
  59. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/frontmatter.py +0 -0
  60. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/gitutil.py +0 -0
  61. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/imperative.py +0 -0
  62. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/injectscan.py +0 -0
  63. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/integrity.py +0 -0
  64. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/journal.py +0 -0
  65. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/lockfile.py +0 -0
  66. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/logs.py +0 -0
  67. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/mcp.py +0 -0
  68. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/mcpdecl.py +0 -0
  69. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/minisign.py +0 -0
  70. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/nethttp.py +0 -0
  71. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/output.py +0 -0
  72. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/paths.py +0 -0
  73. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/policy.py +0 -0
  74. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/projectlock.py +0 -0
  75. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/provenance.py +0 -0
  76. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/rag.py +0 -0
  77. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/registry.py +0 -0
  78. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/resolve.py +0 -0
  79. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/rules.py +0 -0
  80. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/scopes.py +0 -0
  81. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/secretscan.py +0 -0
  82. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/selfupdate.py +0 -0
  83. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/serve.py +0 -0
  84. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/stackprobe.py +0 -0
  85. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/staleness.py +0 -0
  86. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/trustaudit.py +0 -0
  87. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/typosquat.py +0 -0
  88. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/updatediff.py +0 -0
  89. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/util.py +0 -0
  90. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/core/workflows.py +0 -0
  91. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/data/registries.json +0 -0
  92. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/errors.py +0 -0
  93. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_cli/spin.py +0 -0
  94. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  95. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  96. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  97. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_skill_cli.egg-info/requires.txt +0 -0
  98. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/boost_skill_cli.egg-info/top_level.txt +0 -0
  99. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/codecov.yml +0 -0
  100. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/.claude/settings.local.json +0 -0
  101. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/DEBUGGING.md +0 -0
  102. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/adapters.html +0 -0
  103. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/gifs/distill.gif +0 -0
  104. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/gifs/doctor.gif +0 -0
  105. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/gifs/explain.gif +0 -0
  106. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/gifs/hooks.gif +0 -0
  107. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/gifs/install.gif +0 -0
  108. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/gifs/pulse.gif +0 -0
  109. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/gifs/search.gif +0 -0
  110. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/gifs/tap.gif +0 -0
  111. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/tapes/distill.tape +0 -0
  112. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/tapes/doctor.tape +0 -0
  113. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/tapes/explain.tape +0 -0
  114. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/tapes/hooks.tape +0 -0
  115. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/tapes/install.tape +0 -0
  116. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/tapes/pulse.tape +0 -0
  117. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/tapes/search.tape +0 -0
  118. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel/tapes/tap.tape +0 -0
  119. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/carousel.html +0 -0
  120. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/commands.html +0 -0
  121. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/demo.gif +0 -0
  122. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/demo.tape +0 -0
  123. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/design-roadmap.html +0 -0
  124. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/eval.html +0 -0
  125. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/index.html +0 -0
  126. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/mcp-hub.html +0 -0
  127. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/rag-architecture.md +0 -0
  128. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D01.md +0 -0
  129. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D02.md +0 -0
  130. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D03.md +0 -0
  131. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D04.md +0 -0
  132. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D05.md +0 -0
  133. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D06.md +0 -0
  134. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D07.md +0 -0
  135. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D08.md +0 -0
  136. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D09.md +0 -0
  137. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D10.md +0 -0
  138. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D11.md +0 -0
  139. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D12.md +0 -0
  140. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D13.md +0 -0
  141. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D14.md +0 -0
  142. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D15.md +0 -0
  143. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D16.md +0 -0
  144. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D17.md +0 -0
  145. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D18.md +0 -0
  146. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D19.md +0 -0
  147. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D20.md +0 -0
  148. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D21.md +0 -0
  149. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D22.md +0 -0
  150. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D23.md +0 -0
  151. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D24.md +0 -0
  152. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D25.md +0 -0
  153. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/BOOST-D26.md +0 -0
  154. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  155. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  156. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  157. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  158. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  159. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  160. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  161. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  162. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  163. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  164. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  165. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  166. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  167. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  168. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  169. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  170. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  171. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/command-carousel-page.md +0 -0
  172. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  173. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  174. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  175. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  176. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  177. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  178. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  179. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  180. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  181. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  182. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  183. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  184. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  185. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  186. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  187. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  188. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  189. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  190. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  191. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  192. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  193. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  194. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  195. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  196. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/github-community-health-files.md +0 -0
  197. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  198. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  199. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  200. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  201. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  202. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  203. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  204. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  205. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  206. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  207. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  208. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  209. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  210. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  211. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  212. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  213. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  214. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  215. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  216. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  217. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  218. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  219. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  220. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  221. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  222. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  223. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  224. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  225. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  226. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  227. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  228. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  229. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  230. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  231. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  232. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  233. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  234. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  235. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  236. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  237. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  238. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  239. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  240. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  241. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  242. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  243. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  244. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  245. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  246. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  247. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  248. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  249. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  250. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  251. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  252. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  253. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  254. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  255. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  256. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  257. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  258. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  259. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  260. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  261. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  262. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  263. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  264. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  265. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  266. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  267. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  268. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  269. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  270. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  271. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  272. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  273. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  274. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  275. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  276. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  277. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  278. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  279. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  280. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  281. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  282. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  283. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  284. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  285. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  286. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  287. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  288. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  289. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  290. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  291. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  292. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  293. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  294. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  295. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  296. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  297. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  298. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  299. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  300. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  301. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  302. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  303. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  304. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  305. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  306. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  307. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  308. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  309. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  310. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  311. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  312. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/docs/roadmap/items/workspace-scope-install.md +0 -0
  313. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/eslint.config.mjs +0 -0
  314. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/examples/README.md +0 -0
  315. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/examples/adapt-demo.sh +0 -0
  316. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/examples/boost-run-prototype.sh +0 -0
  317. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/index.html +0 -0
  318. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/noxfile.py +0 -0
  319. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/pyproject.toml +0 -0
  320. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/coverage-tools.in +0 -0
  321. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/coverage-tools.txt +0 -0
  322. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/lint-tools.in +0 -0
  323. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/lint-tools.txt +0 -0
  324. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/mutation-tools.in +0 -0
  325. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/mutation-tools.txt +0 -0
  326. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/release-tools.in +0 -0
  327. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/release-tools.txt +0 -0
  328. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/test-tools.in +0 -0
  329. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/requirements/test-tools.txt +0 -0
  330. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/a11y_check.py +0 -0
  331. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/bench_cli.sh +0 -0
  332. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/build_command_reference.py +0 -0
  333. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/build_registries.py +0 -0
  334. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/build_roadmap.py +0 -0
  335. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/check_anchors.py +0 -0
  336. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/check_required_checks.py +0 -0
  337. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/ensure_eval_corpus.sh +0 -0
  338. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/eval_explain.py +0 -0
  339. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/eval_recommend.py +0 -0
  340. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/eval_retrieval.py +0 -0
  341. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/eval_stats_summary.py +0 -0
  342. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/import_budget.py +0 -0
  343. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/lock_toolchain.py +0 -0
  344. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/mutation_gate.py +0 -0
  345. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/mutation_shards.py +0 -0
  346. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/mutation_weights.json +0 -0
  347. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/perf_gate.py +0 -0
  348. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/post_deploy_smoke.py +0 -0
  349. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/scripts/release_preflight.py +0 -0
  350. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/setup.cfg +0 -0
  351. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/sonar-project.properties +0 -0
  352. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/style/README.md +0 -0
  353. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/style/boost.css +0 -0
  354. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/style/boost.js +0 -0
  355. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/style/demo.html +0 -0
  356. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/adapt.feature +0 -0
  357. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/browse.feature +0 -0
  358. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/count.feature +0 -0
  359. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/discover.feature +0 -0
  360. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/doctor.feature +0 -0
  361. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/environment.py +0 -0
  362. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/explain.feature +0 -0
  363. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/index.feature +0 -0
  364. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/install.feature +0 -0
  365. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/list.feature +0 -0
  366. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/mcp.feature +0 -0
  367. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/search.feature +0 -0
  368. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/steps/cli_steps.py +0 -0
  369. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/steps/discovery_steps.py +0 -0
  370. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/steps/mcp_steps.py +0 -0
  371. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/bdd/features/steps/quality_steps.py +0 -0
  372. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/conftest.py +0 -0
  373. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/eval/baseline.json +0 -0
  374. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/eval/explain.jsonl +0 -0
  375. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/eval/golden.jsonl +0 -0
  376. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/eval/recommend.jsonl +0 -0
  377. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/eval/taps.txt +0 -0
  378. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_capabilities_policy.py +0 -0
  379. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_adapt.py +0 -0
  380. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_bmad.py +0 -0
  381. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_configuration.py +0 -0
  382. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_discovery.py +0 -0
  383. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_hooks.py +0 -0
  384. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_info.py +0 -0
  385. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_intelligence.py +0 -0
  386. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_pkg.py +0 -0
  387. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_quality.py +0 -0
  388. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_taps.py +0 -0
  389. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_cli_team.py +0 -0
  390. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_everyday_loop.py +0 -0
  391. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_integrity_enforce.py +0 -0
  392. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_property_parsers.py +0 -0
  393. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_run.py +0 -0
  394. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_tap_signing.py +0 -0
  395. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/functional/test_workspace_scope.py +0 -0
  396. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/README.md +0 -0
  397. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  398. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  399. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  400. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  401. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  402. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  403. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  404. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  405. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  406. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  407. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  408. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  409. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  410. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  411. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  412. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  413. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  414. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  415. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  416. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  417. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/fuzz_frontmatter.py +0 -0
  418. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/fuzz/fuzz_registry.py +0 -0
  419. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/make_fixture.py +0 -0
  420. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/perf/test_benchmarks.py +0 -0
  421. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/smoke.sh +0 -0
  422. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_a11y_check.py +0 -0
  423. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_adapters.py +0 -0
  424. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_adapters_multi.py +0 -0
  425. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_adapters_runner.py +0 -0
  426. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_agents.py +0 -0
  427. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_ai.py +0 -0
  428. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_capabilities.py +0 -0
  429. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_catalog.py +0 -0
  430. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_check_anchors.py +0 -0
  431. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_claude_settings.py +0 -0
  432. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_cliparse.py +0 -0
  433. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_command_reference_fresh.py +0 -0
  434. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_config.py +0 -0
  435. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_dense.py +0 -0
  436. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_dense_fallback.py +0 -0
  437. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_docs_pages_linked.py +0 -0
  438. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_docsite_chrome.py +0 -0
  439. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_ed25519.py +0 -0
  440. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_embed.py +0 -0
  441. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_errors_and_cli_table.py +0 -0
  442. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_eval_stats_summary.py +0 -0
  443. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_faithfulness.py +0 -0
  444. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_frontmatter.py +0 -0
  445. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_fuzz_targets.py +0 -0
  446. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_gitleaks_config.py +0 -0
  447. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_gitutil.py +0 -0
  448. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_imperative.py +0 -0
  449. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_import_budget.py +0 -0
  450. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_injectscan.py +0 -0
  451. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_integrity.py +0 -0
  452. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_journal.py +0 -0
  453. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_lockfile.py +0 -0
  454. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_logs.py +0 -0
  455. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_marketing_counts.py +0 -0
  456. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_mcp.py +0 -0
  457. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_mcpdecl.py +0 -0
  458. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_minisign.py +0 -0
  459. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_mutation_hardening.py +0 -0
  460. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_mutation_shards.py +0 -0
  461. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_mutmut_source_paths.py +0 -0
  462. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_nethttp.py +0 -0
  463. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_output.py +0 -0
  464. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_paths.py +0 -0
  465. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_perf_gate.py +0 -0
  466. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_pkg_confusions.py +0 -0
  467. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_pkg_injection.py +0 -0
  468. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_pkg_secrets.py +0 -0
  469. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_policy.py +0 -0
  470. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_post_deploy_smoke.py +0 -0
  471. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_projectlock.py +0 -0
  472. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_provenance.py +0 -0
  473. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_rag.py +0 -0
  474. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_registries_fresh.py +0 -0
  475. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_registry.py +0 -0
  476. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_release_preflight.py +0 -0
  477. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_required_checks.py +0 -0
  478. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_resolve.py +0 -0
  479. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_roadmap_fresh.py +0 -0
  480. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_rules.py +0 -0
  481. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_scopes.py +0 -0
  482. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_secretscan.py +0 -0
  483. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_selfupdate.py +0 -0
  484. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_serve.py +0 -0
  485. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_spin.py +0 -0
  486. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_stackprobe.py +0 -0
  487. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_staleness.py +0 -0
  488. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_token_parity.py +0 -0
  489. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_toolchain_lock.py +0 -0
  490. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_trustaudit.py +0 -0
  491. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_typosquat.py +0 -0
  492. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_updatediff.py +0 -0
  493. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_util.py +0 -0
  494. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_version.py +0 -0
  495. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_workflow_timeouts.py +0 -0
  496. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/unit/test_workflows.py +0 -0
  497. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/visual/a11y_check.mjs +0 -0
  498. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/visual/console_check.mjs +0 -0
  499. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/tests/visual/package.json +0 -0
  500. {boost_skill_cli-1.0.253 → boost_skill_cli-1.0.255}/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.253
3
+ Version: 1.0.255
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.253'
22
- __version_tuple__ = version_tuple = (1, 0, 253)
21
+ __version__ = version = '1.0.255'
22
+ __version_tuple__ = version_tuple = (1, 0, 255)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -96,6 +96,36 @@ def link_agents(name: str, only: Optional[List[str]] = None) -> InstallResult:
96
96
  return res
97
97
 
98
98
 
99
+ def preserved_agent_scope(only_agents: Optional[List[str]],
100
+ existing: Optional[dict]) -> Optional[List[str]]:
101
+ """Agent scope for a re-install: the caller's if given, else the lock's.
102
+
103
+ ``boost install foo --agent claude-code`` records exactly that subset. But
104
+ ``update`` and ``reinstall`` force-reinstall with ``only_agents=None``, and
105
+ ``link_agents(None)`` fans out to *every* enabled agent — so a deliberate
106
+ narrowing silently became a full install, and the lock entry was rewritten
107
+ to match. Falling back to what the lock already records keeps the scope a
108
+ property of the install rather than of whichever agents happen to be
109
+ enabled the next time something updates.
110
+
111
+ An explicit ``only_agents`` still wins, so re-running install with
112
+ ``--agent`` remains the way to widen the scope again. Skills record their
113
+ scope as ``agents``; rules and workflows record one ``materializations``
114
+ row per agent. An empty record means "nothing was linked", not "link
115
+ nothing", so it falls back to every enabled agent — exactly what
116
+ ``link_agents`` does with ``None``.
117
+ """
118
+ if only_agents is not None:
119
+ return only_agents
120
+ if not existing:
121
+ return None
122
+ recorded = existing.get("agents")
123
+ if recorded is None:
124
+ recorded = [m.get("agent")
125
+ for m in existing.get("materializations") or ()]
126
+ return [a for a in recorded if a] or None
127
+
128
+
99
129
  def unlink_agents(name: str) -> List[str]:
100
130
  """Remove the ``name`` symlink from every enabled agent dir.
101
131
 
@@ -277,7 +307,7 @@ def install(entry: dict, force: bool = False,
277
307
  paths.ensure_dirs()
278
308
  _copy_skill(src, dest)
279
309
 
280
- res = link_agents(name, only=only_agents)
310
+ res = link_agents(name, only=preserved_agent_scope(only_agents, existing))
281
311
  res.upgraded = existing is not None
282
312
  res.score, _ = util.score_skill(dest)
283
313
  res.mcp_servers = declared_mcp_servers(dest)
@@ -337,6 +367,7 @@ def _install_project_skill(entry: dict, force: bool = False,
337
367
 
338
368
  src = source_dir_for(entry)
339
369
  _enforce_capability_policy(name, src / "SKILL.md")
370
+ only_agents = preserved_agent_scope(only_agents, existing)
340
371
  targets = [(agent, scopes.skill_target(skills_dir, name, base=resolved_base))
341
372
  for agent, skills_dir in agents.enabled_agents().items()
342
373
  if not only_agents or agent in only_agents]
@@ -535,6 +566,7 @@ def _install_rule(entry: dict, force: bool = False,
535
566
  if existing and not force:
536
567
  raise BoostError("%s is already installed" % name,
537
568
  hint="`boost reinstall %s` to force" % name)
569
+ only_agents = preserved_agent_scope(only_agents, existing)
538
570
 
539
571
  violations = policy.check_install(entry, len(lockfile.installed()))
540
572
  if violations:
@@ -641,6 +673,7 @@ def _install_workflow(entry: dict, force: bool = False,
641
673
  if existing and not force:
642
674
  raise BoostError("%s is already installed" % name,
643
675
  hint="`boost reinstall %s` to force" % name)
676
+ only_agents = preserved_agent_scope(only_agents, existing)
644
677
 
645
678
  violations = policy.check_install(entry, len(lockfile.installed()))
646
679
  if violations:
@@ -756,7 +789,7 @@ def install_from_path(src_dir: Path, name: Optional[str] = None,
756
789
  dest = skill_store_dir(name)
757
790
  paths.ensure_dirs()
758
791
  _copy_skill(src_dir, dest)
759
- res = link_agents(name, only=only_agents)
792
+ res = link_agents(name, only=preserved_agent_scope(only_agents, existing))
760
793
  res.score, _ = util.score_skill(dest)
761
794
  res.mcp_servers = declared_mcp_servers(dest)
762
795
  now = util.now_iso()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.253
3
+ Version: 1.0.255
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -0,0 +1,54 @@
1
+ ---
2
+ id: sbom-release-event-never-fires
3
+ board: code
4
+ section: trust
5
+ status: shipped
6
+ category: Supply chain
7
+ complexity: S
8
+ impact: High
9
+ wow: 4
10
+ note: 253 releases shipped with no SBOM; fixed with workflow_run
11
+ order: 50
12
+ owner:
13
+ pr: 295
14
+ title: <code>sbom.yml</code> has never run — it waits for an event <code>GITHUB_TOKEN</code> cannot emit
15
+ ---
16
+ <code>sbom.yml</code> triggers on <code>release: types: [published]</code> and promises
17
+ "a CycloneDX SBOM for every release, attached to the GitHub Release as an asset".
18
+ It has <b>0 runs</b>. Releases here are created by <code>release-drafter</code> inside
19
+ <code>publish.yml</code> authenticated with <code>GITHUB_TOKEN</code>, and <b>events created
20
+ with <code>GITHUB_TOKEN</code> do not trigger workflows</b>. <code>publish.yml</code>'s own
21
+ header states that rule verbatim — "we never rely on the release event to trigger a second
22
+ workflow" — and <code>sbom.yml</code> is exactly that pattern.
23
+
24
+ So the <code>if: github.event_name == 'release'</code> guard on its upload step is dead code,
25
+ <code>workflow_dispatch</code> is the only reachable path and has never been used, and every
26
+ one of the last ten releases carries <code>assets: []</code>. Zero SBOMs have been produced
27
+ since the file landed on 2026-07-22. Same shape as the LangGraph conformance leg: wired up,
28
+ looks covered, never executed once.
29
+
30
+ By the time it was fixed the count was <b>253 releases, 0 runs, 0 SBOM assets</b>.
31
+
32
+ <b>Fixed with a third option neither branch of that decision considered:</b>
33
+ <code>workflow_run</code>. The <code>GITHUB_TOKEN</code> restriction applies to
34
+ <em>events</em> a token creates; <code>workflow_run</code> is documented as exempt and fires
35
+ on the upstream <em>run</em> completing regardless of what triggered it &mdash; which is
36
+ already how <code>ci &rarr; release</code> works in this repo. Chaining
37
+ <code>release &rarr; sbom</code> makes this the third link, inside GitHub's documented
38
+ three-level <code>workflow_run</code> limit. So no PAT is needed, and the SBOM logic stays
39
+ out of <code>publish.yml</code>.
40
+
41
+ That separation turned out to matter more than "keeps the logic in its own file":
42
+ <code>publish.yml</code>'s job holds PyPI Trusted-Publishing OIDC credentials, and generating
43
+ the SBOM means installing a third-party build plugin (<code>cyclonedx-bom</code>). Inlining it
44
+ would have put that plugin inside the one job that can publish to PyPI. Kept separate, it
45
+ holds only <code>contents: write</code>.
46
+
47
+ Two details the trigger change forced. The workflow now resolves its tag from the release
48
+ commit (<code>git tag --points-at</code>) rather than "newest release" &mdash; releases here
49
+ land minutes apart, so <code>gh release view</code> would race and SBOM the <em>next</em>
50
+ version; and two tags on one commit is real (<code>v1.0.248</code> and <code>v1.0.249</code>
51
+ both point at <code>c750651</code>), so it takes the highest. And per the original note, a
52
+ final step re-reads the release and fails unless the asset is actually attached &mdash; a
53
+ silent upload no-op is indistinguishable from success, which is the same class of quiet
54
+ nothing that produced this bug.
@@ -3520,7 +3520,7 @@ is built.</p>
3520
3520
  </article>
3521
3521
 
3522
3522
  <article class="cap rcard" id="sbom-release-event-never-fires">
3523
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Supply chain</span></div>
3523
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Supply chain</span></div>
3524
3524
  <h3><code>sbom.yml</code> has never run — it waits for an event <code>GITHUB_TOKEN</code> cannot emit</h3>
3525
3525
  <p><code>sbom.yml</code> triggers on <code>release: types: [published]</code> and promises
3526
3526
  "a CycloneDX SBOM for every release, attached to the GitHub Release as an asset".
@@ -3536,17 +3536,36 @@ one of the last ten releases carries <code>assets: []</code>. Zero SBOMs have be
3536
3536
  since the file landed on 2026-07-22. Same shape as the LangGraph conformance leg: wired up,
3537
3537
  looks covered, never executed once.
3538
3538
 
3539
- Fix is a decision, not a patch: either build and attach the SBOM inside
3540
- <code>publish.yml</code>'s release job (it already holds <code>contents: write</code> and is
3541
- where the tag is cut), or have <code>publish.yml</code> dispatch this workflow with a PAT
3542
- rather than <code>GITHUB_TOKEN</code>. The first is simpler and keeps the release atomic;
3543
- the second keeps the SBOM logic in its own file. Worth pairing with a check that fails the
3544
- release when the asset is missing, so "never ran" cannot recur silently.</p>
3539
+ By the time it was fixed the count was <b>253 releases, 0 runs, 0 SBOM assets</b>.
3540
+
3541
+ <b>Fixed with a third option neither branch of that decision considered:</b>
3542
+ <code>workflow_run</code>. The <code>GITHUB_TOKEN</code> restriction applies to
3543
+ <em>events</em> a token creates; <code>workflow_run</code> is documented as exempt and fires
3544
+ on the upstream <em>run</em> completing regardless of what triggered it &mdash; which is
3545
+ already how <code>ci &rarr; release</code> works in this repo. Chaining
3546
+ <code>release &rarr; sbom</code> makes this the third link, inside GitHub's documented
3547
+ three-level <code>workflow_run</code> limit. So no PAT is needed, and the SBOM logic stays
3548
+ out of <code>publish.yml</code>.
3549
+
3550
+ That separation turned out to matter more than "keeps the logic in its own file":
3551
+ <code>publish.yml</code>'s job holds PyPI Trusted-Publishing OIDC credentials, and generating
3552
+ the SBOM means installing a third-party build plugin (<code>cyclonedx-bom</code>). Inlining it
3553
+ would have put that plugin inside the one job that can publish to PyPI. Kept separate, it
3554
+ holds only <code>contents: write</code>.
3555
+
3556
+ Two details the trigger change forced. The workflow now resolves its tag from the release
3557
+ commit (<code>git tag --points-at</code>) rather than "newest release" &mdash; releases here
3558
+ land minutes apart, so <code>gh release view</code> would race and SBOM the <em>next</em>
3559
+ version; and two tags on one commit is real (<code>v1.0.248</code> and <code>v1.0.249</code>
3560
+ both point at <code>c750651</code>), so it takes the highest. And per the original note, a
3561
+ final step re-reads the release and fails unless the asset is actually attached &mdash; a
3562
+ silent upload no-op is indistinguishable from success, which is the same class of quiet
3563
+ nothing that produced this bug.</p>
3545
3564
  <div class="meta">
3546
3565
  <span class="m">Complexity <b>S</b></span>
3547
3566
  <span class="m hi">Impact <b>High</b></span>
3548
3567
  <span class="m">Wow <b class="wow">★★★★</b></span>
3549
- <span class="m">0 runs, 0 SBOMs, 227 releases</span>
3568
+ <span class="m">253 releases shipped with no SBOM; fixed with workflow_run</span>
3550
3569
  </div>
3551
3570
  </article>
3552
3571
 
@@ -1407,3 +1407,123 @@ class TestCopySkillBackupCleanup:
1407
1407
  assert (dest / "SKILL.md").read_text(encoding="utf-8") == "new\n"
1408
1408
  assert not (dest / "gone.md").exists() # a swap, not a merge
1409
1409
  assert [p.name for p in tmp_path.iterdir() if ".old" in p.name] == []
1410
+
1411
+
1412
+ class TestPreservedAgentScope:
1413
+ """The rule: a re-install may not widen what an install narrowed.
1414
+
1415
+ ``update``/``reinstall`` force-reinstall with ``only_agents=None``, which
1416
+ used to mean "link into every enabled agent" and rewrote the lock's agent
1417
+ list to match — so ``boost install foo --agent claude-code`` quietly became
1418
+ a full install the first time anything upstream changed.
1419
+ """
1420
+
1421
+ def test_an_explicit_scope_always_wins(self):
1422
+ # Re-running install with --agent is how a narrowed skill is widened
1423
+ # again; the lock must not veto it.
1424
+ assert store.preserved_agent_scope(
1425
+ ["cursor"], {"agents": ["claude-code"]}) == ["cursor"]
1426
+ assert store.preserved_agent_scope(
1427
+ ["a", "b"], {"agents": ["a"]}) == ["a", "b"]
1428
+
1429
+ def test_an_explicit_empty_list_is_not_the_lock_s_scope(self):
1430
+ # [] is not None: the caller passed something, so it is theirs to mean.
1431
+ assert store.preserved_agent_scope([], {"agents": ["claude-code"]}) == []
1432
+
1433
+ def test_a_fresh_install_has_no_scope_to_preserve(self):
1434
+ assert store.preserved_agent_scope(None, None) is None
1435
+ assert store.preserved_agent_scope(None, {}) is None
1436
+
1437
+ def test_a_skill_s_scope_comes_from_its_agents_list(self):
1438
+ assert store.preserved_agent_scope(
1439
+ None, {"agents": ["claude-code"]}) == ["claude-code"]
1440
+
1441
+ def test_a_rule_s_scope_comes_from_its_materializations(self):
1442
+ existing = {"materializations": [{"agent": "cursor", "path": "/x"},
1443
+ {"agent": "windsurf", "path": "/y"}]}
1444
+ assert store.preserved_agent_scope(None, existing) == ["cursor", "windsurf"]
1445
+
1446
+ def test_a_materialization_row_with_no_agent_is_dropped(self):
1447
+ existing = {"materializations": [{"agent": "cursor"}, {"path": "/y"}]}
1448
+ assert store.preserved_agent_scope(None, existing) == ["cursor"]
1449
+
1450
+ def test_an_empty_record_means_every_agent_not_no_agent(self):
1451
+ # Nothing was linked last time (no agents enabled, or all conflicted).
1452
+ # Reading that as "link nowhere" would strand the skill forever.
1453
+ assert store.preserved_agent_scope(None, {"agents": []}) is None
1454
+ assert store.preserved_agent_scope(None, {"materializations": []}) is None
1455
+ assert store.preserved_agent_scope(
1456
+ None, {"materializations": [{"path": "/y"}]}) is None
1457
+
1458
+ def test_agents_is_preferred_over_materializations(self):
1459
+ # A project skill records both; `agents` is the complete list (it
1460
+ # carries forward agents an earlier filtered install left untouched).
1461
+ existing = {"agents": ["claude-code", "cursor"],
1462
+ "materializations": [{"agent": "cursor"}]}
1463
+ assert store.preserved_agent_scope(None, existing) == \
1464
+ ["claude-code", "cursor"]
1465
+
1466
+
1467
+ class TestReinstallKeepsAgentScope:
1468
+ """End-to-end of the same rule, through the real install paths."""
1469
+
1470
+ def test_a_forced_skill_reinstall_does_not_relink_everywhere(self, tap, entry):
1471
+ store.install(entry, only_agents=["claude-code"])
1472
+ res = store.install(entry, force=True) # what `update` does
1473
+ assert res.linked == ["claude-code"]
1474
+ assert lockfile.get_skill("brainstorming")["agents"] == ["claude-code"]
1475
+ assert _link("claude-code").is_symlink()
1476
+ assert not _link("windsurf").exists()
1477
+ assert not _link("cursor").exists()
1478
+
1479
+ def test_a_forced_reinstall_can_still_widen_on_request(self, tap, entry):
1480
+ store.install(entry, only_agents=["claude-code"])
1481
+ res = store.install(entry, force=True,
1482
+ only_agents=["claude-code", "cursor"])
1483
+ assert res.linked == ["claude-code", "cursor"]
1484
+ assert _link("cursor").is_symlink()
1485
+ assert not _link("windsurf").exists()
1486
+
1487
+ def test_an_unnarrowed_skill_still_reinstalls_everywhere(self, tap, entry):
1488
+ store.install(entry)
1489
+ res = store.install(entry, force=True)
1490
+ assert res.linked == ["claude-code", "windsurf", "cursor"]
1491
+
1492
+ def test_install_from_path_keeps_the_scope_too(self, tap, entry, tmp_path):
1493
+ # `boost reinstall` on a local skill goes through install_from_path.
1494
+ store.install(entry, only_agents=["cursor"])
1495
+ src = tmp_path / "brainstorming"
1496
+ src.mkdir()
1497
+ (src / "SKILL.md").write_text(
1498
+ "---\nname: brainstorming\nversion: 9.9.9\n---\nhi\n", encoding="utf-8")
1499
+ res = store.install_from_path(src, name="brainstorming", force=True)
1500
+ assert res.linked == ["cursor"]
1501
+ assert lockfile.get_skill("brainstorming")["agents"] == ["cursor"]
1502
+ assert not _link("claude-code").exists()
1503
+
1504
+ def test_a_forced_rule_reinstall_keeps_its_materializations(self, tap):
1505
+ rule = _rule_entry(tap)
1506
+ store.install(rule, only_agents=["cursor"])
1507
+ res = store.install(rule, force=True)
1508
+ assert res.linked == ["cursor"]
1509
+ assert [m["agent"] for m in
1510
+ lockfile.get_rule("team-conventions")["materializations"]] == ["cursor"]
1511
+ assert not (paths.home() / "CLAUDE.md").exists()
1512
+ assert not (paths.home() / ".windsurf" / "rules"
1513
+ / "team-conventions.mdc").exists()
1514
+
1515
+ def test_a_forced_workflow_reinstall_keeps_its_drops(self, tap):
1516
+ wf = _workflow_entry(tap)
1517
+ store.install(wf, only_agents=["claude-code"])
1518
+ res = store.install(wf, force=True)
1519
+ assert res.linked == ["claude-code"]
1520
+ assert not (paths.home() / ".cursor" / "commands" / "ship-it.md").exists()
1521
+
1522
+ def test_a_forced_project_reinstall_keeps_its_agent_dirs(self, entry, tmp_path):
1523
+ repo = tmp_path / "proj"
1524
+ (repo / ".git").mkdir(parents=True)
1525
+ store.install(entry, scope="project", base=str(repo),
1526
+ only_agents=["cursor"])
1527
+ res = store.install(entry, scope="project", base=str(repo), force=True)
1528
+ assert res.linked == ["cursor"]
1529
+ assert not (repo / ".claude" / "skills" / "brainstorming").exists()
@@ -1,35 +0,0 @@
1
- ---
2
- id: sbom-release-event-never-fires
3
- board: code
4
- section: trust
5
- status: planned
6
- category: Supply chain
7
- complexity: S
8
- impact: High
9
- wow: 4
10
- note: 0 runs, 0 SBOMs, 227 releases
11
- order: 50
12
- owner:
13
- pr:
14
- title: <code>sbom.yml</code> has never run — it waits for an event <code>GITHUB_TOKEN</code> cannot emit
15
- ---
16
- <code>sbom.yml</code> triggers on <code>release: types: [published]</code> and promises
17
- "a CycloneDX SBOM for every release, attached to the GitHub Release as an asset".
18
- It has <b>0 runs</b>. Releases here are created by <code>release-drafter</code> inside
19
- <code>publish.yml</code> authenticated with <code>GITHUB_TOKEN</code>, and <b>events created
20
- with <code>GITHUB_TOKEN</code> do not trigger workflows</b>. <code>publish.yml</code>'s own
21
- header states that rule verbatim — "we never rely on the release event to trigger a second
22
- workflow" — and <code>sbom.yml</code> is exactly that pattern.
23
-
24
- So the <code>if: github.event_name == 'release'</code> guard on its upload step is dead code,
25
- <code>workflow_dispatch</code> is the only reachable path and has never been used, and every
26
- one of the last ten releases carries <code>assets: []</code>. Zero SBOMs have been produced
27
- since the file landed on 2026-07-22. Same shape as the LangGraph conformance leg: wired up,
28
- looks covered, never executed once.
29
-
30
- Fix is a decision, not a patch: either build and attach the SBOM inside
31
- <code>publish.yml</code>'s release job (it already holds <code>contents: write</code> and is
32
- where the tag is cut), or have <code>publish.yml</code> dispatch this workflow with a PAT
33
- rather than <code>GITHUB_TOKEN</code>. The first is simpler and keeps the release atomic;
34
- the second keeps the SBOM logic in its own file. Worth pairing with a check that fails the
35
- release when the asset is missing, so "never ran" cannot recur silently.