boost-skill-cli 1.0.302__tar.gz → 1.0.304__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 (556) hide show
  1. {boost_skill_cli-1.0.302/boost_skill_cli.egg-info → boost_skill_cli-1.0.304}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  4. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  5. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +24 -3
  6. boost_skill_cli-1.0.304/docs/roadmap/items/mcp-servers-ignore-install-scope.md +70 -0
  7. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap.html +90 -3
  8. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_dependabot_config.py +58 -0
  9. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.gitattributes +0 -0
  10. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.gitignore +0 -0
  11. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.gitleaks.toml +0 -0
  12. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.htmlvalidate.json +0 -0
  13. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.lighthouserc.json +0 -0
  14. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.lycheeignore +0 -0
  15. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.markdownlint-cli2.jsonc +0 -0
  16. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.pre-commit-config.yaml +0 -0
  17. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.stylelintrc.json +0 -0
  18. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.vale/styles/boost/Terminology.yml +0 -0
  19. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  20. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/.vale.ini +0 -0
  21. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/CLAUDE.md +0 -0
  22. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/CODE_OF_CONDUCT.md +0 -0
  23. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/CONTRIBUTING.md +0 -0
  24. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/LICENSE +0 -0
  25. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/MANIFEST.in +0 -0
  26. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/Makefile +0 -0
  27. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/README.md +0 -0
  28. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/SECURITY.md +0 -0
  29. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost +0 -0
  30. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/__init__.py +0 -0
  31. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/__main__.py +0 -0
  32. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/cli.py +0 -0
  33. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/cliparse.py +0 -0
  34. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/__init__.py +0 -0
  35. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/_common.py +0 -0
  36. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/bmad.py +0 -0
  37. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/configuration.py +0 -0
  38. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/discovery.py +0 -0
  39. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/hooks.py +0 -0
  40. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/info.py +0 -0
  41. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/intelligence.py +0 -0
  42. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/pkg.py +0 -0
  43. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/quality.py +0 -0
  44. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/run.py +0 -0
  45. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/safety.py +0 -0
  46. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/taps.py +0 -0
  47. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/commands/team.py +0 -0
  48. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/__init__.py +0 -0
  49. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/adapters.py +0 -0
  50. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/agents.py +0 -0
  51. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/ai.py +0 -0
  52. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/capabilities.py +0 -0
  53. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/catalog.py +0 -0
  54. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/claude_settings.py +0 -0
  55. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/config.py +0 -0
  56. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/dense.py +0 -0
  57. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/ed25519.py +0 -0
  58. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/embed.py +0 -0
  59. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/faithfulness.py +0 -0
  60. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/frontmatter.py +0 -0
  61. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/gitutil.py +0 -0
  62. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/imperative.py +0 -0
  63. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/injectscan.py +0 -0
  64. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/installscan.py +0 -0
  65. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/integrity.py +0 -0
  66. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/journal.py +0 -0
  67. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/lockfile.py +0 -0
  68. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/logs.py +0 -0
  69. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/mcp.py +0 -0
  70. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/mcpdecl.py +0 -0
  71. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/mcphost.py +0 -0
  72. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/minisign.py +0 -0
  73. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/nethttp.py +0 -0
  74. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/output.py +0 -0
  75. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/paths.py +0 -0
  76. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/policy.py +0 -0
  77. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/projectlock.py +0 -0
  78. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/provenance.py +0 -0
  79. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/rag.py +0 -0
  80. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/registry.py +0 -0
  81. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/resolve.py +0 -0
  82. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/rules.py +0 -0
  83. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/scopes.py +0 -0
  84. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/secretscan.py +0 -0
  85. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/selfupdate.py +0 -0
  86. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/serve.py +0 -0
  87. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/stackprobe.py +0 -0
  88. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/staleness.py +0 -0
  89. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/store.py +0 -0
  90. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/trustaudit.py +0 -0
  91. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/typosquat.py +0 -0
  92. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/updatediff.py +0 -0
  93. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/util.py +0 -0
  94. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/core/workflows.py +0 -0
  95. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/data/registries.json +0 -0
  96. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/errors.py +0 -0
  97. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_cli/spin.py +0 -0
  98. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  99. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  100. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_skill_cli.egg-info/requires.txt +0 -0
  101. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/boost_skill_cli.egg-info/top_level.txt +0 -0
  102. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/codecov.yml +0 -0
  103. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/.claude/settings.local.json +0 -0
  104. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/DEBUGGING.md +0 -0
  105. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/adapters.html +0 -0
  106. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/architecture/README.md +0 -0
  107. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/architecture/c4-components-core.md +0 -0
  108. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/architecture/c4-containers.md +0 -0
  109. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/architecture/c4-context.md +0 -0
  110. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/architecture/c4-dynamic-install.md +0 -0
  111. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/gifs/distill.gif +0 -0
  112. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/gifs/doctor.gif +0 -0
  113. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/gifs/explain.gif +0 -0
  114. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/gifs/hooks.gif +0 -0
  115. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/gifs/install.gif +0 -0
  116. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/gifs/pulse.gif +0 -0
  117. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/gifs/search.gif +0 -0
  118. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/gifs/tap.gif +0 -0
  119. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/tapes/distill.tape +0 -0
  120. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/tapes/doctor.tape +0 -0
  121. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/tapes/explain.tape +0 -0
  122. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/tapes/hooks.tape +0 -0
  123. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/tapes/install.tape +0 -0
  124. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/tapes/pulse.tape +0 -0
  125. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/tapes/search.tape +0 -0
  126. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel/tapes/tap.tape +0 -0
  127. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/carousel.html +0 -0
  128. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/commands.html +0 -0
  129. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/demo.gif +0 -0
  130. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/demo.tape +0 -0
  131. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/design-roadmap.html +0 -0
  132. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/eval.html +0 -0
  133. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/index.html +0 -0
  134. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/mcp-hub.html +0 -0
  135. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/rag-architecture.md +0 -0
  136. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D01.md +0 -0
  137. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D02.md +0 -0
  138. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D03.md +0 -0
  139. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D04.md +0 -0
  140. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D05.md +0 -0
  141. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D06.md +0 -0
  142. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D07.md +0 -0
  143. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D08.md +0 -0
  144. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D09.md +0 -0
  145. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D10.md +0 -0
  146. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D11.md +0 -0
  147. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D12.md +0 -0
  148. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D13.md +0 -0
  149. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D14.md +0 -0
  150. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D15.md +0 -0
  151. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D16.md +0 -0
  152. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D17.md +0 -0
  153. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D18.md +0 -0
  154. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D19.md +0 -0
  155. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D20.md +0 -0
  156. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D21.md +0 -0
  157. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D22.md +0 -0
  158. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D23.md +0 -0
  159. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D24.md +0 -0
  160. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D25.md +0 -0
  161. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/BOOST-D26.md +0 -0
  162. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  163. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  164. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  165. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  166. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  167. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  168. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  169. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  170. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  171. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  172. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  173. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  174. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  175. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  176. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  177. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  178. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  179. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  180. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  181. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  182. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  183. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/command-carousel-page.md +0 -0
  184. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  185. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  186. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  187. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  188. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  189. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  190. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  191. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  192. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  193. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  194. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  195. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  196. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  197. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  198. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  199. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  200. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  201. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  202. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  203. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  204. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  205. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  206. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  207. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  208. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  209. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  210. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  211. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/github-community-health-files.md +0 -0
  212. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  213. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  214. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  215. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  216. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  217. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  218. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  219. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  220. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  221. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  222. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  223. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  224. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  225. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  226. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  227. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  228. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  229. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  230. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  231. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  232. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  233. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  234. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  235. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  236. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  237. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  238. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  239. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  240. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  241. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  242. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  243. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  244. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  245. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  246. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  247. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  248. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  249. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  250. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  251. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  252. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  253. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  254. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  255. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  256. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  257. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  258. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  259. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  260. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  261. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  262. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  263. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  264. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  265. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  266. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  267. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  268. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  269. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  270. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  271. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  272. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  273. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  274. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  275. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  276. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  277. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  278. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  279. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  280. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  281. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  282. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  283. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  284. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  285. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  286. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  287. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  288. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  289. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  290. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  291. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  292. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  293. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  294. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  295. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  296. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  297. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  298. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  299. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  300. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  301. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  302. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  303. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  304. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  305. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  306. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  307. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  308. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  309. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  310. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  311. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  312. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  313. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  314. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  315. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  316. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  317. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  318. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  319. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  320. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  321. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  322. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  323. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  324. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  325. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  326. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  327. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  328. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  329. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  330. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  331. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  332. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  333. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  334. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  335. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  336. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  337. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  338. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  339. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/workspace-scope-install.md +0 -0
  340. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  341. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/eslint.config.mjs +0 -0
  342. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/evals/README.md +0 -0
  343. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/evals/__init__.py +0 -0
  344. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/evals/baseline.json +0 -0
  345. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/evals/faithfulness.py +0 -0
  346. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/evals/golden_set.json +0 -0
  347. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/evals/make_corpus.py +0 -0
  348. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/evals/make_golden.py +0 -0
  349. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/evals/metrics.py +0 -0
  350. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/evals/run_evals.py +0 -0
  351. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/examples/README.md +0 -0
  352. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/examples/adapt-demo.sh +0 -0
  353. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/examples/boost-run-prototype.sh +0 -0
  354. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/index.html +0 -0
  355. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/noxfile.py +0 -0
  356. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/pyproject.toml +0 -0
  357. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/coverage-tools.in +0 -0
  358. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/coverage-tools.txt +0 -0
  359. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/lint-tools.in +0 -0
  360. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/lint-tools.txt +0 -0
  361. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/mutation-tools.in +0 -0
  362. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/mutation-tools.txt +0 -0
  363. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/platform-pins.lock +0 -0
  364. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/release-tools.in +0 -0
  365. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/release-tools.txt +0 -0
  366. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/test-tools.in +0 -0
  367. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/requirements/test-tools.txt +0 -0
  368. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/a11y_check.py +0 -0
  369. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/bench_cli.sh +0 -0
  370. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/build_command_reference.py +0 -0
  371. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/build_registries.py +0 -0
  372. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/build_roadmap.py +0 -0
  373. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/check_anchors.py +0 -0
  374. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/check_licenses.py +0 -0
  375. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/check_required_checks.py +0 -0
  376. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/ensure_eval_corpus.sh +0 -0
  377. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/eval_explain.py +0 -0
  378. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/eval_gate.py +0 -0
  379. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/eval_recommend.py +0 -0
  380. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/eval_retrieval.py +0 -0
  381. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/eval_stats_summary.py +0 -0
  382. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/import_budget.py +0 -0
  383. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/lock_toolchain.py +0 -0
  384. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/mutation_gate.py +0 -0
  385. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/mutation_shards.py +0 -0
  386. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/mutation_weights.json +0 -0
  387. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/perf_gate.py +0 -0
  388. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/post_deploy_smoke.py +0 -0
  389. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/release_guard.py +0 -0
  390. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/scripts/release_preflight.py +0 -0
  391. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/setup.cfg +0 -0
  392. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/sonar-project.properties +0 -0
  393. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/style/README.md +0 -0
  394. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/style/boost.css +0 -0
  395. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/style/boost.js +0 -0
  396. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/style/demo.html +0 -0
  397. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/adapt.feature +0 -0
  398. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/browse.feature +0 -0
  399. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/count.feature +0 -0
  400. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/discover.feature +0 -0
  401. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/doctor.feature +0 -0
  402. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/environment.py +0 -0
  403. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/explain.feature +0 -0
  404. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/index.feature +0 -0
  405. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/install.feature +0 -0
  406. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/list.feature +0 -0
  407. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/mcp.feature +0 -0
  408. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/search.feature +0 -0
  409. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/steps/cli_steps.py +0 -0
  410. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/steps/discovery_steps.py +0 -0
  411. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/steps/mcp_steps.py +0 -0
  412. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/bdd/features/steps/quality_steps.py +0 -0
  413. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/conftest.py +0 -0
  414. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/eval/baseline.json +0 -0
  415. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/eval/explain.jsonl +0 -0
  416. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/eval/golden.jsonl +0 -0
  417. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/eval/recommend.jsonl +0 -0
  418. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/eval/taps.txt +0 -0
  419. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_capabilities_policy.py +0 -0
  420. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_adapt.py +0 -0
  421. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_bmad.py +0 -0
  422. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_configuration.py +0 -0
  423. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_discovery.py +0 -0
  424. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_hooks.py +0 -0
  425. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_info.py +0 -0
  426. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_intelligence.py +0 -0
  427. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_pkg.py +0 -0
  428. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_quality.py +0 -0
  429. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_taps.py +0 -0
  430. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_cli_team.py +0 -0
  431. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_everyday_loop.py +0 -0
  432. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_integrity_enforce.py +0 -0
  433. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_property_parsers.py +0 -0
  434. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_run.py +0 -0
  435. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_tap_signing.py +0 -0
  436. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/functional/test_workspace_scope.py +0 -0
  437. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/README.md +0 -0
  438. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  439. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  440. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  441. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  442. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  443. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  444. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  445. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  446. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  447. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  448. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  449. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  450. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  451. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  452. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  453. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  454. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  455. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  456. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  457. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  458. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/fuzz_frontmatter.py +0 -0
  459. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/fuzz/fuzz_registry.py +0 -0
  460. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/make_fixture.py +0 -0
  461. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/perf/test_benchmarks.py +0 -0
  462. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/smoke.sh +0 -0
  463. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_a11y_check.py +0 -0
  464. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_adapters.py +0 -0
  465. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_adapters_multi.py +0 -0
  466. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_adapters_runner.py +0 -0
  467. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_agents.py +0 -0
  468. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_ai.py +0 -0
  469. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_capabilities.py +0 -0
  470. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_catalog.py +0 -0
  471. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_check_anchors.py +0 -0
  472. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_check_licenses.py +0 -0
  473. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_claude_settings.py +0 -0
  474. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_cliparse.py +0 -0
  475. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_codeql_analysis_key.py +0 -0
  476. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_command_reference_fresh.py +0 -0
  477. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_community_health_files.py +0 -0
  478. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_config.py +0 -0
  479. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_dense.py +0 -0
  480. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_dense_fallback.py +0 -0
  481. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_docs_pages_linked.py +0 -0
  482. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_docsite_chrome.py +0 -0
  483. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_ed25519.py +0 -0
  484. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_embed.py +0 -0
  485. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_errors_and_cli_table.py +0 -0
  486. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_eval_faithfulness.py +0 -0
  487. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_eval_gate.py +0 -0
  488. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_eval_metrics.py +0 -0
  489. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_eval_stats_summary.py +0 -0
  490. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_faithfulness.py +0 -0
  491. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_frontmatter.py +0 -0
  492. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_fuzz_targets.py +0 -0
  493. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_gitleaks_config.py +0 -0
  494. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_gitutil.py +0 -0
  495. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_imperative.py +0 -0
  496. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_import_budget.py +0 -0
  497. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_injectscan.py +0 -0
  498. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_installscan.py +0 -0
  499. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_integrity.py +0 -0
  500. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_journal.py +0 -0
  501. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_lockfile.py +0 -0
  502. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_logs.py +0 -0
  503. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_marketing_counts.py +0 -0
  504. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_mcp.py +0 -0
  505. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_mcp_install_scan.py +0 -0
  506. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_mcpdecl.py +0 -0
  507. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_mcphost.py +0 -0
  508. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_minisign.py +0 -0
  509. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_mutation_hardening.py +0 -0
  510. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_mutation_shards.py +0 -0
  511. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_mutation_subfile_shards.py +0 -0
  512. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_mutmut_source_paths.py +0 -0
  513. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_nethttp.py +0 -0
  514. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_output.py +0 -0
  515. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_paths.py +0 -0
  516. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_perf_gate.py +0 -0
  517. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_pkg_confusions.py +0 -0
  518. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_pkg_injection.py +0 -0
  519. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_pkg_secrets.py +0 -0
  520. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_platform_pins.py +0 -0
  521. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_policy.py +0 -0
  522. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_post_deploy_smoke.py +0 -0
  523. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_projectlock.py +0 -0
  524. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_provenance.py +0 -0
  525. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_rag.py +0 -0
  526. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_registries_fresh.py +0 -0
  527. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_registry.py +0 -0
  528. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_registry_categories.py +0 -0
  529. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_release_guard.py +0 -0
  530. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_release_preflight.py +0 -0
  531. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_required_checks.py +0 -0
  532. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_resolve.py +0 -0
  533. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_roadmap_fresh.py +0 -0
  534. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_rules.py +0 -0
  535. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_scopes.py +0 -0
  536. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_secretscan.py +0 -0
  537. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_selfupdate.py +0 -0
  538. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_serve.py +0 -0
  539. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_spin.py +0 -0
  540. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_stackprobe.py +0 -0
  541. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_staleness.py +0 -0
  542. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_store.py +0 -0
  543. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_token_parity.py +0 -0
  544. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_toolchain_lock.py +0 -0
  545. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_trustaudit.py +0 -0
  546. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_typosquat.py +0 -0
  547. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_updatediff.py +0 -0
  548. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_util.py +0 -0
  549. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_version.py +0 -0
  550. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_workflow_timeouts.py +0 -0
  551. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/unit/test_workflows.py +0 -0
  552. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/visual/a11y_check.mjs +0 -0
  553. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/visual/console_check.mjs +0 -0
  554. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/visual/package-lock.json +0 -0
  555. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/tests/visual/package.json +0 -0
  556. {boost_skill_cli-1.0.302 → boost_skill_cli-1.0.304}/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.302
