boost-skill-cli 1.0.267__tar.gz → 1.0.268__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 (505) hide show
  1. {boost_skill_cli-1.0.267/boost_skill_cli.egg-info → boost_skill_cli-1.0.268}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/store.py +50 -1
  4. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  5. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  6. boost_skill_cli-1.0.268/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +36 -0
  7. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap.html +33 -1
  8. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_store.py +146 -0
  9. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.gitattributes +0 -0
  10. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.gitignore +0 -0
  11. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.gitleaks.toml +0 -0
  12. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.htmlvalidate.json +0 -0
  13. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.lighthouserc.json +0 -0
  14. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.lycheeignore +0 -0
  15. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.markdownlint-cli2.jsonc +0 -0
  16. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.pre-commit-config.yaml +0 -0
  17. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.stylelintrc.json +0 -0
  18. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.vale/styles/boost/Terminology.yml +0 -0
  19. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  20. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/.vale.ini +0 -0
  21. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/CLAUDE.md +0 -0
  22. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/CODE_OF_CONDUCT.md +0 -0
  23. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/CONTRIBUTING.md +0 -0
  24. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/LICENSE +0 -0
  25. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/MANIFEST.in +0 -0
  26. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/Makefile +0 -0
  27. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/README.md +0 -0
  28. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/SECURITY.md +0 -0
  29. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost +0 -0
  30. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/__init__.py +0 -0
  31. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/__main__.py +0 -0
  32. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/cli.py +0 -0
  33. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/cliparse.py +0 -0
  34. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/__init__.py +0 -0
  35. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/_common.py +0 -0
  36. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/bmad.py +0 -0
  37. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/configuration.py +0 -0
  38. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/discovery.py +0 -0
  39. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/hooks.py +0 -0
  40. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/info.py +0 -0
  41. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/intelligence.py +0 -0
  42. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/pkg.py +0 -0
  43. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/quality.py +0 -0
  44. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/run.py +0 -0
  45. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/safety.py +0 -0
  46. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/taps.py +0 -0
  47. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/commands/team.py +0 -0
  48. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/__init__.py +0 -0
  49. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/adapters.py +0 -0
  50. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/agents.py +0 -0
  51. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/ai.py +0 -0
  52. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/capabilities.py +0 -0
  53. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/catalog.py +0 -0
  54. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/claude_settings.py +0 -0
  55. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/config.py +0 -0
  56. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/dense.py +0 -0
  57. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/ed25519.py +0 -0
  58. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/embed.py +0 -0
  59. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/faithfulness.py +0 -0
  60. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/frontmatter.py +0 -0
  61. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/gitutil.py +0 -0
  62. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/imperative.py +0 -0
  63. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/injectscan.py +0 -0
  64. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/integrity.py +0 -0
  65. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/journal.py +0 -0
  66. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/lockfile.py +0 -0
  67. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/logs.py +0 -0
  68. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/mcp.py +0 -0
  69. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/mcpdecl.py +0 -0
  70. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/minisign.py +0 -0
  71. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/nethttp.py +0 -0
  72. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/output.py +0 -0
  73. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/paths.py +0 -0
  74. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/policy.py +0 -0
  75. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/projectlock.py +0 -0
  76. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/provenance.py +0 -0
  77. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/rag.py +0 -0
  78. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/registry.py +0 -0
  79. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/resolve.py +0 -0
  80. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/rules.py +0 -0
  81. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/scopes.py +0 -0
  82. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/secretscan.py +0 -0
  83. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/selfupdate.py +0 -0
  84. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/serve.py +0 -0
  85. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/stackprobe.py +0 -0
  86. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/staleness.py +0 -0
  87. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/trustaudit.py +0 -0
  88. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/typosquat.py +0 -0
  89. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/updatediff.py +0 -0
  90. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/util.py +0 -0
  91. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/core/workflows.py +0 -0
  92. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/data/registries.json +0 -0
  93. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/errors.py +0 -0
  94. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_cli/spin.py +0 -0
  95. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  96. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  97. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_skill_cli.egg-info/requires.txt +0 -0
  98. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/boost_skill_cli.egg-info/top_level.txt +0 -0
  99. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/codecov.yml +0 -0
  100. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/.claude/settings.local.json +0 -0
  101. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/DEBUGGING.md +0 -0
  102. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/adapters.html +0 -0
  103. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/gifs/distill.gif +0 -0
  104. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/gifs/doctor.gif +0 -0
  105. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/gifs/explain.gif +0 -0
  106. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/gifs/hooks.gif +0 -0
  107. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/gifs/install.gif +0 -0
  108. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/gifs/pulse.gif +0 -0
  109. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/gifs/search.gif +0 -0
  110. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/gifs/tap.gif +0 -0
  111. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/tapes/distill.tape +0 -0
  112. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/tapes/doctor.tape +0 -0
  113. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/tapes/explain.tape +0 -0
  114. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/tapes/hooks.tape +0 -0
  115. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/tapes/install.tape +0 -0
  116. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/tapes/pulse.tape +0 -0
  117. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/tapes/search.tape +0 -0
  118. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel/tapes/tap.tape +0 -0
  119. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/carousel.html +0 -0
  120. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/commands.html +0 -0
  121. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/demo.gif +0 -0
  122. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/demo.tape +0 -0
  123. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/design-roadmap.html +0 -0
  124. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/eval.html +0 -0
  125. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/index.html +0 -0
  126. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/mcp-hub.html +0 -0
  127. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/rag-architecture.md +0 -0
  128. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D01.md +0 -0
  129. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D02.md +0 -0
  130. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D03.md +0 -0
  131. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D04.md +0 -0
  132. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D05.md +0 -0
  133. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D06.md +0 -0
  134. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D07.md +0 -0
  135. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D08.md +0 -0
  136. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D09.md +0 -0
  137. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D10.md +0 -0
  138. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D11.md +0 -0
  139. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D12.md +0 -0
  140. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D13.md +0 -0
  141. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D14.md +0 -0
  142. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D15.md +0 -0
  143. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D16.md +0 -0
  144. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D17.md +0 -0
  145. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D18.md +0 -0
  146. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D19.md +0 -0
  147. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D20.md +0 -0
  148. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D21.md +0 -0
  149. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D22.md +0 -0
  150. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D23.md +0 -0
  151. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D24.md +0 -0
  152. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D25.md +0 -0
  153. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/BOOST-D26.md +0 -0
  154. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  155. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  156. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  157. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  158. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  159. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  160. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  161. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  162. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  163. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  164. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  165. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  166. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  167. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  168. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  169. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  170. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  171. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/command-carousel-page.md +0 -0
  172. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  173. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  174. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  175. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  176. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  177. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  178. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  179. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  180. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  181. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  182. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  183. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  184. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  185. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  186. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  187. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  188. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  189. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  190. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  191. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  192. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  193. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  194. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  195. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  196. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/github-community-health-files.md +0 -0
  197. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  198. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  199. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  200. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  201. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  202. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  203. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  204. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  205. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  206. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  207. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  208. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  209. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  210. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  211. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  212. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  213. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  214. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  215. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  216. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  217. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  218. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  219. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  220. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  221. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  222. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  223. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  224. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  225. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  226. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  227. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  228. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  229. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  230. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  231. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  232. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  233. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  234. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  235. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  236. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  237. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  238. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  239. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  240. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  241. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  242. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  243. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  244. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  245. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  246. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  247. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  248. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  249. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  250. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  251. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  252. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  253. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  254. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  255. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  256. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  257. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  258. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  259. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  260. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  261. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  262. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  263. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  264. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  265. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  266. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  267. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  268. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  269. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  270. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  271. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  272. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  273. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  274. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  275. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  276. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  277. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  278. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  279. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  280. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  281. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  282. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  283. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  284. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  285. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  286. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  287. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  288. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  289. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  290. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  291. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  292. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  293. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  294. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  295. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  296. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  297. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  298. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  299. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  300. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  301. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  302. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  303. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  304. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  305. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  306. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  307. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  308. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  309. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  310. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  311. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  312. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  313. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/docs/roadmap/items/workspace-scope-install.md +0 -0
  314. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/eslint.config.mjs +0 -0
  315. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/examples/README.md +0 -0
  316. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/examples/adapt-demo.sh +0 -0
  317. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/examples/boost-run-prototype.sh +0 -0
  318. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/index.html +0 -0
  319. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/noxfile.py +0 -0
  320. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/pyproject.toml +0 -0
  321. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/coverage-tools.in +0 -0
  322. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/coverage-tools.txt +0 -0
  323. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/lint-tools.in +0 -0
  324. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/lint-tools.txt +0 -0
  325. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/mutation-tools.in +0 -0
  326. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/mutation-tools.txt +0 -0
  327. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/release-tools.in +0 -0
  328. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/release-tools.txt +0 -0
  329. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/test-tools.in +0 -0
  330. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/requirements/test-tools.txt +0 -0
  331. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/a11y_check.py +0 -0
  332. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/bench_cli.sh +0 -0
  333. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/build_command_reference.py +0 -0
  334. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/build_registries.py +0 -0
  335. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/build_roadmap.py +0 -0
  336. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/check_anchors.py +0 -0
  337. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/check_licenses.py +0 -0
  338. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/check_required_checks.py +0 -0
  339. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/ensure_eval_corpus.sh +0 -0
  340. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/eval_explain.py +0 -0
  341. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/eval_recommend.py +0 -0
  342. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/eval_retrieval.py +0 -0
  343. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/eval_stats_summary.py +0 -0
  344. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/import_budget.py +0 -0
  345. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/lock_toolchain.py +0 -0
  346. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/mutation_gate.py +0 -0
  347. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/mutation_shards.py +0 -0
  348. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/mutation_weights.json +0 -0
  349. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/perf_gate.py +0 -0
  350. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/post_deploy_smoke.py +0 -0
  351. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/scripts/release_preflight.py +0 -0
  352. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/setup.cfg +0 -0
  353. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/sonar-project.properties +0 -0
  354. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/style/README.md +0 -0
  355. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/style/boost.css +0 -0
  356. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/style/boost.js +0 -0
  357. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/style/demo.html +0 -0
  358. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/adapt.feature +0 -0
  359. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/browse.feature +0 -0
  360. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/count.feature +0 -0
  361. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/discover.feature +0 -0
  362. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/doctor.feature +0 -0
  363. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/environment.py +0 -0
  364. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/explain.feature +0 -0
  365. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/index.feature +0 -0
  366. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/install.feature +0 -0
  367. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/list.feature +0 -0
  368. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/mcp.feature +0 -0
  369. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/search.feature +0 -0
  370. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/steps/cli_steps.py +0 -0
  371. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/steps/discovery_steps.py +0 -0
  372. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/steps/mcp_steps.py +0 -0
  373. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/bdd/features/steps/quality_steps.py +0 -0
  374. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/conftest.py +0 -0
  375. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/eval/baseline.json +0 -0
  376. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/eval/explain.jsonl +0 -0
  377. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/eval/golden.jsonl +0 -0
  378. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/eval/recommend.jsonl +0 -0
  379. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/eval/taps.txt +0 -0
  380. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_capabilities_policy.py +0 -0
  381. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_adapt.py +0 -0
  382. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_bmad.py +0 -0
  383. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_configuration.py +0 -0
  384. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_discovery.py +0 -0
  385. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_hooks.py +0 -0
  386. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_info.py +0 -0
  387. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_intelligence.py +0 -0
  388. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_pkg.py +0 -0
  389. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_quality.py +0 -0
  390. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_taps.py +0 -0
  391. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_cli_team.py +0 -0
  392. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_everyday_loop.py +0 -0
  393. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_integrity_enforce.py +0 -0
  394. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_property_parsers.py +0 -0
  395. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_run.py +0 -0
  396. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_tap_signing.py +0 -0
  397. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/functional/test_workspace_scope.py +0 -0
  398. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/README.md +0 -0
  399. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  400. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  401. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  402. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  403. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  404. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  405. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  406. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  407. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  408. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  409. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  410. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  411. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  412. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  413. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  414. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  415. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  416. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  417. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  418. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  419. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/fuzz_frontmatter.py +0 -0
  420. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/fuzz/fuzz_registry.py +0 -0
  421. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/make_fixture.py +0 -0
  422. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/perf/test_benchmarks.py +0 -0
  423. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/smoke.sh +0 -0
  424. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_a11y_check.py +0 -0
  425. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_adapters.py +0 -0
  426. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_adapters_multi.py +0 -0
  427. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_adapters_runner.py +0 -0
  428. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_agents.py +0 -0
  429. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_ai.py +0 -0
  430. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_capabilities.py +0 -0
  431. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_catalog.py +0 -0
  432. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_check_anchors.py +0 -0
  433. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_check_licenses.py +0 -0
  434. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_claude_settings.py +0 -0
  435. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_cliparse.py +0 -0
  436. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_command_reference_fresh.py +0 -0
  437. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_community_health_files.py +0 -0
  438. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_config.py +0 -0
  439. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_dense.py +0 -0
  440. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_dense_fallback.py +0 -0
  441. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_dependabot_config.py +0 -0
  442. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_docs_pages_linked.py +0 -0
  443. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_docsite_chrome.py +0 -0
  444. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_ed25519.py +0 -0
  445. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_embed.py +0 -0
  446. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_errors_and_cli_table.py +0 -0
  447. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_eval_stats_summary.py +0 -0
  448. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_faithfulness.py +0 -0
  449. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_frontmatter.py +0 -0
  450. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_fuzz_targets.py +0 -0
  451. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_gitleaks_config.py +0 -0
  452. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_gitutil.py +0 -0
  453. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_imperative.py +0 -0
  454. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_import_budget.py +0 -0
  455. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_injectscan.py +0 -0
  456. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_integrity.py +0 -0
  457. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_journal.py +0 -0
  458. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_lockfile.py +0 -0
  459. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_logs.py +0 -0
  460. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_marketing_counts.py +0 -0
  461. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_mcp.py +0 -0
  462. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_mcpdecl.py +0 -0
  463. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_minisign.py +0 -0
  464. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_mutation_hardening.py +0 -0
  465. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_mutation_shards.py +0 -0
  466. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_mutmut_source_paths.py +0 -0
  467. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_nethttp.py +0 -0
  468. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_output.py +0 -0
  469. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_paths.py +0 -0
  470. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_perf_gate.py +0 -0
  471. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_pkg_confusions.py +0 -0
  472. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_pkg_injection.py +0 -0
  473. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_pkg_secrets.py +0 -0
  474. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_policy.py +0 -0
  475. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_post_deploy_smoke.py +0 -0
  476. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_projectlock.py +0 -0
  477. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_provenance.py +0 -0
  478. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_rag.py +0 -0
  479. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_registries_fresh.py +0 -0
  480. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_registry.py +0 -0
  481. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_release_preflight.py +0 -0
  482. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_required_checks.py +0 -0
  483. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_resolve.py +0 -0
  484. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_roadmap_fresh.py +0 -0
  485. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_rules.py +0 -0
  486. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_scopes.py +0 -0
  487. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_secretscan.py +0 -0
  488. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_selfupdate.py +0 -0
  489. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_serve.py +0 -0
  490. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_spin.py +0 -0
  491. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_stackprobe.py +0 -0
  492. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_staleness.py +0 -0
  493. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_token_parity.py +0 -0
  494. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_toolchain_lock.py +0 -0
  495. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_trustaudit.py +0 -0
  496. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_typosquat.py +0 -0
  497. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_updatediff.py +0 -0
  498. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_util.py +0 -0
  499. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_version.py +0 -0
  500. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_workflow_timeouts.py +0 -0
  501. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/unit/test_workflows.py +0 -0
  502. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/visual/a11y_check.mjs +0 -0
  503. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/visual/console_check.mjs +0 -0
  504. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/tests/visual/package.json +0 -0
  505. {boost_skill_cli-1.0.267 → boost_skill_cli-1.0.268}/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.267
