boost-skill-cli 1.2.33__tar.gz → 1.2.35__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 (786) hide show
  1. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/CONTRIBUTING.md +11 -0
  2. {boost_skill_cli-1.2.33/boost_skill_cli.egg-info → boost_skill_cli-1.2.35}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/configuration.py +21 -1
  5. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/quality.py +20 -2
  6. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/safety.py +7 -1
  7. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/store.py +12 -1
  8. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  9. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/SOURCES.txt +9 -0
  10. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/openssf-badge.md +6 -9
  11. boost_skill_cli-1.2.35/docs/roadmap/items/branch-current-gate.md +39 -0
  12. boost_skill_cli-1.2.35/docs/roadmap/items/cli-command-audit.md +72 -0
  13. boost_skill_cli-1.2.35/docs/roadmap/items/reproducible-release-artifacts.md +62 -0
  14. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap.html +165 -2
  15. boost_skill_cli-1.2.35/docs/verifying-releases.md +214 -0
  16. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/pyproject.toml +13 -1
  17. boost_skill_cli-1.2.35/scripts/check_branch_current.py +94 -0
  18. boost_skill_cli-1.2.35/scripts/check_reproducible.py +181 -0
  19. boost_skill_cli-1.2.35/scripts/normalize_sdist.py +158 -0
  20. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_catalog.py +24 -1
  21. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_configuration.py +26 -0
  22. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_quality.py +43 -0
  23. boost_skill_cli-1.2.35/tests/unit/test_branch_current.py +56 -0
  24. boost_skill_cli-1.2.35/tests/unit/test_check_reproducible.py +192 -0
  25. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_link_ownership.py +35 -0
  26. boost_skill_cli-1.2.35/tests/unit/test_normalize_sdist.py +216 -0
  27. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_store.py +33 -0
  28. boost_skill_cli-1.2.33/docs/verifying-releases.md +0 -146
  29. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.gitattributes +0 -0
  30. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.gitignore +0 -0
  31. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.gitleaks.toml +0 -0
  32. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.htmlvalidate.json +0 -0
  33. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.lighthouserc.json +0 -0
  34. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.lycheeignore +0 -0
  35. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.markdownlint-cli2.jsonc +0 -0
  36. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.pre-commit-config.yaml +0 -0
  37. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.stylelintrc.json +0 -0
  38. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.vale/styles/boost/AIWriting.yml +0 -0
  39. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.vale/styles/boost/Terminology.yml +0 -0
  40. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  41. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/.vale.ini +0 -0
  42. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/CLAUDE.md +0 -0
  43. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/CODE_OF_CONDUCT.md +0 -0
  44. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/DCO +0 -0
  45. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/GOVERNANCE.md +0 -0
  46. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/LICENSE +0 -0
  47. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/MAINTAINERS.md +0 -0
  48. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/MANIFEST.in +0 -0
  49. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/Makefile +0 -0
  50. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/README.md +0 -0
  51. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/SECURITY.md +0 -0
  52. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/SUPPORT.md +0 -0
  53. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost +0 -0
  54. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/__init__.py +0 -0
  55. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/__main__.py +0 -0
  56. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/cli.py +0 -0
  57. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/cliparse.py +0 -0
  58. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/__init__.py +0 -0
  59. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/_common.py +0 -0
  60. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/bmad.py +0 -0
  61. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/discovery.py +0 -0
  62. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/hooks.py +0 -0
  63. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/info.py +0 -0
  64. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/intelligence.py +0 -0
  65. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/pkg.py +0 -0
  66. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/run.py +0 -0
  67. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/taps.py +0 -0
  68. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/commands/team.py +0 -0
  69. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/__init__.py +0 -0
  70. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/adapters.py +0 -0
  71. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/agents.py +0 -0
  72. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/ai.py +0 -0
  73. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/bmad.py +0 -0
  74. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/bootstrap.py +0 -0
  75. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/browse.py +0 -0
  76. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/builtin.py +0 -0
  77. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/capabilities.py +0 -0
  78. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/catalog.py +0 -0
  79. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/catalogbundle.py +0 -0
  80. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/chat.py +0 -0
  81. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/claude_settings.py +0 -0
  82. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/complete.py +0 -0
  83. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/config.py +0 -0
  84. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/dense.py +0 -0
  85. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/ed25519.py +0 -0
  86. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/embed.py +0 -0
  87. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/faithfulness.py +0 -0
  88. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/frontmatter.py +0 -0
  89. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/gitutil.py +0 -0
  90. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/hookhost.py +0 -0
  91. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/imperative.py +0 -0
  92. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/injectscan.py +0 -0
  93. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/installscan.py +0 -0
  94. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/integrity.py +0 -0
  95. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/journal.py +0 -0
  96. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/localembed.py +0 -0
  97. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/lockfile.py +0 -0
  98. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/logs.py +0 -0
  99. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/mcp.py +0 -0
  100. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/mcpdecl.py +0 -0
  101. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/mcphost.py +0 -0
  102. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/minisign.py +0 -0
  103. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/nethttp.py +0 -0
  104. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/output.py +0 -0
  105. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/paths.py +0 -0
  106. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/policy.py +0 -0
  107. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/projectlock.py +0 -0
  108. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/provenance.py +0 -0
  109. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/rag.py +0 -0
  110. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/registry.py +0 -0
  111. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/resolve.py +0 -0
  112. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/rules.py +0 -0
  113. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/scopes.py +0 -0
  114. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/secretscan.py +0 -0
  115. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/selfupdate.py +0 -0
  116. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/serve.py +0 -0
  117. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/stackprobe.py +0 -0
  118. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/staleness.py +0 -0
  119. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/trustaudit.py +0 -0
  120. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/typosquat.py +0 -0
  121. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/updatediff.py +0 -0
  122. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/util.py +0 -0
  123. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/core/workflows.py +0 -0
  124. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/data/registries.json +0 -0
  125. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/data/rules/boost-first.mdc +0 -0
  126. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/errors.py +0 -0
  127. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_cli/spin.py +0 -0
  128. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/__init__.py +0 -0
  129. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/_compat.py +0 -0
  130. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/graph.py +0 -0
  131. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/loader.py +0 -0
  132. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/py.typed +0 -0
  133. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_langchain/retriever.py +0 -0
  134. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  135. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  136. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/requires.txt +0 -0
  137. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/boost_skill_cli.egg-info/top_level.txt +0 -0
  138. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/codecov.yml +0 -0
  139. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/.claude/settings.local.json +0 -0
  140. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/DEBUGGING.md +0 -0
  141. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/adapters.html +0 -0
  142. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/README.md +0 -0
  143. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/c4-components-core.md +0 -0
  144. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/c4-containers.md +0 -0
  145. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/c4-context.md +0 -0
  146. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/architecture/c4-dynamic-install.md +0 -0
  147. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/bmad.md +0 -0
  148. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/distill.gif +0 -0
  149. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/doctor.gif +0 -0
  150. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/explain.gif +0 -0
  151. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/hooks.gif +0 -0
  152. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/install.gif +0 -0
  153. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/pulse.gif +0 -0
  154. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/search.gif +0 -0
  155. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/gifs/tap.gif +0 -0
  156. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/distill.tape +0 -0
  157. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/doctor.tape +0 -0
  158. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/explain.tape +0 -0
  159. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/hooks.tape +0 -0
  160. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/install.tape +0 -0
  161. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/pulse.tape +0 -0
  162. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/search.tape +0 -0
  163. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel/tapes/tap.tape +0 -0
  164. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/carousel.html +0 -0
  165. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/chat.html +0 -0
  166. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/code-review.md +0 -0
  167. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/commands.html +0 -0
  168. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/commit-audit.md +0 -0
  169. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/demo-index.json +0 -0
  170. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/demo.gif +0 -0
  171. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/demo.html +0 -0
  172. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/demo.tape +0 -0
  173. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/dependencies.md +0 -0
  174. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/design-roadmap.html +0 -0
  175. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/eval-latest.json +0 -0
  176. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/eval.html +0 -0
  177. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/index.html +0 -0
  178. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/langchain.html +0 -0
  179. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/mcp-hub.html +0 -0
  180. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/openssf-playbook.md +0 -0
  181. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/rag-architecture.md +0 -0
  182. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D01.md +0 -0
  183. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D02.md +0 -0
  184. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D03.md +0 -0
  185. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D04.md +0 -0
  186. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D05.md +0 -0
  187. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D06.md +0 -0
  188. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D07.md +0 -0
  189. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D08.md +0 -0
  190. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D09.md +0 -0
  191. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D10.md +0 -0
  192. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D11.md +0 -0
  193. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D12.md +0 -0
  194. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D13.md +0 -0
  195. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D14.md +0 -0
  196. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D15.md +0 -0
  197. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D16.md +0 -0
  198. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D17.md +0 -0
  199. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D18.md +0 -0
  200. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D19.md +0 -0
  201. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D20.md +0 -0
  202. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D21.md +0 -0
  203. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D22.md +0 -0
  204. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D23.md +0 -0
  205. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D24.md +0 -0
  206. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D25.md +0 -0
  207. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/BOOST-D26.md +0 -0
  208. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  209. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  210. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  211. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  212. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  213. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  214. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  215. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  216. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  217. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  218. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  219. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  220. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  221. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  222. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/boost-first-rule.md +0 -0
  223. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  224. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  225. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  226. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  227. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  228. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  229. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  230. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  231. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  232. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  233. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  234. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  235. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  236. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  237. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  238. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  239. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  240. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  241. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  242. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  243. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/command-carousel-page.md +0 -0
  244. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  245. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  246. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  247. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  248. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  249. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  250. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  251. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  252. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  253. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  254. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  255. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  256. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  257. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  258. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  259. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  260. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  261. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  262. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  263. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  264. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  265. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  266. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  267. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  268. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  269. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  270. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  271. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  272. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  273. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  274. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  275. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  276. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  277. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  278. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  279. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  280. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  281. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  282. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  283. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  284. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  285. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  286. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  287. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  288. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  289. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  290. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  291. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  292. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  293. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  294. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/github-community-health-files.md +0 -0
  295. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  296. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  297. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  298. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  299. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  300. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  301. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  302. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  303. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  304. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  305. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  306. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  307. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  308. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  309. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  310. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  311. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  312. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  313. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  314. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  315. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  316. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  317. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  318. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  319. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  320. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  321. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  322. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  323. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  324. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  325. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  326. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  327. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  328. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  329. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  330. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  331. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  332. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  333. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  334. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  335. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  336. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  337. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  338. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  339. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  340. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  341. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  342. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  343. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  344. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  345. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  346. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  347. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  348. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  349. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  350. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  351. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  352. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  353. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  354. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  355. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  356. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  357. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  358. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  359. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  360. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  361. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  362. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  363. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  364. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  365. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  366. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  367. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  368. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  369. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  370. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/openssf-playbook.md +0 -0
  371. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/openssf-silver.md +0 -0
  372. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  373. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  374. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  375. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  376. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  377. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  378. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  379. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  380. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  381. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  382. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  383. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  384. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  385. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  386. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  387. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  388. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  389. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  390. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  391. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  392. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  393. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  394. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  395. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  396. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  397. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  398. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  399. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  400. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  401. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  402. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  403. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  404. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  405. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  406. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  407. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  408. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  409. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  410. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  411. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  412. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  413. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  414. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  415. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  416. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  417. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  418. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  419. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  420. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  421. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  422. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  423. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  424. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  425. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  426. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  427. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  428. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  429. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  430. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  431. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  432. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  433. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  434. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  435. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  436. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  437. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  438. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  439. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  440. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  441. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  442. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  443. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  444. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  445. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  446. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  447. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  448. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  449. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  450. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  451. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  452. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  453. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  454. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  455. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  456. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  457. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  458. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  459. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  460. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  461. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  462. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  463. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  464. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  465. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  466. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  467. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  468. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  469. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  470. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  471. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  472. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  473. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  474. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  475. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  476. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  477. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  478. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  479. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  480. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/workspace-scope-install.md +0 -0
  481. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/zip-strict-audit.md +0 -0
  482. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  483. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  484. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/security-design.md +0 -0
  485. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/semantic-search.md +0 -0
  486. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  487. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/eslint.config.mjs +0 -0
  488. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/README.md +0 -0
  489. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/__init__.py +0 -0
  490. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/baseline.json +0 -0
  491. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/faithfulness.py +0 -0
  492. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/golden_set.json +0 -0
  493. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/make_corpus.py +0 -0
  494. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/make_golden.py +0 -0
  495. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/metrics.py +0 -0
  496. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/publish_golden_dataset.py +0 -0
  497. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/evals/run_evals.py +0 -0
  498. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/examples/README.md +0 -0
  499. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/examples/adapt-demo.sh +0 -0
  500. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/examples/boost-run-prototype.sh +0 -0
  501. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/index.html +0 -0
  502. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/noxfile.py +0 -0
  503. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/coverage-tools.in +0 -0
  504. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/coverage-tools.txt +0 -0
  505. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/lint-tools.in +0 -0
  506. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/lint-tools.txt +0 -0
  507. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/mutation-tools.in +0 -0
  508. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/mutation-tools.txt +0 -0
  509. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/platform-pins.lock +0 -0
  510. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/release-tools.in +0 -0
  511. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/release-tools.txt +0 -0
  512. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/test-tools.in +0 -0
  513. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/requirements/test-tools.txt +0 -0
  514. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/a11y_check.py +0 -0
  515. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/add_spdx_headers.py +0 -0
  516. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/bench_cli.sh +0 -0
  517. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_command_reference.py +0 -0
  518. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_demo_index.py +0 -0
  519. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_registries.py +0 -0
  520. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_roadmap.py +0 -0
  521. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/build_scale_corpus.py +0 -0
  522. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/check_anchors.py +0 -0
  523. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/check_dco.py +0 -0
  524. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/check_licenses.py +0 -0
  525. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/check_required_checks.py +0 -0
  526. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/ensure_eval_corpus.sh +0 -0
  527. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_corpus.py +0 -0
  528. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_explain.py +0 -0
  529. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_gate.py +0 -0
  530. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_recommend.py +0 -0
  531. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_retrieval.py +0 -0
  532. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/eval_stats_summary.py +0 -0
  533. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/import_budget.py +0 -0
  534. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/lock_toolchain.py +0 -0
  535. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/measure_registry.py +0 -0
  536. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/mutation_gate.py +0 -0
  537. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/mutation_shards.py +0 -0
  538. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/mutation_weights.json +0 -0
  539. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/page_budget.py +0 -0
  540. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/perf_gate.py +0 -0
  541. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/post_deploy_smoke.py +0 -0
  542. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/publish_eval_json.py +0 -0
  543. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/release_guard.py +0 -0
  544. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/release_preflight.py +0 -0
  545. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/scripts/serve_docs.py +0 -0
  546. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/setup.cfg +0 -0
  547. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/sonar-project.properties +0 -0
  548. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/style/README.md +0 -0
  549. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/style/boost.css +0 -0
  550. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/style/boost.js +0 -0
  551. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/style/demo.html +0 -0
  552. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/adapt.feature +0 -0
  553. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/browse.feature +0 -0
  554. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/count.feature +0 -0
  555. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/discover.feature +0 -0
  556. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/doctor.feature +0 -0
  557. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/environment.py +0 -0
  558. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/explain.feature +0 -0
  559. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/index.feature +0 -0
  560. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/install.feature +0 -0
  561. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/list.feature +0 -0
  562. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/mcp.feature +0 -0
  563. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/search.feature +0 -0
  564. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/steps/cli_steps.py +0 -0
  565. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/steps/discovery_steps.py +0 -0
  566. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/steps/mcp_steps.py +0 -0
  567. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/bdd/features/steps/quality_steps.py +0 -0
  568. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/conftest.py +0 -0
  569. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/baseline.json +0 -0
  570. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/explain.jsonl +0 -0
  571. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/golden-natural.jsonl +0 -0
  572. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/golden.jsonl +0 -0
  573. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/recommend.jsonl +0 -0
  574. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/taps-scale.txt +0 -0
  575. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/eval/taps.txt +0 -0
  576. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_capabilities_policy.py +0 -0
  577. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_adapt.py +0 -0
  578. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_bmad.py +0 -0
  579. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_chat.py +0 -0
  580. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_discovery.py +0 -0
  581. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_hooks.py +0 -0
  582. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_hooks_gemini.py +0 -0
  583. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_info.py +0 -0
  584. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_intelligence.py +0 -0
  585. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_pane_width.py +0 -0
  586. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_pkg.py +0 -0
  587. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_taps.py +0 -0
  588. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_cli_team.py +0 -0
  589. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_everyday_loop.py +0 -0
  590. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_integrity_enforce.py +0 -0
  591. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_kind_conformance.py +0 -0
  592. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_property_parsers.py +0 -0
  593. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_run.py +0 -0
  594. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_tap_signing.py +0 -0
  595. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/functional/test_workspace_scope.py +0 -0
  596. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/README.md +0 -0
  597. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  598. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  599. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  600. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  601. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  602. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  603. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  604. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  605. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  606. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  607. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  608. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  609. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  610. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  611. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  612. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  613. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  614. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  615. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  616. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  617. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  618. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  619. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  620. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/fuzz_frontmatter.py +0 -0
  621. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/fuzz/fuzz_registry.py +0 -0
  622. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/langchain/conftest.py +0 -0
  623. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/langchain/test_graph.py +0 -0
  624. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/langchain/test_loader.py +0 -0
  625. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/langchain/test_retriever.py +0 -0
  626. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/make_fixture.py +0 -0
  627. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/perf/test_benchmarks.py +0 -0
  628. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/smoke.sh +0 -0
  629. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_a11y_check.py +0 -0
  630. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_action_pin_lockstep.py +0 -0
  631. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_adapters.py +0 -0
  632. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_adapters_multi.py +0 -0
  633. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_adapters_runner.py +0 -0
  634. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_agents.py +0 -0
  635. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_ai.py +0 -0
  636. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_bmad_core.py +0 -0
  637. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_boost_first_offer.py +0 -0
  638. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_bootstrap.py +0 -0
  639. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_browse.py +0 -0
  640. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_builtin.py +0 -0
  641. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_capabilities.py +0 -0
  642. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_catalog.py +0 -0
  643. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_catalogbundle.py +0 -0
  644. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_chat.py +0 -0
  645. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_check_anchors.py +0 -0
  646. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_check_dco.py +0 -0
  647. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_check_licenses.py +0 -0
  648. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_claude_settings.py +0 -0
  649. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_clean_internal_cache.py +0 -0
  650. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_cliparse.py +0 -0
  651. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_codeql_analysis_key.py +0 -0
  652. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_command_reference_fresh.py +0 -0
  653. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_community_health_files.py +0 -0
  654. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_compact.py +0 -0
  655. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_complete.py +0 -0
  656. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_complete_rc_block.py +0 -0
  657. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_config.py +0 -0
  658. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_content_dedupe.py +0 -0
  659. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_content_identity.py +0 -0
  660. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_crash_redaction.py +0 -0
  661. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dedup_trust.py +0 -0
  662. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_demo_index.py +0 -0
  663. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense.py +0 -0
  664. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_embed_dedupe.py +0 -0
  665. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_fallback.py +0 -0
  666. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_fix_hint.py +0 -0
  667. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_quantized.py +0 -0
  668. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_ready_order.py +0 -0
  669. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_shard_real_schema.py +0 -0
  670. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  671. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_shards.py +0 -0
  672. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_status.py +0 -0
  673. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dense_status_cheap.py +0 -0
  674. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_dependabot_config.py +0 -0
  675. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_docs_pages_linked.py +0 -0
  676. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_docsite_chrome.py +0 -0
  677. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_ed25519.py +0 -0
  678. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_embed.py +0 -0
  679. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_embed_local.py +0 -0
  680. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_embed_truncated_response.py +0 -0
  681. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_entry_key.py +0 -0
  682. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_errors_and_cli_table.py +0 -0
  683. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_baseline.py +0 -0
  684. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_corpus.py +0 -0
  685. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_faithfulness.py +0 -0
  686. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_gate.py +0 -0
  687. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_grading.py +0 -0
  688. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_metrics.py +0 -0
  689. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_eval_stats_summary.py +0 -0
  690. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  691. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_faithfulness.py +0 -0
  692. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_frontmatter.py +0 -0
  693. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_fuzz_targets.py +0 -0
  694. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  695. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gitleaks_config.py +0 -0
  696. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gitutil.py +0 -0
  697. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gitutil_lfs.py +0 -0
  698. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_gitutil_sparse.py +0 -0
  699. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_hook_settings_hosts.py +0 -0
  700. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_hookhost.py +0 -0
  701. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_imperative.py +0 -0
  702. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_import_budget.py +0 -0
  703. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_injectscan.py +0 -0
  704. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_install_permission_error.py +0 -0
  705. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_installscan.py +0 -0
  706. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_integrity.py +0 -0
  707. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_journal.py +0 -0
  708. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_langchain_packaging.py +0 -0
  709. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_localembed.py +0 -0
  710. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_localembed_e2e.py +0 -0
  711. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_lockfile.py +0 -0
  712. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_logs.py +0 -0
  713. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_marketing_counts.py +0 -0
  714. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mcp.py +0 -0
  715. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mcp_install_scan.py +0 -0
  716. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mcpdecl.py +0 -0
  717. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mcphost.py +0 -0
  718. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_measure_registry.py +0 -0
  719. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_minisign.py +0 -0
  720. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mutation_hardening.py +0 -0
  721. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mutation_shards.py +0 -0
  722. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mutation_subfile_shards.py +0 -0
  723. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_mutmut_source_paths.py +0 -0
  724. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_nethttp.py +0 -0
  725. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_output.py +0 -0
  726. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_page_budget.py +0 -0
  727. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_paths.py +0 -0
  728. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_perf_gate.py +0 -0
  729. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_pkg_confusions.py +0 -0
  730. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_pkg_injection.py +0 -0
  731. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_pkg_secrets.py +0 -0
  732. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_platform_pins.py +0 -0
  733. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_policy.py +0 -0
  734. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_post_deploy_smoke.py +0 -0
  735. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_project_mcp_sidecar.py +0 -0
  736. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_projectlock.py +0 -0
  737. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_provenance.py +0 -0
  738. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_publish_golden_dataset.py +0 -0
  739. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rag.py +0 -0
  740. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rag_fastpath.py +0 -0
  741. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rag_fusion.py +0 -0
  742. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_registries_fresh.py +0 -0
  743. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_registry.py +0 -0
  744. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_registry_categories.py +0 -0
  745. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_registry_control_chars.py +0 -0
  746. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_release_guard.py +0 -0
  747. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_release_preflight.py +0 -0
  748. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_required_checks.py +0 -0
  749. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rerank_cache.py +0 -0
  750. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_resolve.py +0 -0
  751. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_roadmap_fresh.py +0 -0
  752. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_rules.py +0 -0
  753. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_scale_corpus.py +0 -0
  754. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_scopes.py +0 -0
  755. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_secretscan.py +0 -0
  756. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_selfupdate.py +0 -0
  757. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_serve.py +0 -0
  758. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_serve_docs.py +0 -0
  759. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_shards_matrix.py +0 -0
  760. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_smoke_covers_every_command.py +0 -0
  761. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_spdx_headers.py +0 -0
  762. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_spin.py +0 -0
  763. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_stackprobe.py +0 -0
  764. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_staleness.py +0 -0
  765. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_store_materialize.py +0 -0
  766. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_sync_blocked_links.py +0 -0
  767. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  768. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_token_parity.py +0 -0
  769. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_toolchain_lock.py +0 -0
  770. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_trustaudit.py +0 -0
  771. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_typosquat.py +0 -0
  772. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_updatediff.py +0 -0
  773. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_util.py +0 -0
  774. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_version.py +0 -0
  775. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_visual_harness_flags.py +0 -0
  776. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflow_concurrency.py +0 -0
  777. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  778. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  779. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflow_timeouts.py +0 -0
  780. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_workflows.py +0 -0
  781. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  782. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/a11y_check.mjs +0 -0
  783. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/console_check.mjs +0 -0
  784. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/package-lock.json +0 -0
  785. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/package.json +0 -0
  786. {boost_skill_cli-1.2.33 → boost_skill_cli-1.2.35}/tests/visual/visual_check.mjs +0 -0