3
+ Version: 1.0.304
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.302'
22
- __version_tuple__ = version_tuple = (1, 0, 302)
21
+ __version__ = version = '1.0.304'
22
+ __version_tuple__ = version_tuple = (1, 0, 304)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.302
3
+ Version: 1.0.304
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -248,6 +248,7 @@ docs/roadmap/items/mcp-install-skips-the-injection-scan.md
248
248
  docs/roadmap/items/mcp-launch-objc-fork-safety.md
249
249
  docs/roadmap/items/mcp-register-names-server-before-env.md
250
250
  docs/roadmap/items/mcp-search-before-reinventing.md
251
+ docs/roadmap/items/mcp-servers-ignore-install-scope.md
251
252
  docs/roadmap/items/mcp-startup-self-harden-fork-safety.md
252
253
  docs/roadmap/items/memoize-config-load-in-process.md
253
254
  docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md
@@ -2,15 +2,15 @@
2
2
  id: dependabot-root-pip-entry-duplicates-requirements
3
3
  board: code
4
4
  section: internals
5
- status: planned
5
+ status: shipped
6
6
  category: Build · Gap
7
7
  complexity: S
8
8
  impact: Low
9
9
  wow: 1
10
10
  note: fallout from #289 — every toolchain bump now arrives twice