3
+ Version: 1.0.268
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.267'
22
- __version_tuple__ = version_tuple = (1, 0, 267)
21
+ __version__ = version = '1.0.268'
22
+ __version_tuple__ = version_tuple = (1, 0, 268)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -126,6 +126,41 @@ def preserved_agent_scope(only_agents: Optional[List[str]],
126
126
  return [a for a in recorded if a] or None
127
127
 
128
128
 
129
+ def declared_agent_scope(only_agents: Optional[List[str]],
130
+ existing: Optional[dict]) -> Optional[List[str]]:
131
+ """The scope to RECORD in the lock: an explicit narrowing, or the last one.
132
+
133
+ Deliberately *not* :func:`preserved_agent_scope`. That one answers "which
134
+ agents should this install link into", and falls back to the lock's
135
+ ``agents`` — which records what happens to be linked right now. Writing
136
+ that back as a declared scope would promote "these were the enabled agents
137
+ at install time" into "the user asked for exactly these", permanently
138
+ freezing a skill out of any agent enabled later. The two questions look
139
+ alike and are not, so they get separate functions.
140
+
141
+ Only an explicit ``--agent`` narrows. Absent that, an earlier declaration
142
+ is carried forward so ``update``/``reinstall`` don't drop it, and a skill
143
+ that was never narrowed keeps no scope at all (``None``).
144
+ """
145
+ if only_agents is not None:
146
+ return list(only_agents)
147
+ return (existing or {}).get("only_agents")
148
+
149
+
150
+ def scoped_agents(entry: dict, enabled: Dict[str, Path]) -> Dict[str, Path]:
151
+ """The enabled agents a locked skill is supposed to be linked into.
152
+
153
+ Fails **open**: an entry with no ``only_agents`` — every entry written
154
+ before this field existed — means "not narrowed", so it gets every enabled
155
+ agent. That keeps ``boost sync`` doing its other job, which is linking
156
+ already-installed skills into an agent that was enabled afterwards.
157
+ """
158
+ scope = entry.get("only_agents")
159
+ if not scope:
160
+ return enabled.copy()
161
+ return {a: d for a, d in enabled.items() if a in scope}
162
+
163
+
129
164
  def unlink_agents(name: str) -> List[str]:
130
165
  """Remove the ``name`` symlink from every enabled agent dir.
131
166
 
@@ -326,6 +361,11 @@ def install(entry: dict, force: bool = False,
326
361
  "pinned": bool((existing or {}).get("pinned")),
327
362
  "quarantined": False,
328
363
  "agents": res.linked,
364
+ # `agents` is what IS linked; `only_agents` is what the user ASKED for.
365
+ # sync needs the second: it links a skill into every enabled agent, and
366
+ # without a record of the request it cannot tell a deliberate `--agent`
367
+ # narrowing from a skill that simply predates a newly enabled agent.
368
+ "only_agents": declared_agent_scope(only_agents, existing),
329
369
  "tags": (existing or {}).get("tags", []),
330
370
  })
331
371
  journal.log("install", name, tap=entry["tap"], version=entry.get("version"))
@@ -806,6 +846,10 @@ def install_from_path(src_dir: Path, name: Optional[str] = None,
806
846
  "pinned": bool((existing or {}).get("pinned")),
807
847
  "quarantined": False,
808
848
  "agents": res.linked,
849
+ # `boost import --agent ...` narrows the same way `install` does, so it
850
+ # has to record the same declaration — otherwise the links are narrow
851
+ # but sync sees no scope and widens them right back.
852
+ "only_agents": declared_agent_scope(only_agents, existing),
809
853
  "tags": (existing or {}).get("tags", []),
810
854
  })
811
855
  journal.log("import", name, source=str(src_dir))
@@ -922,7 +966,12 @@ def sync_plan() -> Dict[str, list]:
922
966
  continue
923
967
  if entry.get("quarantined"):
924
968
  continue
925
- for agent, adir in agents.enabled_agents().items():
969
+ # Only the agents this skill was installed for. Walking every enabled
970
+ # agent made `boost sync` a second path to the scope leak that
971
+ # `preserved_agent_scope` closed on the install side: it reported a
972
+ # missing_link for each agent outside the narrowing, and sync_apply
973
+ # dutifully linked them, undoing `install --agent` in one command.
974
+ for agent, adir in scoped_agents(entry, agents.enabled_agents()).items():
926
975
  link = adir / name
927
976
  if not link.is_symlink() or not link.exists():
928
977
  plan["missing_links"].append((name, agent))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.267
3
+ Version: 1.0.268
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -296,6 +296,7 @@ docs/roadmap/items/structured-json-log-output-mode.md
296
296
  docs/roadmap/items/supply-chain-posture-openssf-scorecard.md
297
297
  docs/roadmap/items/surface-every-docs-page-from-the-guide.md
298
298
  docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md
299
+ docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md
299
300
  docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md
300
301
  docs/roadmap/items/theme-asset-linting-stylelint-eslint.md
301
302
  docs/roadmap/items/typo-detection-codespell.md
@@ -0,0 +1,36 @@
1
+ ---
2
+ id: sync-relinks-into-every-agent-ignoring-scope
3
+ board: code
4
+ section: internals
5
+ status: shipped
6
+ category: Bug
7
+ complexity: S
8
+ impact: Med
9
+ wow: 2
10
+ note: the half of the scope leak PR #288 deliberately left open
11
+ order: 34
12
+ owner: loop/sync-agent-scope
13
+ pr:
14
+ title: <code>sync</code> relinks a narrowed skill into every agent
15
+ ---
16
+ <code>store.preserved_agent_scope</code> (PR #288) stopped <code>update</code> and
17
+ <code>reinstall</code> widening a skill installed with <code>--agent</code> narrowing, but
18
+ <code>sync_plan()</code> was a second, independent path to the same leak: it walked
19
+ <code>agents.enabled_agents()</code> for <b>every</b> locked skill and reported a
20
+ <code>missing_link</code> for any agent the skill was not linked into — the lock's recorded
21
+ scope was never consulted. <code>sync_apply</code> then dutifully linked them, so a
22
+ single <code>boost sync</code> undid the narrowing that <code>install --agent</code> asked for and
23
+ rewrote the lock to match.
24
+
25
+ It was left out of #288 because the fix is a real trade-off, not an oversight:
26
+ <code>boost sync</code> is also how a <i>newly enabled</i> agent picks up skills installed
27
+ before it existed, and honouring the lock's <code>agents</code> list would silently break that —
28
+ <code>agents</code> records what is linked <i>right now</i>, so reading it as a scope would
29
+ freeze every existing skill out of any agent enabled later.
30
+
31
+ Resolved by separating the two questions. A new <code>only_agents</code> field records what the
32
+ user <i>asked</i> for, written only by an explicit <code>--agent</code> and carried forward across
33
+ <code>update</code>/<code>reinstall</code>; <code>agents</code> keeps meaning what is actually linked.
34
+ <code>sync_plan</code> filters through <code>scoped_agents()</code>, which <b>fails open</b> — an entry
35
+ with no declaration, which is every entry written before this field existed, still fans out to
36
+ every enabled agent. So narrowing is honoured and the newly-enabled-agent path is untouched.
@@ -110,7 +110,7 @@
110
110
  <div class="stat"><b>16</b><span>Shipped</span></div>
111
111
  <div class="stat"><b>1</b><span>Next up</span></div>
112
112
  <div class="stat"><b>4</b><span>Planned</span></div>
113
- <div class="stat"><b>160</b><span>Loop finds</span></div>
113
+ <div class="stat"><b>161</b><span>Loop finds</span></div>
114
114
  <!-- /ROADMAP:stats -->
115
115
  </div>
116
116
  </section>
@@ -1102,6 +1102,38 @@ already used elsewhere in <code>pkg.py</code>.</p>
1102
1102
  </div>
1103
1103
  </article>
1104
1104
 
1105
+ <article class="cap rcard" id="sync-relinks-into-every-agent-ignoring-scope">
1106
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Bug</span></div>
1107
+ <h3><code>sync</code> relinks a narrowed skill into every agent</h3>
1108
+ <p><code>store.preserved_agent_scope</code> (PR #288) stopped <code>update</code> and
1109
+ <code>reinstall</code> widening a skill installed with <code>--agent</code> narrowing, but
1110
+ <code>sync_plan()</code> was a second, independent path to the same leak: it walked
1111
+ <code>agents.enabled_agents()</code> for <b>every</b> locked skill and reported a
1112
+ <code>missing_link</code> for any agent the skill was not linked into — the lock's recorded
1113
+ scope was never consulted. <code>sync_apply</code> then dutifully linked them, so a
1114
+ single <code>boost sync</code> undid the narrowing that <code>install --agent</code> asked for and
1115
+ rewrote the lock to match.
1116
+
1117
+ It was left out of #288 because the fix is a real trade-off, not an oversight:
1118
+ <code>boost sync</code> is also how a <i>newly enabled</i> agent picks up skills installed
1119
+ before it existed, and honouring the lock's <code>agents</code> list would silently break that —
1120
+ <code>agents</code> records what is linked <i>right now</i>, so reading it as a scope would
1121
+ freeze every existing skill out of any agent enabled later.
1122
+
1123
+ Resolved by separating the two questions. A new <code>only_agents</code> field records what the
1124
+ user <i>asked</i> for, written only by an explicit <code>--agent</code> and carried forward across
1125
+ <code>update</code>/<code>reinstall</code>; <code>agents</code> keeps meaning what is actually linked.
1126
+ <code>sync_plan</code> filters through <code>scoped_agents()</code>, which <b>fails open</b> — an entry
1127
+ with no declaration, which is every entry written before this field existed, still fans out to
1128
+ every enabled agent. So narrowing is honoured and the newly-enabled-agent path is untouched.</p>
1129
+ <div class="meta">
1130
+ <span class="m">Complexity <b>S</b></span>
1131
+ <span class="m">Impact <b>Med</b></span>
1132
+ <span class="m">Wow <b class="wow">★★</b></span>
1133
+ <span class="m">the half of the scope leak PR</span>
1134
+ </div>
1135
+ </article>
1136
+
1105
1137
  <article class="cap rcard" id="onboard-overwrites-generated-files-without-confirm">
1106
1138
  <div class="head"><span class="pill planned">Planned</span><span class="cat">UX · Bug</span></div>
1107
1139
  <h3><code>boost onboard</code> silently overwrites existing generated files</h3>
@@ -506,7 +506,16 @@ class TestSyncPlan:
506
506
  # only claude-code was linked, so the other agent dirs were never
507
507
  # created — sync still wants links there, and the stale-link scan
508
508
  # skips the nonexistent dirs.
509
+ #
510
+ # `--agent` is used here purely to leave those dirs uncreated, so the
511
+ # declaration it records is cleared again: a *narrowed* skill is now
512
+ # deliberately left alone (TestSyncRespectsDeclaredScope), and what
513
+ # this test is about is the unnarrowed fan-out reporting a missing
514
+ # directory as missing_links rather than stale_links.
509
515
  store.install(entry, only_agents=["claude-code"])
516
+ e = lockfile.get_skill("brainstorming")
517
+ e["only_agents"] = None
518
+ lockfile.set_skill("brainstorming", e)
510
519
  assert not (paths.home() / ".windsurf" / "skills").exists()
511
520
  plan = store.sync_plan()
512
521
  assert plan == {**self.EMPTY, "missing_links": [
@@ -1527,3 +1536,140 @@ class TestReinstallKeepsAgentScope:
1527
1536
  res = store.install(entry, scope="project", base=str(repo), force=True)
1528
1537
  assert res.linked == ["cursor"]
1529
1538
  assert not (repo / ".claude" / "skills" / "brainstorming").exists()
1539
+
1540
+
1541
+ class TestDeclaredAgentScope:
1542
+ """What the lock RECORDS as the requested scope.
1543
+
1544
+ Distinct from `preserved_agent_scope`, which answers "what should this
1545
+ install link into". Conflating them is the bug: `agents` records what is
1546
+ linked right now, so promoting it to a declared scope would freeze a skill
1547
+ out of every agent enabled later.
1548
+ """
1549
+
1550
+ def test_an_explicit_narrowing_is_recorded(self):
1551
+ assert store.declared_agent_scope(["cursor"], None) == ["cursor"]
1552
+
1553
+ def test_a_never_narrowed_install_declares_nothing(self):
1554
+ assert store.declared_agent_scope(None, None) is None
1555
+ assert store.declared_agent_scope(None, {}) is None
1556
+
1557
+ def test_the_linked_agents_list_is_not_promoted_to_a_declaration(self):
1558
+ # The whole point. This entry was installed unnarrowed and happens to
1559
+ # be linked into one agent; that must not become "only ever cursor".
1560
+ assert store.declared_agent_scope(None, {"agents": ["cursor"]}) is None
1561
+
1562
+ def test_an_earlier_declaration_survives_update(self):
1563
+ # update/reinstall pass only_agents=None; the request must persist.
1564
+ assert store.declared_agent_scope(
1565
+ None, {"agents": ["cursor"], "only_agents": ["cursor"]}) == ["cursor"]
1566
+
1567
+ def test_a_re_narrowing_replaces_the_old_declaration(self):
1568
+ assert store.declared_agent_scope(
1569
+ ["windsurf"], {"only_agents": ["cursor"]}) == ["windsurf"]
1570
+
1571
+ def test_the_declaration_is_copied_not_aliased(self):
1572
+ # The caller's list must not become the lock's mutable state.
1573
+ asked = ["cursor"]
1574
+ got = store.declared_agent_scope(asked, None)
1575
+ asked.append("windsurf")
1576
+ assert got == ["cursor"]
1577
+
1578
+
1579
+ class TestScopedAgents:
1580
+ ENABLED: ClassVar[dict] = {"claude-code": Path("/a"), "cursor": Path("/b")}
1581
+
1582
+ def test_no_declaration_means_every_enabled_agent(self):
1583
+ assert store.scoped_agents({}, self.ENABLED) == self.ENABLED
1584
+
1585
+ def test_a_declaration_filters_to_it(self):
1586
+ assert store.scoped_agents({"only_agents": ["cursor"]}, self.ENABLED) \
1587
+ == {"cursor": Path("/b")}
1588
+
1589
+ def test_an_empty_declaration_fails_open(self):
1590
+ # Every entry written before this field existed reads as [] or absent.
1591
+ # Reading that as "link nowhere" would strand every existing install.
1592
+ assert store.scoped_agents({"only_agents": []}, self.ENABLED) == self.ENABLED
1593
+
1594
+ def test_a_declared_agent_that_is_not_enabled_is_not_invented(self):
1595
+ assert store.scoped_agents(
1596
+ {"only_agents": ["cursor", "zed"]}, self.ENABLED) == {"cursor": Path("/b")}
1597
+
1598
+ def test_the_enabled_mapping_is_not_mutated(self):
1599
+ enabled = dict(self.ENABLED)
1600
+ store.scoped_agents({"only_agents": ["cursor"]}, enabled)
1601
+ assert enabled == self.ENABLED
1602
+
1603
+
1604
+ class TestSyncRespectsDeclaredScope:
1605
+ """`boost sync` was a second, independent path to the scope leak.
1606
+
1607
+ `preserved_agent_scope` (PR #288) closed the install side. sync_plan walked
1608
+ every enabled agent regardless, reported a missing_link for each one outside
1609
+ the narrowing, and sync_apply linked them — so a single `boost sync` undid
1610
+ what `install --agent` asked for.
1611
+ """
1612
+
1613
+ def test_sync_does_not_report_links_outside_the_declared_scope(self, tap, entry):
1614
+ store.install(entry, only_agents=["claude-code"])
1615
+ assert store.sync_plan()["missing_links"] == []
1616
+
1617
+ def test_sync_does_not_relink_a_narrowed_skill(self, tap, entry):
1618
+ store.install(entry, only_agents=["claude-code"])
1619
+ store.sync_apply(store.sync_plan())
1620
+ assert _link("claude-code").is_symlink()
1621
+ for agent in ("windsurf", "cursor"):
1622
+ assert not _link(agent).exists(), agent
1623
+
1624
+ def test_a_dropped_link_inside_the_scope_is_still_repaired(self, tap, entry):
1625
+ # Narrowing must not turn sync off for the agents it does cover.
1626
+ store.install(entry, only_agents=["claude-code"])
1627
+ _link("claude-code").unlink()
1628
+ assert store.sync_plan()["missing_links"] == [("brainstorming", "claude-code")]
1629
+ store.sync_apply(store.sync_plan())
1630
+ assert _link("claude-code").is_symlink()
1631
+
1632
+ def test_an_unnarrowed_skill_still_reaches_a_newly_enabled_agent(self,
1633
+ brainstorming):
1634
+ # sync's other job. An entry with no declaration must keep fanning out,
1635
+ # which is why scoped_agents fails open rather than closed.
1636
+ _link("cursor").unlink()
1637
+ assert store.sync_plan()["missing_links"] == [("brainstorming", "cursor")]
1638
+
1639
+ def test_a_pre_existing_lock_entry_is_unaffected(self, brainstorming):
1640
+ # Locks written before `only_agents` existed have no such key at all.
1641
+ e = lockfile.get_skill("brainstorming")
1642
+ assert "only_agents" in e # new installs record it (as None)
1643
+ del e["only_agents"]
1644
+ lockfile.set_skill("brainstorming", e)
1645
+ for agent in AGENT_DIRS:
1646
+ _link(agent).unlink()
1647
+ assert sorted(store.sync_plan()["missing_links"]) == [
1648
+ ("brainstorming", "claude-code"), ("brainstorming", "cursor"),
1649
+ ("brainstorming", "windsurf")]
1650
+
1651
+ def test_the_declaration_is_written_to_the_lock(self, tap, entry):
1652
+ store.install(entry, only_agents=["claude-code"])
1653
+ assert lockfile.get_skill("brainstorming")["only_agents"] == ["claude-code"]
1654
+
1655
+ def test_an_unnarrowed_install_records_no_declaration(self, brainstorming):
1656
+ assert lockfile.get_skill("brainstorming")["only_agents"] is None
1657
+
1658
+ def test_a_forced_reinstall_keeps_the_declaration(self, tap, entry):
1659
+ store.install(entry, only_agents=["claude-code"])
1660
+ store.install(entry, force=True)
1661
+ assert lockfile.get_skill("brainstorming")["only_agents"] == ["claude-code"]
1662
+ assert store.sync_plan()["missing_links"] == []
1663
+
1664
+ def test_import_from_path_records_its_narrowing(self, sandbox, tmp_path):
1665
+ # `boost import --agent ...` is a second entry point to the same lock
1666
+ # entry. Narrow links plus no declaration is the worst combination:
1667
+ # sync sees no scope and widens them straight back.
1668
+ src = tmp_path / "mine"
1669
+ src.mkdir()
1670
+ (src / "SKILL.md").write_text(
1671
+ "---\nname: mine\ndescription: d\nversion: 1.0.0\n---\nbody\n",
1672
+ encoding="utf-8")
1673
+ store.install_from_path(src, only_agents=["claude-code"])
1674
+ assert lockfile.get_skill("mine")["only_agents"] == ["claude-code"]
1675
+ assert store.sync_plan()["missing_links"] == []