@@ -257,6 +257,17 @@ branch ruleset (**Settings → Rules → Rulesets**):
257
257
  gate before it can merge, so an incompatible pair can't both land — the second
258
258
  PR must include the first and re-run CI.
259
259
 
260
+ > **Set it in the ruleset, and verify it from the API.** This repository asks
261
+ > for that rule in two places, and for a while neither one enforced it. Classic
262
+ > branch protection had `strict: true` *and* `enforce_admins: false`, so it
263
+ > skipped the only account that merges; the active ruleset — no bypass actors,
264
+ > so it does apply — had `strict_required_status_checks_policy: false`. Two
265
+ > mechanisms, and the binding one had the safety off. Two PRs then merged into
266
+ > a red `main`, which stopped the release guard arming and left two merged PRs
267
+ > unreleased. Check the real state with
268
+ > `gh api repos/jonnyeclectic/boost/rulesets/<id>`, never the settings page,
269
+ > and note that the `branch-current` required check now backstops it.
270
+ >
260
271
  > Check names must be **unique across workflows** — GitHub matches a required
261
272
  > check by name alone. Three names collided before this was written (`lint` in
262
273
  > ci/markdownlint/theme-lint, `audit` in lighthouse/pip-audit, `analyze` in
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.33
3
+ Version: 1.2.35
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.2.33'
22
- __version_tuple__ = version_tuple = (1, 2, 33)
21
+ __version__ = version = '1.2.35'
22
+ __version_tuple__ = version_tuple = (1, 2, 35)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -570,6 +570,26 @@ def _write_onboard_file(dest: Path, content: str, force: bool) -> bool:
570
570
  return True
571
571
 
572
572
 
573
+ def _telemetry_created(dest: Path) -> str:
574
+ """The existing file's ``created`` timestamp, or now for a fresh write.
575
+
576
+ ``_write_onboard_file`` treats a byte-identical re-run as a no-op — but
577
+ stamping a fresh ``util.now_iso()`` into telemetry.json on every
578
+ invocation meant the comparison could only match by wall-clock luck (two
579
+ invocations landing in the same second), defeating the "re-running
580
+ onboard regenerates the workflow byte-for-byte" guarantee documented
581
+ above for the one file whose content is otherwise fully deterministic.
582
+ """
583
+ try:
584
+ data = json.loads(dest.read_text(encoding="utf-8"))
585
+ created = data.get("created")
586
+ if isinstance(created, str) and created:
587
+ return created
588
+ except (OSError, UnicodeDecodeError, json.JSONDecodeError):
589
+ pass
590
+ return util.now_iso()
591
+
592
+
573
593
  def cmd_onboard(argv) -> int:
574
594
  """boost onboard [--repo DIR] [--pr] [--dry-run] [--force]"""
575
595
  p = cliparse.parser(
@@ -593,7 +613,7 @@ def cmd_onboard(argv) -> int:
593
613
  telemetry = json.dumps({
594
614
  "enabled": True,
595
615
  "share_pulse": True,
596
- "created": util.now_iso(),
616
+ "created": _telemetry_created(repo / _TELEMETRY_REL),
597
617
  "by": util.user(),
598
618
  }, indent=2) + "\n"
599
619
  files = [(_TELEMETRY_REL, telemetry), (_WORKFLOW_REL, _WORKFLOW_YML)]
@@ -94,7 +94,12 @@ def _resolve_as_far_as_it_exists(path: Path) -> Path:
94
94
  while cur != cur.parent and not cur.exists():
95
95
  tail.append(cur.name)
96
96
  cur = cur.parent
97
- with suppress(OSError):
97
+ # RuntimeError is not redundant with OSError here: Python 3.12's
98
+ # `Path.resolve()` raises RuntimeError("Symlink loop from ...") for a
99
+ # cycle even in non-strict mode, and RuntimeError is NOT an OSError
100
+ # subclass — 3.13+ raises OSError for the same input. See
101
+ # store.resolves_into_store for the identical split, caught the same way.
102
+ with suppress(OSError, RuntimeError):
98
103
  cur = cur.resolve()
99
104
  return cur.joinpath(*reversed(tail))
100
105
 
@@ -907,10 +912,18 @@ def cmd_heal(argv):
907
912
 
908
913
  plan = store.sync_plan()
909
914
  if dry:
915
+ # `ours` above is exactly what a real run unlinks before computing
916
+ # this plan, so `sync_plan`'s stale-link sweep never sees those paths
917
+ # on a real run — only here, where nothing was unlinked yet. Skip
918
+ # them so a preview doesn't report the same path twice under two
919
+ # different actions.
920
+ already_reported = {str(link) for link in ours}
910
921
  for name, agent in plan["missing_links"]:
911
922
  out.info("would link %s → %s" % (name, agent))
912
923
  actions.append("link %s" % name)
913
924
  for p in plan["stale_links"]:
925
+ if p in already_reported:
926
+ continue
914
927
  out.info("would remove stale link %s" % _tilde(p))
915
928
  actions.append("stale %s" % p)
916
929
  for name in plan["missing_store"]:
@@ -988,7 +1001,12 @@ def cmd_conflict(argv):
988
1001
  ap.add_argument("--json", action="store_true")
989
1002
  args = ap.parse_args(argv)
990
1003
 
991
- installed = _iter_installed()
1004
+ # Quarantine removes a skill's active links/materialization on purpose
1005
+ # (see _drift_status_materialized's docstring) — a quarantined skill has
1006
+ # nothing live to be contradicted by, so it is excluded from both sides
1007
+ # of conflict detection rather than surfacing a conflict finding no
1008
+ # `boost quarantine` can ever clear.
1009
+ installed = [(n, e) for n, e in _iter_installed() if not e.get("quarantined")]
992
1010
  rules: list[tuple[str, str, str, set]] = [] # skill, line, polarity, stems
993
1011
  declared: list[tuple[str, str]] = [] # skill, conflicting skill
994
1012
  installed_names = {n for n, _e in installed}
@@ -268,7 +268,13 @@ def _trust_audit(as_json: bool) -> int:
268
268
  """`boost audit --skills` — one trust-health answer for the installed set."""
269
269
  installed = dict(_iter_installed())
270
270
  peers: dict = {}
271
- for name, peer in trustaudit.conflict_pairs(list(installed),
271
+ # Quarantine removes a skill's active links on purpose — pairing it as a
272
+ # conflict source or target would report a finding `boost quarantine`
273
+ # (its own documented remedy) can never clear. Non-quarantined skills are
274
+ # still checked against a quarantined peer's *declared* conflicts via
275
+ # `_installed_conflicts`, so only the pairing set is trimmed here.
276
+ active_names = [n for n, lk in installed.items() if not lk.get("quarantined")]
277
+ for name, peer in trustaudit.conflict_pairs(active_names,
272
278
  _installed_conflicts(installed)):
273
279
  peers.setdefault(name, []).append(peer)
274
280
 
@@ -80,7 +80,16 @@ def installed() -> dict:
80
80
  def source_dir_for(entry: dict) -> Path:
81
81
  """Absolute path of a catalog entry's skill dir inside its tap clone.
82
82
 
83
- Materializes the directory first. Taps check out Markdown only, so a skill
83
+ Clones the tap first if it is only *registered* and not yet cloned — the
84
+ state `boost catalog --import` deliberately leaves a tap in (a bundle
85
+ ships the catalogue, not the repo, precisely so the receiver can search
86
+ before paying for any clone). `catalog --import`'s own hint promises
87
+ "`boost install` clones just the one registry it needs"; without this, a
88
+ tap that was imported rather than tapped raised "source vanished from
89
+ tap" — a message that implies the source *used to* exist, when really it
90
+ was never fetched.
91
+
92
+ Materializes the directory next. Taps check out Markdown only, so a skill
84
93
  that ships `scripts/` or `assets/` has them in the index and not on disk;
85
94
  `_copy_skill` is a copytree, and handed a partial directory it copies what
86
95
  is there and reports success. Every consumer of a tap's real files — both
@@ -88,6 +97,8 @@ def source_dir_for(entry: dict) -> Path:
88
97
  the one place that has to get it right.
89
98
  """
90
99
  tap = registry.get(entry["tap"])
100
+ if not tap.is_cloned:
101
+ gitutil.clone_shallow(tap.url, tap.path)
91
102
  src = tap.path if entry["rel_dir"] == "." else tap.path / entry["rel_dir"]
92
103
  gitutil.materialize(tap.path, entry["rel_dir"])
93
104
  if not (src / "SKILL.md").exists():
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.33
3
+ Version: 1.2.35
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -213,6 +213,7 @@ docs/roadmap/items/boost-first-carried-the-losing-trigger.md
213
213
  docs/roadmap/items/boost-first-rule.md
214
214
  docs/roadmap/items/boost-langchain-publishing.md
215
215
  docs/roadmap/items/boost-run-live-agents.md
216
+ docs/roadmap/items/branch-current-gate.md
216
217
  docs/roadmap/items/bring-commands-under-mutation-testing.md
217
218
  docs/roadmap/items/broken-link-and-anchor-checking-lychee.md
218
219
  docs/roadmap/items/browse-could-not-search-two-words.md
@@ -227,6 +228,7 @@ docs/roadmap/items/ci-job-timeout-minutes.md
227
228
  docs/roadmap/items/ci-summary-step-fails-itself.md
228
229
  docs/roadmap/items/ci-time-is-now-runner-queueing.md
229
230
  docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md
231
+ docs/roadmap/items/cli-command-audit.md
230
232
  docs/roadmap/items/cli-output-ignored-the-terminal.md
231
233
  docs/roadmap/items/code-scanning-rule-can-be-restored.md
232
234
  docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md
@@ -391,6 +393,7 @@ docs/roadmap/items/reconcile-the-theme-drift.md
391
393
  docs/roadmap/items/refresh-the-marketing-surface.md
392
394
  docs/roadmap/items/rel-time-tests-race-the-wall-clock.md
393
395
  docs/roadmap/items/release-verifies-the-wrong-commit.md
396
+ docs/roadmap/items/reproducible-release-artifacts.md
394
397
  docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md
395
398
  docs/roadmap/items/required-checks-config-drift.md
396
399
  docs/roadmap/items/resolve-vendored-duplicate-copies.md
@@ -506,8 +509,10 @@ scripts/build_registries.py
506
509
  scripts/build_roadmap.py
507
510
  scripts/build_scale_corpus.py
508
511
  scripts/check_anchors.py
512
+ scripts/check_branch_current.py
509
513
  scripts/check_dco.py
510
514
  scripts/check_licenses.py
515
+ scripts/check_reproducible.py
511
516
  scripts/check_required_checks.py
512
517
  scripts/ensure_eval_corpus.sh
513
518
  scripts/eval_corpus.py
@@ -522,6 +527,7 @@ scripts/measure_registry.py
522
527
  scripts/mutation_gate.py
523
528
  scripts/mutation_shards.py
524
529
  scripts/mutation_weights.json
530
+ scripts/normalize_sdist.py
525
531
  scripts/page_budget.py
526
532
  scripts/perf_gate.py
527
533
  scripts/post_deploy_smoke.py
@@ -623,6 +629,7 @@ tests/unit/test_ai.py
623
629
  tests/unit/test_bmad_core.py
624
630
  tests/unit/test_boost_first_offer.py
625
631
  tests/unit/test_bootstrap.py
632
+ tests/unit/test_branch_current.py
626
633
  tests/unit/test_browse.py
627
634
  tests/unit/test_builtin.py
628
635
  tests/unit/test_capabilities.py
@@ -632,6 +639,7 @@ tests/unit/test_chat.py
632
639
  tests/unit/test_check_anchors.py
633
640
  tests/unit/test_check_dco.py
634
641
  tests/unit/test_check_licenses.py
642
+ tests/unit/test_check_reproducible.py
635
643
  tests/unit/test_claude_settings.py
636
644
  tests/unit/test_clean_internal_cache.py
637
645
  tests/unit/test_cliparse.py
@@ -710,6 +718,7 @@ tests/unit/test_mutation_shards.py
710
718
  tests/unit/test_mutation_subfile_shards.py
711
719
  tests/unit/test_mutmut_source_paths.py
712
720
  tests/unit/test_nethttp.py
721
+ tests/unit/test_normalize_sdist.py
713
722
  tests/unit/test_output.py
714
723
  tests/unit/test_page_budget.py
715
724
  tests/unit/test_paths.py
@@ -213,8 +213,8 @@ of the security-design document for the full account.
213
213
 
214
214
  ## Gold
215
215
 
216
- Gold is **23** criteria on top of silver. Sixteen are Met, two are N/A and
217
- five are Unmet. Three of the five are about how many people work on boost
216
+ Gold is **23** criteria on top of silver. Seventeen are Met, two are N/A and
217
+ four are Unmet. Three of the four are about how many people work on boost
218
218
  rather than about the code, so no pull request can close them.
219
219
 
220
220
  That count is worth a note, because an earlier version of this section said 21
@@ -225,10 +225,9 @@ like a plausible total, so nothing flagged it; the gap only appeared on the
225
225
  submission form, where 23 rows were waiting. A count that looks reasonable is
226
226
  not a checked count.
227
227
 
228
- Read this section as the honest ceiling. Eighteen of twenty-three is where
229
- boost stops on its own: of the five that remain, two are engineering (a
230
- reproducible sdist, a host that sets response headers) and three are a
231
- recruiting problem.
228
+ Read this section as the honest ceiling. Nineteen of twenty-three is where
229
+ boost stops on its own: of the four that remain, one is engineering (a host
230
+ that sets response headers) and three are a recruiting problem.
232
231
 
233
232
  ### Prerequisites and project oversight
234
233
 
@@ -265,7 +264,7 @@ recruiting problem.
265
264
 
266
265
  | Criterion | Cat. | Answer | Evidence |
267
266
  |---|---|---|---|
268
- | `build_reproducible` | MUST | **Unmet** | Measured, not assumed: with `SOURCE_DATE_EPOCH` set, two builds of one commit produce a **bit-identical wheel** and a **differing sdist**. `setuptools` writes each tar member's real mtime plus the builder's `uid`/`gid`/user name into the sdist, so 54 members differ between builds two seconds apart. Two things are missing — the release workflow installs its build tooling unpinned, and the sdist's timestamps and ownership need normalising. The full measurement and the commands to reproduce it are in [docs/verifying-releases.md](https://github.com/jonnyeclectic/boost/blob/main/docs/verifying-releases.md#can-you-rebuild-it-yourself-partly--the-measurement). N/A would be wrong: boost ships wheels. |
267
+ | `build_reproducible` | MUST | **Met** | Measured, not assumed: `scripts/check_reproducible.py` builds the project twice with `SOURCE_DATE_EPOCH` pinned to the same value both times and diffs the results — both the **wheel and the sdist are now bit-identical**. They were not: `setuptools` writes each sdist tar member's real mtime plus the builder's `uid`/`gid`/user name with no override, so 54 members differed between builds two seconds apart ([pypa/setuptools#2133](https://github.com/pypa/setuptools/issues/2133), open since 2020). `scripts/normalize_sdist.py` now clamps that in `publish.yml`, between the build and `twine check`, and the release toolchain that produces the artifacts is hash-pinned (`requirements/release-tools.txt`) with `pyproject.toml`'s `[build-system].requires` exact-pinned rather than left as a floor. The full measurement and the commands to reproduce it are in [docs/verifying-releases.md](https://github.com/jonnyeclectic/boost/blob/main/docs/verifying-releases.md#can-you-rebuild-it-yourself-yes--the-measurement). N/A would be wrong: boost ships wheels. |
269
268
 
270
269
  ### Test invocation and coverage
271
270
 
@@ -303,8 +302,6 @@ recruiting problem.
303
302
  - `bus_factor`, `contributors_unassociated`, `two_person_review` — **a second
304
303
  person**, sustained. Not a document, not a check, and not something to
305
304
  simulate with a second account.
306
- - `build_reproducible` — pin the release build toolchain, then normalise the
307
- sdist tarball.
308
305
  - `hardened_site` — host the documentation somewhere that lets you set
309
306
  response headers.
310
307
 
@@ -0,0 +1,39 @@
1
+ ---
2
+ id: branch-current-gate
3
+ board: code
4
+ section: health
5
+ status: inflight
6
+ category: CI · Release safety
7
+ complexity: S
8
+ impact: High
9
+ wow: 4
10
+ note: two protection mechanisms disagreed; the binding one had the safety off
11
+ order: 10
12
+ owner: loop/generated-freshness
13
+ pr:
14
+ title: main went red because "require branches up to date" was never actually on
15
+ ---
16
+ Two pull requests, each green against the <code>main</code> it was tested on, merged into a
17
+ combination that turned <code>main</code> red. Their source files did not conflict. The
18
+ <b>generated</b> <code>docs/roadmap.html</code> did — and a squash merge takes one side of a
19
+ generated file <b>without ever reporting a conflict</b>. The board's "Loop finds" counter was
20
+ correct on both branches and wrong for their union.
21
+ <b>Seventeen jobs failed on one line.</b> Ten test legs, the lint job and all six mutation
22
+ shards — the shards because the unit suite runs inside <code>mutants/</code>, where
23
+ <code>test_roadmap_fresh</code> fails baseline <i>collection</i>, so a stale generated file
24
+ reads as "the mutation gate could not start". And because <code>ci</code> was red on
25
+ <code>main</code>, the release workflow's guard never armed: two merged pull requests, one of
26
+ them the reproducible-build pipeline, sat on <code>main</code> with no tag.
27
+ <b>The root cause was a setting, and the trap was that it looked set.</b> The repository asks
28
+ GitHub to require branches be up to date <b>twice</b>. Classic branch protection has
29
+ <code>strict: true</code> — and <code>enforce_admins: false</code>, so it does not apply to the
30
+ one account that merges. The active ruleset, which has no bypass actors and therefore does
31
+ apply, had <code>strict_required_status_checks_policy: false</code>. Two mechanisms, and the
32
+ binding one had the safety off. They also disagreed on how many checks are required: 14, 20,
33
+ and 21 in <code>required-checks.txt</code>.
34
+ <b>Fixed both ways.</b> The ruleset now enforces up-to-date merges, verified by reading it back
35
+ from the API rather than trusting the settings page. And <code>branch-current</code> is now a
36
+ required check, because that setting is invisible config that drifted once and can drift again
37
+ — a required check is in the diff, in <code>required-checks.txt</code>, and shows up in review.
38
+ Within minutes of the fix, GitHub moved two open pull requests to <code>behind</code> and
39
+ refused them; an hour earlier both would have merged and broken <code>main</code> a second time.
@@ -0,0 +1,72 @@
1
+ ---
2
+ id: cli-command-audit
3
+ board: code
4
+ section: shipped
5
+ status: shipped
6
+ category: Quality · CLI
7
+ complexity: M
8
+ impact: Med
9
+ wow: 3
10
+ note: audited all 80 COMMANDS entries against a disposable HOME; 4 real defects fixed with tests
11
+ order: 128
12
+ owner: loop/verify
13
+ pr:
14
+ title: All 80 <code>boost</code> commands audited against a disposable HOME &mdash; four defects fixed
15
+ ---
16
+ Every command in <code>boost_cli/cli.py</code>'s <code>COMMANDS</code> table (not memory of
17
+ what the CLI does) was exercised for real: <code>--help</code> against its actual
18
+ <code>argparse</code> definition, the happy path against its one-line summary and
19
+ <code>docs/commands.html</code>, exit codes on success/error/empty-store/nonexistent-name,
20
+ and &mdash; for anything that mutates state &mdash; the real lock file, symlinks and cache on
21
+ disk, not just stdout. Four parallel audits split the ~80 commands by
22
+ <code>COMMANDS</code>'s own groups (pkg+find, info+tap+ai, quality/safety, cfg+team) so
23
+ every command got adversarial testing (tampered store content, corrupted lock JSON,
24
+ deleted store dirs, real signed/tampered minisign manifests) rather than a clean-state
25
+ smoke pass.
26
+
27
+ The known failure modes this codebase has shipped before were hunted deliberately: a
28
+ command reporting success without doing the thing, a raw read that misses a tap's sparse
29
+ checkout, <code>Path.resolve(strict=True)</code>'s <code>RuntimeError</code>/<code>OSError</code>
30
+ split between Python 3.12 and 3.13+, and a dry-run that silently no-ops or over-reports.
31
+ <code>boost trust add</code> &mdash; the one command with a documented history of exactly the
32
+ first failure mode (a merged autofix once deleted its fingerprint line) &mdash; was
33
+ re-verified against real Ed25519 signatures and tampering and held up.
34
+
35
+ Four real defects, each fixed with a failing-then-passing test. <code>boost conflict</code>
36
+ and <code>boost audit --skills</code> kept reporting a MED conflict finding against a skill
37
+ after it was quarantined &mdash; quarantine's own documented purpose ("isolate a problematic
38
+ skill") gave no relief from the one command whose entire job is to report that condition;
39
+ both now exclude quarantined skills from conflict pairing. <code>boost catalog
40
+ --import</code> tells the receiver "<code>boost install</code> clones just the one registry
41
+ it needs", but <code>install</code> performed no lazy clone &mdash; the one end-to-end path the
42
+ command advertises (import &rarr; search &rarr; install) failed with a misleading "source
43
+ vanished from tap" error; <code>store.source_dir_for</code> now clones a
44
+ registered-but-uncloned tap on demand, the single choke point every consumer of tap content
45
+ already goes through. <code>boost onboard</code>'s own docstring promises a byte-for-byte
46
+ no-op on an unchanged re-run, but <code>.boost/telemetry.json</code> stamped a fresh
47
+ timestamp on every invocation, so the comparison could only pass by wall-clock luck &mdash; a
48
+ scripted <code>boost onboard --pr</code> on an already-onboarded repo would open a PR
49
+ containing only a timestamp bump, forever; it now preserves the existing file's
50
+ <code>created</code> field. <code>boost heal --dry-run</code> double-reported the same
51
+ broken symlink under two different messages ("would remove broken link" and "would remove
52
+ stale link") because the real run unlinks before computing <code>sync_plan()</code> while
53
+ dry-run never unlinks anything &mdash; a preview overstating what running <code>heal</code> for
54
+ real actually does.
55
+
56
+ A fifth, latent-only finding was fixed alongside them: <code>quality.py</code>'s
57
+ <code>_resolve_as_far_as_it_exists</code> caught only <code>OSError</code> around a
58
+ non-strict <code>Path.resolve()</code>, the same symlink-loop gap
59
+ <code>store.resolves_into_store</code> had already been fixed for. Verified empirically
60
+ (not just read) on both interpreters: <code>Path.resolve(strict=False)</code> on a
61
+ symlink-loop path returns silently on 3.14 and raises <code>RuntimeError</code> on 3.12 &mdash;
62
+ confirmed with a live symlink cycle on both, and the full affected test suite reran green
63
+ on a real Python 3.12 venv.
64
+
65
+ Two findings were investigated and deliberately left alone after checking the existing
66
+ test suite rather than trusting the audit's framing: <code>boost drift</code> always
67
+ exiting 0 is pinned as intentional by <code>tests/functional/test_cli_quality.py</code>'s
68
+ own comment ("rc stays 0: drift only reports"), and <code>boost who</code>'s aggregate view
69
+ counting every journal subject (not just install/edit/evolve/distill/tag actions) toward
70
+ "skill expertise" is pinned the same way by an existing test asserting a tap name in the
71
+ skills set. Flipping either would contradict a deliberately written existing test, not fix
72
+ an oversight.
@@ -0,0 +1,62 @@
1
+ ---
2
+ id: reproducible-release-artifacts
3
+ board: code
4
+ section: pipeline
5
+ status: shipped
6
+ category: Security · Reproducibility
7
+ complexity: M
8
+ impact: Med
9
+ wow: 3
10
+ note: wheel + sdist now bit-identical; setuptools#2133 has no native fix
11
+ order: 128
12
+ owner: loop/repro
13
+ pr:
14
+ title: Reproducible release builds — the sdist half nobody's setuptools does for you
15
+ ---
16
+ <code>build_reproducible</code> was Unmet on measurement: with <code>SOURCE_DATE_EPOCH</code> set,
17
+ two builds of the same commit produced a <b>bit-identical wheel</b> and a <b>differing
18
+ sdist</b>. <code>setuptools</code> writes each tar member's real build-time mtime, and the
19
+ builder's <code>uid</code>/<code>gid</code>/user name, into the sdist with no environment
20
+ variable to override either &mdash; 54 members differed between builds two seconds apart on the
21
+ same machine, and a build on another machine would have differed in the ownership fields too.
22
+
23
+ <b>The upstream knob doesn't exist.</b> <a href="https://github.com/pypa/setuptools/issues/2133">
24
+ pypa/setuptools#2133</a> has asked for <code>SOURCE_DATE_EPOCH</code> support in sdist since 2020;
25
+ it is still open, with no fix in the version this project pins. The one PyPI package that already
26
+ patches it, <code>setuptools-reproducible</code>, does so by replacing
27
+ <code>build-backend</code> entirely &mdash; and its dependency closure could not be hash-pinned
28
+ the way the rest of boost's toolchain is, because <code>[build-system].requires</code> is a bare
29
+ PEP&nbsp;508 requirement string with no hash field. So the fix is a small, stdlib-only
30
+ post-processing step instead: <code>scripts/normalize_sdist.py</code> clamps every member's
31
+ mtime, zeroes uid/gid, blanks uname/gname, and resets the gzip container's own header
32
+ timestamp, run in <code>publish.yml</code> between <code>python -m build</code> and
33
+ <code>twine check</code> &mdash; so nothing is ever attested un-normalized.
34
+
35
+ <b>The wheel had a real gap too, not just the sdist.</b> <code>publish.yml</code> never set
36
+ <code>SOURCE_DATE_EPOCH</code> at all before this &mdash; the "bit-identical wheel" measurement
37
+ only held in a controlled local test where the variable was exported by hand. The actual release
38
+ pipeline was building an unreproducible wheel as well, and nothing had noticed.
39
+
40
+ <b>The toolchain that determines the bytes is now pinned twice.</b>
41
+ <code>requirements/release-tools.txt</code> hash-pins the outer <code>build</code>/
42
+ <code>twine</code> install (<code>publish.yml</code> used to run
43
+ <code>pip install build twine</code> unpinned, so last month's toolchain was not recoverable
44
+ from the repository). But <code>python -m build</code> resolves <code>setuptools</code> and
45
+ <code>setuptools-scm</code> fresh into an isolated build environment regardless of what the
46
+ outer install has &mdash; that's the part that actually produces the artifact bytes &mdash; so
47
+ <code>pyproject.toml</code>'s <code>[build-system].requires</code> is now exact-pinned
48
+ (<code>setuptools==83.0.0</code>, <code>setuptools-scm==10.2.1</code>) rather than left as
49
+ <code>&gt;=64</code>/<code>&gt;=8</code>. No hash field exists at that layer; exact-pinning is
50
+ the strongest promise PEP 508 allows there.
51
+
52
+ <b>Falsifiable, not asserted.</b> <code>scripts/check_reproducible.py</code> builds the project
53
+ twice with the same <code>SOURCE_DATE_EPOCH</code>, runs the same sdist fix the release pipeline
54
+ runs, and diffs the results by sha256 &mdash; <code>--skip-normalize</code> reruns without the fix
55
+ to show the gap it closes. Degrades to exit&nbsp;2 ("could not check") rather than exit&nbsp;0
56
+ when <code>build</code> isn't installed, matching how boost's own CI controls have failed
57
+ silently before: a check that can't run must never read as a pass.
58
+
59
+ <code>docs/openssf-badge.md</code>'s <code>build_reproducible</code> row now reads <b>Met</b>;
60
+ <code>docs/verifying-releases.md</code> carries the re-run measurement and how to rebuild from a
61
+ git tag (the sdist itself carries no <code>.git</code> history, so <code>SOURCE_DATE_EPOCH</code>
62
+ has to come from a checkout, not the tarball).