11
11
  order: 35
12
- owner:
13
- pr:
12
+ owner: loop/dependabot-root-narrow
13
+ pr: 349
14
14
  title: Dependabot raises every toolchain bump <em>twice</em>
15
15
  ---
16
16
  PR #289 added a third Dependabot entry, <code>package-ecosystem: pip</code> with
@@ -43,3 +43,24 @@ Dependabot's file discovery is what got this wrong in the first place. <b>First<
43
43
  extras bumps are genuinely wanted, that needs <code>versioning-strategy: increase</code> so open
44
44
  lower bounds are raised at all; otherwise accept that this entry is security-only and say so in the
45
45
  comment, which is the honest smaller change.
46
+
47
+ <b>Shipped &mdash; the second one, and <code>#342</code> changed why.</b> That change gave
48
+ <code>/requirements</code> <code>open-pull-requests-limit: 0</code>, which silences the duplicate on
49
+ one side but leaves the <code>/</code> entry as the <em>only</em> remaining path to a
50
+ lock-regenerating pull request &mdash; precisely the thing that cannot be done correctly on a single
51
+ platform. The duplicate stopped being the problem and the survivor became one.
52
+
53
+ So the version-update side of the <code>/</code> entry is off too, and the reasoning is now written
54
+ where the next person will look. It produces nothing wanted: every constraint under
55
+ <code>[project.optional-dependencies]</code> is an open lower bound or sits in the entry's own
56
+ ignore list, so its set of possible <code>pyproject.toml</code> version updates is <b>empty</b>
57
+ &mdash; none of the eight PRs in that first run touched it. And it produces one thing actively
58
+ harmful: four of those eight were byte-identical lock regenerations. <b>Security</b> updates ignore
59
+ the limit and keep firing, which is the coverage the extras genuinely gained, and
60
+ <code>lock_toolchain.py --audit</code> now catches a security PR that arrives having dropped a
61
+ marker-gated pin.
62
+
63
+ Both pip entries are pinned at <code>limit: 0</code> by
64
+ <code>tests/unit/test_dependabot_config.py</code>, alongside an assertion that neither entry is
65
+ <em>deleted</em> &mdash; removing them would give up the security coverage that is the whole
66
+ remaining point. Related: [[dependabot-regeneration-drops-platform-pins]].
@@ -0,0 +1,70 @@
1
+ ---
2
+ id: mcp-servers-ignore-install-scope
3
+ board: code
4
+ section: dx
5
+ status: planned
6
+ category: Bug · MCP
7
+ complexity: M
8
+ impact: High
9
+ wow: 4
10
+ note: --scope project installs the skill into the repo and its MCP server machine-wide
11
+ order: 14
12
+ owner:
13
+ pr:
14
+ title: A project-scoped install registers its MCP servers <em>machine-wide</em>
15
+ ---
16
+ <code>boost install &lt;skill&gt; --scope project</code> (or <code>--here</code>) is a promise about
17
+ blast radius: the skill lands inside this repo, committable, affecting nobody else's machine. The
18
+ MCP servers that skill declares do not keep that promise. They are registered at <b>user</b> scope
19
+ &mdash; globally, for every repo you open &mdash; whatever scope the skill itself was installed at.
20
+
21
+ The path is short and the gap is a missing argument. <code>_offer_mcp()</code> in
22
+ <code>commands/pkg.py</code> receives the whole <code>InstallResult</code>, so
23
+ <code>res.scope</code> is right there, and never reads it. It calls
24
+ <code>_register_mcp_server(name, spec, host)</code>, which takes no scope parameter at all, so
25
+ <code>mcpdecl.register_argv()</code> falls to its <code>scope="user"</code> default and boost shells
26
+ out <code>claude mcp add &lt;name&gt; --scope user …</code>. Nothing warns that the scope the user
27
+ asked for was not the scope they got.
28
+
29
+ <b>The repo-local machinery is already written, and nothing calls it.</b>
30
+ <code>mcpdecl.merge_into(existing, rows, skill)</code> merges declared servers into an
31
+ <code>.mcp.json</code> document &mdash; the committable, project-scoped file agents already read
32
+ (<code>mcpdecl.SIDECAR</code>). It returns a new document rather than mutating, never overwrites a
33
+ server the user configured by hand, and stamps each entry it adds with a <code>MARKER_KEY</code>
34
+ naming the skill that asked for it, precisely so a later uninstall can remove what boost wrote and
35
+ nothing else. It is covered by nine assertions in <code>tests/unit/test_mcpdecl.py</code> and has
36
+ <b>zero callers in <code>boost_cli/</code></b>. The install path shells out to the host CLI instead.
37
+
38
+ That marker matters because of the second half of the bug: <b><code>uninstall</code> never
39
+ unregisters anything.</b> Removing a skill sweeps its files and its symlinks and leaves the MCP
40
+ server registered, so a skill you installed once to try out keeps launching for every project you
41
+ open afterwards. Wiring <code>merge_into</code> gives cleanup something exact to reverse, which
42
+ shelling out to <code>mcp add</code> does not.
43
+
44
+ What the fix has to get right:
45
+
46
+ <b>Scope must flow, not be re-derived.</b> Thread <code>res.scope</code> from
47
+ <code>_offer_mcp</code> through <code>_register_mcp_server</code> into
48
+ <code>register_argv(..., scope=…)</code>. Both call sites of
49
+ <code>store.declared_mcp_servers</code> (the user-scope and project-scope install paths in
50
+ <code>core/store.py</code>) already know their scope; the command layer is where it gets dropped.
51
+
52
+ <b>Project scope should write the file, not shell out.</b> A registration that lives in
53
+ <code>.mcp.json</code> is reviewable in a diff, committable, and shared with the team &mdash; which
54
+ is the whole point of <code>--scope project</code>. Shelling out to <code>mcp add --scope
55
+ project</code> would work for a host that supports it, but produces nothing to review and re-opens
56
+ the per-host grammar problem <code>core/mcphost.py</code> exists to contain.
57
+
58
+ <b>Uninstall has to reverse exactly what was written.</b> Marker-keyed entries only &mdash; a
59
+ server the user added by hand, or one another skill declared, must survive. Note the asymmetry
60
+ already documented in <code>core/mcphost.py</code>: <code>claude mcp remove</code> finds a
61
+ user-scope server unaided, while <code>gemini mcp remove</code> defaults to project scope and will
62
+ report "not found in project settings" while leaving the user-scope entry in place. Removal needs
63
+ the scope it was registered at, which is another reason to record it rather than guess.
64
+
65
+ <b>The prompt should say where.</b> Today it asks "register N servers with Claude Code now?" and
66
+ names no scope. It should say which file or scope is about to change, because that is the decision
67
+ being made.
68
+
69
+ Related: [[mcp-aware-skills]] (which added the declaration format),
70
+ [[mcp-install-skips-the-injection-scan]] and [[mcp-register-names-server-before-env]].
@@ -111,7 +111,7 @@
111
111
  <div class="stat"><b>16</b><span>Shipped</span></div>
112
112
  <div class="stat"><b>1</b><span>Next up</span></div>
113
113
  <div class="stat"><b>4</b><span>Planned</span></div>
114
- <div class="stat"><b>180</b><span>Loop finds</span></div>
114
+ <div class="stat"><b>181</b><span>Loop finds</span></div>
115
115
  <!-- /ROADMAP:stats -->
116
116
  </div>
117
117
  </section>
@@ -1162,7 +1162,7 @@ every enabled agent. So narrowing is honoured and the newly-enabled-agent path i
1162
1162
  </article>
1163
1163
 
1164
1164
  <article class="cap rcard" id="dependabot-root-pip-entry-duplicates-requirements">
1165
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Build · Gap</span></div>
1165
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Build · Gap</span></div>
1166
1166
  <h3>Dependabot raises every toolchain bump <em>twice</em></h3>
1167
1167
  <p>PR #289 added a third Dependabot entry, <code>package-ecosystem: pip</code> with
1168
1168
  <code>directory: /</code>, to give <code>pyproject.toml</code>'s optional extras the proactive bump
@@ -1193,7 +1193,28 @@ Dependabot's file discovery is what got this wrong in the first place. <b>First<
1193
1193
  <code>/requirements</code> as the single owner of the hash-pinned lock. <b>Second</b>, if proactive
1194
1194
  extras bumps are genuinely wanted, that needs <code>versioning-strategy: increase</code> so open
1195
1195
  lower bounds are raised at all; otherwise accept that this entry is security-only and say so in the
1196
- comment, which is the honest smaller change.</p>
1196
+ comment, which is the honest smaller change.
1197
+
1198
+ <b>Shipped &mdash; the second one, and <code>#342</code> changed why.</b> That change gave
1199
+ <code>/requirements</code> <code>open-pull-requests-limit: 0</code>, which silences the duplicate on
1200
+ one side but leaves the <code>/</code> entry as the <em>only</em> remaining path to a
1201
+ lock-regenerating pull request &mdash; precisely the thing that cannot be done correctly on a single
1202
+ platform. The duplicate stopped being the problem and the survivor became one.
1203
+
1204
+ So the version-update side of the <code>/</code> entry is off too, and the reasoning is now written
1205
+ where the next person will look. It produces nothing wanted: every constraint under
1206
+ <code>[project.optional-dependencies]</code> is an open lower bound or sits in the entry's own
1207
+ ignore list, so its set of possible <code>pyproject.toml</code> version updates is <b>empty</b>
1208
+ &mdash; none of the eight PRs in that first run touched it. And it produces one thing actively
1209
+ harmful: four of those eight were byte-identical lock regenerations. <b>Security</b> updates ignore
1210
+ the limit and keep firing, which is the coverage the extras genuinely gained, and
1211
+ <code>lock_toolchain.py --audit</code> now catches a security PR that arrives having dropped a
1212
+ marker-gated pin.
1213
+
1214
+ Both pip entries are pinned at <code>limit: 0</code> by
1215
+ <code>tests/unit/test_dependabot_config.py</code>, alongside an assertion that neither entry is
1216
+ <em>deleted</em> &mdash; removing them would give up the security coverage that is the whole
1217
+ remaining point. Related: [[dependabot-regeneration-drops-platform-pins]].</p>
1197
1218
  <div class="meta">
1198
1219
  <span class="m">Complexity <b>S</b></span>
1199
1220
  <span class="m">Impact <b>Low</b></span>
@@ -3151,6 +3172,72 @@ suite only runs if a human remembers to run it locally, so a CLI change that bre
3151
3172
  </div>
3152
3173
  </article>
3153
3174
 
3175
+ <article class="cap rcard" id="mcp-servers-ignore-install-scope">
3176
+ <div class="head"><span class="pill planned">Planned</span><span class="cat">Bug · MCP</span></div>
3177
+ <h3>A project-scoped install registers its MCP servers <em>machine-wide</em></h3>
3178
+ <p><code>boost install &lt;skill&gt; --scope project</code> (or <code>--here</code>) is a promise about
3179
+ blast radius: the skill lands inside this repo, committable, affecting nobody else's machine. The
3180
+ MCP servers that skill declares do not keep that promise. They are registered at <b>user</b> scope
3181
+ &mdash; globally, for every repo you open &mdash; whatever scope the skill itself was installed at.
3182
+
3183
+ The path is short and the gap is a missing argument. <code>_offer_mcp()</code> in
3184
+ <code>commands/pkg.py</code> receives the whole <code>InstallResult</code>, so
3185
+ <code>res.scope</code> is right there, and never reads it. It calls
3186
+ <code>_register_mcp_server(name, spec, host)</code>, which takes no scope parameter at all, so
3187
+ <code>mcpdecl.register_argv()</code> falls to its <code>scope="user"</code> default and boost shells
3188
+ out <code>claude mcp add &lt;name&gt; --scope user …</code>. Nothing warns that the scope the user
3189
+ asked for was not the scope they got.
3190
+
3191
+ <b>The repo-local machinery is already written, and nothing calls it.</b>
3192
+ <code>mcpdecl.merge_into(existing, rows, skill)</code> merges declared servers into an
3193
+ <code>.mcp.json</code> document &mdash; the committable, project-scoped file agents already read
3194
+ (<code>mcpdecl.SIDECAR</code>). It returns a new document rather than mutating, never overwrites a
3195
+ server the user configured by hand, and stamps each entry it adds with a <code>MARKER_KEY</code>
3196
+ naming the skill that asked for it, precisely so a later uninstall can remove what boost wrote and
3197
+ nothing else. It is covered by nine assertions in <code>tests/unit/test_mcpdecl.py</code> and has
3198
+ <b>zero callers in <code>boost_cli/</code></b>. The install path shells out to the host CLI instead.
3199
+
3200
+ That marker matters because of the second half of the bug: <b><code>uninstall</code> never
3201
+ unregisters anything.</b> Removing a skill sweeps its files and its symlinks and leaves the MCP
3202
+ server registered, so a skill you installed once to try out keeps launching for every project you
3203
+ open afterwards. Wiring <code>merge_into</code> gives cleanup something exact to reverse, which
3204
+ shelling out to <code>mcp add</code> does not.
3205
+
3206
+ What the fix has to get right:
3207
+
3208
+ <b>Scope must flow, not be re-derived.</b> Thread <code>res.scope</code> from
3209
+ <code>_offer_mcp</code> through <code>_register_mcp_server</code> into
3210
+ <code>register_argv(..., scope=…)</code>. Both call sites of
3211
+ <code>store.declared_mcp_servers</code> (the user-scope and project-scope install paths in
3212
+ <code>core/store.py</code>) already know their scope; the command layer is where it gets dropped.
3213
+
3214
+ <b>Project scope should write the file, not shell out.</b> A registration that lives in
3215
+ <code>.mcp.json</code> is reviewable in a diff, committable, and shared with the team &mdash; which
3216
+ is the whole point of <code>--scope project</code>. Shelling out to <code>mcp add --scope
3217
+ project</code> would work for a host that supports it, but produces nothing to review and re-opens
3218
+ the per-host grammar problem <code>core/mcphost.py</code> exists to contain.
3219
+
3220
+ <b>Uninstall has to reverse exactly what was written.</b> Marker-keyed entries only &mdash; a
3221
+ server the user added by hand, or one another skill declared, must survive. Note the asymmetry
3222
+ already documented in <code>core/mcphost.py</code>: <code>claude mcp remove</code> finds a
3223
+ user-scope server unaided, while <code>gemini mcp remove</code> defaults to project scope and will
3224
+ report "not found in project settings" while leaving the user-scope entry in place. Removal needs
3225
+ the scope it was registered at, which is another reason to record it rather than guess.
3226
+
3227
+ <b>The prompt should say where.</b> Today it asks "register N servers with Claude Code now?" and
3228
+ names no scope. It should say which file or scope is about to change, because that is the decision
3229
+ being made.
3230
+
3231
+ Related: [[mcp-aware-skills]] (which added the declaration format),
3232
+ [[mcp-install-skips-the-injection-scan]] and [[mcp-register-names-server-before-env]].</p>
3233
+ <div class="meta">
3234
+ <span class="m">Complexity <b>M</b></span>
3235
+ <span class="m hi">Impact <b>High</b></span>
3236
+ <span class="m">Wow <b class="wow">★★★★</b></span>
3237
+ <span class="m">--scope project installs the skill into the repo and its MCP server machine-wide</span>
3238
+ </div>
3239
+ </article>
3240
+
3154
3241
  <article class="cap rcard" id="framework-adapters-boost-adapt">
3155
3242
  <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Interop</span></div>
3156
3243
  <h3><code>boost adapt</code> — render a skill as another framework's agent source</h3>
@@ -104,3 +104,61 @@ def test_the_root_ignore_list_matches_the_ceilings_pyproject_sets():
104
104
  for reqs in extras.values() for req in reqs if "<" in req}
105
105
  assert held_back, "no upper bounds left in pyproject — drop the ignores"
106
106
  assert set(pip_entry("/")[2]) == held_back
107
+
108
+
109
+ def limit_for(directory: str):
110
+ """The `open-pull-requests-limit` of the pip entry for `directory`, or None.
111
+
112
+ Parsed separately rather than by widening `entries()`, which several tests
113
+ unpack positionally.
114
+ """
115
+ seen = None
116
+ for line in CONFIG.read_text(encoding="utf-8").splitlines():
117
+ m = _ENTRY.match(line)
118
+ if m:
119
+ seen = {"eco": m.group(1)}
120
+ continue
121
+ if seen is None:
122
+ continue
123
+ m = _FIELD.match(line)
124
+ if not m:
125
+ continue
126
+ seen[m.group(1)] = m.group(2)
127
+ if seen.get("directory") == directory and seen["eco"] == "pip" \
128
+ and "open-pull-requests-limit" in seen:
129
+ return int(seen["open-pull-requests-limit"])
130
+ return None
131
+
132
+
133
+ class TestNeitherPipEntryRegeneratesTheLock:
134
+ """Dependabot must not raise *version* updates for either pip entry.
135
+
136
+ Not a preference — it cannot regenerate the hash-pinned locks correctly. It
137
+ re-resolves on Linux and commits that resolution, dropping every pin whose
138
+ environment marker excludes it there, and the locks install with
139
+ --require-hashes on Windows and macOS too. `scripts/lock_toolchain.py`
140
+ resolves --universal for every supported platform, which is why it is the
141
+ source of truth (see its `-P` flag, and requirements/platform-pins.lock).
142
+
143
+ `open-pull-requests-limit: 0` disables version updates while leaving
144
+ **security** updates firing, which is what these entries are actually worth.
145
+ """
146
+
147
+ def test_the_requirements_entry_raises_no_version_prs(self):
148
+ assert limit_for("/requirements") == 0
149
+
150
+ def test_the_root_entry_raises_no_version_prs(self):
151
+ # The root entry cannot deliver what it was added for: every constraint
152
+ # under [project.optional-dependencies] is either an open lower bound or
153
+ # in its own ignore list, so the set of pyproject version updates it can
154
+ # ever produce is EMPTY — none of the eight PRs in the first scheduled
155
+ # run touched pyproject.toml. What it did produce was byte-identical
156
+ # duplicates of the /requirements entry's lock regenerations, which is
157
+ # the one thing that must never be merged.
158
+ assert limit_for("/") == 0
159
+
160
+ def test_both_pip_entries_still_exist(self):
161
+ # Deleting them would give up security updates too, which ignore the
162
+ # limit and are the coverage these entries genuinely provide.
163
+ assert pip_entry("/requirements")
164
+ assert pip_entry("/")