boost-skill-cli 1.2.67__tar.gz → 1.2.69__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 (837) hide show
  1. {boost_skill_cli-1.2.67/boost_skill_cli.egg-info → boost_skill_cli-1.2.69}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  4. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  5. boost_skill_cli-1.2.69/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +52 -0
  6. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +9 -0
  7. boost_skill_cli-1.2.69/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +69 -0
  8. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap.html +129 -3
  9. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_bot_pr_dco.py +54 -0
  10. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.gitattributes +0 -0
  11. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.gitignore +0 -0
  12. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.gitleaks.toml +0 -0
  13. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.htmlvalidate.json +0 -0
  14. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.lighthouserc.json +0 -0
  15. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.lycheeignore +0 -0
  16. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.markdownlint-cli2.jsonc +0 -0
  17. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.pre-commit-config.yaml +0 -0
  18. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.stylelintrc.json +0 -0
  19. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.vale/styles/boost/AIWriting.yml +0 -0
  20. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.vale/styles/boost/Terminology.yml +0 -0
  21. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  22. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/.vale.ini +0 -0
  23. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/CLAUDE.md +0 -0
  24. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/CODE_OF_CONDUCT.md +0 -0
  25. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/CONTRIBUTING.md +0 -0
  26. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/DCO +0 -0
  27. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/GOVERNANCE.md +0 -0
  28. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/LICENSE +0 -0
  29. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/MAINTAINERS.md +0 -0
  30. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/MANIFEST.in +0 -0
  31. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/Makefile +0 -0
  32. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/README.md +0 -0
  33. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/SECURITY.md +0 -0
  34. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/SUPPORT.md +0 -0
  35. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost +0 -0
  36. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/__init__.py +0 -0
  37. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/__main__.py +0 -0
  38. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/cli.py +0 -0
  39. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/cliparse.py +0 -0
  40. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/__init__.py +0 -0
  41. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/_common.py +0 -0
  42. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/bmad.py +0 -0
  43. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/configuration.py +0 -0
  44. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/discovery.py +0 -0
  45. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/hooks.py +0 -0
  46. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/info.py +0 -0
  47. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/intelligence.py +0 -0
  48. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/pkg.py +0 -0
  49. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/quality.py +0 -0
  50. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/quickstart.py +0 -0
  51. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/run.py +0 -0
  52. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/safety.py +0 -0
  53. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/taps.py +0 -0
  54. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/commands/team.py +0 -0
  55. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/__init__.py +0 -0
  56. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/adapters.py +0 -0
  57. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/agents.py +0 -0
  58. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/ai.py +0 -0
  59. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/aihost.py +0 -0
  60. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/bmad.py +0 -0
  61. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/bootstrap.py +0 -0
  62. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/browse.py +0 -0
  63. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/builtin.py +0 -0
  64. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/capabilities.py +0 -0
  65. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/catalog.py +0 -0
  66. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/catalogbundle.py +0 -0
  67. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/chat.py +0 -0
  68. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/claude_settings.py +0 -0
  69. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/complete.py +0 -0
  70. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/config.py +0 -0
  71. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/dense.py +0 -0
  72. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/ed25519.py +0 -0
  73. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/embed.py +0 -0
  74. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/faithfulness.py +0 -0
  75. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/frontmatter.py +0 -0
  76. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/gitutil.py +0 -0
  77. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/hookhost.py +0 -0
  78. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/imperative.py +0 -0
  79. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/injectscan.py +0 -0
  80. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/installscan.py +0 -0
  81. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/integrity.py +0 -0
  82. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/journal.py +0 -0
  83. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/localembed.py +0 -0
  84. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/lockfile.py +0 -0
  85. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/logs.py +0 -0
  86. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/mcp.py +0 -0
  87. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/mcpdecl.py +0 -0
  88. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/mcphost.py +0 -0
  89. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/minisign.py +0 -0
  90. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/nethttp.py +0 -0
  91. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/output.py +0 -0
  92. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/paths.py +0 -0
  93. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/policy.py +0 -0
  94. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/projectlock.py +0 -0
  95. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/provenance.py +0 -0
  96. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/rag.py +0 -0
  97. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/registry.py +0 -0
  98. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/resolve.py +0 -0
  99. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/rules.py +0 -0
  100. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/scopes.py +0 -0
  101. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/secretscan.py +0 -0
  102. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/selfupdate.py +0 -0
  103. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/serve.py +0 -0
  104. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/shards.py +0 -0
  105. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/stackprobe.py +0 -0
  106. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/staleness.py +0 -0
  107. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/store.py +0 -0
  108. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/trustaudit.py +0 -0
  109. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/typosquat.py +0 -0
  110. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/updatediff.py +0 -0
  111. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/util.py +0 -0
  112. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/core/workflows.py +0 -0
  113. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/data/registries.json +0 -0
  114. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/data/rules/boost-first.mdc +0 -0
  115. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/errors.py +0 -0
  116. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_cli/spin.py +0 -0
  117. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/__init__.py +0 -0
  118. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/_compat.py +0 -0
  119. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/graph.py +0 -0
  120. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/loader.py +0 -0
  121. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/py.typed +0 -0
  122. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_langchain/retriever.py +0 -0
  123. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  124. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  125. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/requires.txt +0 -0
  126. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/boost_skill_cli.egg-info/top_level.txt +0 -0
  127. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/codecov.yml +0 -0
  128. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/.claude/settings.local.json +0 -0
  129. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/DEBUGGING.md +0 -0
  130. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/adapters.html +0 -0
  131. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/README.md +0 -0
  132. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/c4-components-core.md +0 -0
  133. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/c4-containers.md +0 -0
  134. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/c4-context.md +0 -0
  135. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/architecture/c4-dynamic-install.md +0 -0
  136. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/bmad.md +0 -0
  137. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/distill.gif +0 -0
  138. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/doctor.gif +0 -0
  139. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/explain.gif +0 -0
  140. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/hooks.gif +0 -0
  141. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/install.gif +0 -0
  142. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/pulse.gif +0 -0
  143. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/search.gif +0 -0
  144. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/gifs/tap.gif +0 -0
  145. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/distill.tape +0 -0
  146. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/doctor.tape +0 -0
  147. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/explain.tape +0 -0
  148. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/hooks.tape +0 -0
  149. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/install.tape +0 -0
  150. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/pulse.tape +0 -0
  151. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/search.tape +0 -0
  152. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel/tapes/tap.tape +0 -0
  153. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/carousel.html +0 -0
  154. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/chat.html +0 -0
  155. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/code-review.md +0 -0
  156. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/commands.html +0 -0
  157. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/commit-audit.md +0 -0
  158. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/demo-index.json +0 -0
  159. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/demo.gif +0 -0
  160. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/demo.html +0 -0
  161. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/demo.tape +0 -0
  162. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/dependencies.md +0 -0
  163. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/design-roadmap.html +0 -0
  164. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/eval-latest.json +0 -0
  165. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/eval.html +0 -0
  166. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/index.html +0 -0
  167. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/langchain.html +0 -0
  168. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/mcp-hub.html +0 -0
  169. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/openssf-badge.md +0 -0
  170. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/openssf-playbook.md +0 -0
  171. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/rag-architecture.md +0 -0
  172. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D01.md +0 -0
  173. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D02.md +0 -0
  174. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D03.md +0 -0
  175. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D04.md +0 -0
  176. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D05.md +0 -0
  177. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D06.md +0 -0
  178. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D07.md +0 -0
  179. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D08.md +0 -0
  180. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D09.md +0 -0
  181. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D10.md +0 -0
  182. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D11.md +0 -0
  183. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D12.md +0 -0
  184. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D13.md +0 -0
  185. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D14.md +0 -0
  186. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D15.md +0 -0
  187. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D16.md +0 -0
  188. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D17.md +0 -0
  189. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D18.md +0 -0
  190. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D19.md +0 -0
  191. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D20.md +0 -0
  192. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D21.md +0 -0
  193. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D22.md +0 -0
  194. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D23.md +0 -0
  195. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D24.md +0 -0
  196. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D25.md +0 -0
  197. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D26.md +0 -0
  198. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/BOOST-D27.md +0 -0
  199. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  200. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  201. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  202. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  203. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  204. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  205. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  206. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  207. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  208. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  209. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  210. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  211. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  212. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  213. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  214. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  215. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/boost-first-rule.md +0 -0
  216. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  217. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  218. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/branch-current-gate.md +0 -0
  219. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  220. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  221. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  222. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  223. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  224. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  225. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  226. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  227. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  228. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  229. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  230. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  231. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  232. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  233. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/cli-command-audit.md +0 -0
  234. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  235. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  236. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  237. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  238. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/command-carousel-page.md +0 -0
  239. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  240. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  241. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  242. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  243. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  244. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  245. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  246. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  247. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  248. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  249. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  250. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  251. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  252. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  253. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  254. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  255. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  256. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  257. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  258. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  259. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  260. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  261. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  262. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  263. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  264. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  265. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  266. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  267. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  268. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  269. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  270. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  271. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  272. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  273. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  274. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  275. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  276. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  277. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  278. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  279. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  280. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  281. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  282. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  283. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  284. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  285. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  286. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  287. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  288. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  289. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  290. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  291. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  292. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/github-community-health-files.md +0 -0
  293. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  294. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  295. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  296. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  297. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  298. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  299. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  300. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  301. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  302. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  303. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  304. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  305. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  306. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  307. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  308. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  309. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  310. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  311. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  312. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  313. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  314. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  315. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  316. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  317. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  318. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  319. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  320. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  321. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  322. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  323. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  324. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  325. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  326. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  327. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  328. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  329. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  330. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  331. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  332. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  333. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  334. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  335. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  336. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  337. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  338. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  339. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  340. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  341. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  342. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  343. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  344. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  345. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  346. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  347. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  348. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  349. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  350. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  351. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  352. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  353. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  354. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  355. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  356. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  357. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  358. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  359. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  360. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  361. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  362. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  363. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  364. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  365. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  366. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  367. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  368. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  369. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/openssf-playbook.md +0 -0
  370. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/openssf-silver.md +0 -0
  371. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  372. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  373. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  374. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  375. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  376. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  377. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  378. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  379. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  380. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  381. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  382. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  383. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  384. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  385. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  386. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  387. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  388. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  389. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  390. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  391. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  392. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  393. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  394. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  395. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  396. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  397. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  398. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  399. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  400. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  401. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  402. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  403. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/relicence-apache-2.md +0 -0
  404. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  405. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  406. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  407. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  408. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  409. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  410. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  411. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  412. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  413. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  414. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  415. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  416. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  417. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  418. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  419. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  420. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  421. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  422. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  423. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  424. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  425. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  426. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  427. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  428. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  429. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  430. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  431. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  432. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  433. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  434. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  435. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  436. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  437. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  438. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  439. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  440. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  441. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  442. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  443. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  444. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  445. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  446. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  447. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  448. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  449. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  450. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  451. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  452. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  453. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  454. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  455. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  456. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  457. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  458. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  459. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  460. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  461. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  462. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  463. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  464. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  465. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  466. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  467. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  468. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  469. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  470. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  471. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  472. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  473. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  474. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  475. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  476. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  477. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  478. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  479. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  480. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  481. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  482. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  483. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  484. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  485. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/workspace-scope-install.md +0 -0
  486. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/zip-strict-audit.md +0 -0
  487. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  488. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  489. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/security-design.md +0 -0
  490. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/semantic-search.md +0 -0
  491. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  492. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/verifying-releases.md +0 -0
  493. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/meta.md +0 -0
  494. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/openvex.json +0 -0
  495. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  496. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  497. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  498. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  499. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/eslint.config.mjs +0 -0
  500. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/README.md +0 -0
  501. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/__init__.py +0 -0
  502. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/baseline.json +0 -0
  503. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/faithfulness.py +0 -0
  504. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/golden_set.json +0 -0
  505. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/make_corpus.py +0 -0
  506. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/make_golden.py +0 -0
  507. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/metrics.py +0 -0
  508. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/publish_golden_dataset.py +0 -0
  509. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/evals/run_evals.py +0 -0
  510. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/examples/README.md +0 -0
  511. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/examples/adapt-demo.sh +0 -0
  512. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/examples/boost-run-prototype.sh +0 -0
  513. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/index.html +0 -0
  514. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/noxfile.py +0 -0
  515. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/pyproject.toml +0 -0
  516. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/coverage-tools.in +0 -0
  517. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/coverage-tools.txt +0 -0
  518. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/lint-tools.in +0 -0
  519. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/lint-tools.txt +0 -0
  520. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/mutation-tools.in +0 -0
  521. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/mutation-tools.txt +0 -0
  522. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/platform-pins.lock +0 -0
  523. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/release-tools.in +0 -0
  524. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/release-tools.txt +0 -0
  525. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/test-tools.in +0 -0
  526. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/requirements/test-tools.txt +0 -0
  527. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/a11y_check.py +0 -0
  528. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/add_spdx_headers.py +0 -0
  529. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/bench_cli.sh +0 -0
  530. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_command_reference.py +0 -0
  531. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_demo_index.py +0 -0
  532. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_registries.py +0 -0
  533. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_roadmap.py +0 -0
  534. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_scale_corpus.py +0 -0
  535. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/build_vex.py +0 -0
  536. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_anchors.py +0 -0
  537. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_branch_current.py +0 -0
  538. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_dco.py +0 -0
  539. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_licenses.py +0 -0
  540. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_reproducible.py +0 -0
  541. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/check_required_checks.py +0 -0
  542. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/ensure_eval_corpus.sh +0 -0
  543. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_corpus.py +0 -0
  544. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_explain.py +0 -0
  545. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_gate.py +0 -0
  546. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_recommend.py +0 -0
  547. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_retrieval.py +0 -0
  548. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_stats_summary.py +0 -0
  549. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/eval_tools.py +0 -0
  550. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/import_budget.py +0 -0
  551. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/lock_toolchain.py +0 -0
  552. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/measure_registry.py +0 -0
  553. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/mutation_gate.py +0 -0
  554. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/mutation_shards.py +0 -0
  555. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/mutation_weights.json +0 -0
  556. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/normalize_sdist.py +0 -0
  557. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/page_budget.py +0 -0
  558. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/perf_gate.py +0 -0
  559. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/post_deploy_smoke.py +0 -0
  560. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/publish_eval_json.py +0 -0
  561. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/publish_shards.py +0 -0
  562. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/release_guard.py +0 -0
  563. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/release_preflight.py +0 -0
  564. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/serve_docs.py +0 -0
  565. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/scripts/shard_plan.py +0 -0
  566. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/setup.cfg +0 -0
  567. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/sonar-project.properties +0 -0
  568. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/style/README.md +0 -0
  569. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/style/boost.css +0 -0
  570. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/style/boost.js +0 -0
  571. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/style/demo.html +0 -0
  572. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/adapt.feature +0 -0
  573. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/browse.feature +0 -0
  574. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/count.feature +0 -0
  575. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/discover.feature +0 -0
  576. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/doctor.feature +0 -0
  577. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/environment.py +0 -0
  578. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/explain.feature +0 -0
  579. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/index.feature +0 -0
  580. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/install.feature +0 -0
  581. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/list.feature +0 -0
  582. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/mcp.feature +0 -0
  583. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/search.feature +0 -0
  584. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/steps/cli_steps.py +0 -0
  585. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/steps/discovery_steps.py +0 -0
  586. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/steps/mcp_steps.py +0 -0
  587. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/bdd/features/steps/quality_steps.py +0 -0
  588. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/conftest.py +0 -0
  589. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/baseline.json +0 -0
  590. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/explain.jsonl +0 -0
  591. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  592. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/golden-natural.jsonl +0 -0
  593. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/golden.jsonl +0 -0
  594. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/recommend.jsonl +0 -0
  595. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/taps-scale.txt +0 -0
  596. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/taps.txt +0 -0
  597. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/eval/tool_calls.jsonl +0 -0
  598. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_bmad_all_hosts.py +0 -0
  599. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_capabilities_policy.py +0 -0
  600. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_adapt.py +0 -0
  601. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_bmad.py +0 -0
  602. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_catalog.py +0 -0
  603. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_chat.py +0 -0
  604. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_configuration.py +0 -0
  605. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_discovery.py +0 -0
  606. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_hooks.py +0 -0
  607. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_hooks_gemini.py +0 -0
  608. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_info.py +0 -0
  609. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_intelligence.py +0 -0
  610. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_pane_width.py +0 -0
  611. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_pkg.py +0 -0
  612. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_quality.py +0 -0
  613. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_quickstart.py +0 -0
  614. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_tap_pins.py +0 -0
  615. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_taps.py +0 -0
  616. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_cli_team.py +0 -0
  617. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_everyday_loop.py +0 -0
  618. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_integrity_enforce.py +0 -0
  619. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_kind_conformance.py +0 -0
  620. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_property_parsers.py +0 -0
  621. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_run.py +0 -0
  622. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_tap_signing.py +0 -0
  623. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/functional/test_workspace_scope.py +0 -0
  624. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/README.md +0 -0
  625. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  626. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  627. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  628. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  629. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  630. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  631. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  632. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  633. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  634. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  635. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  636. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  637. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  638. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  639. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  640. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  641. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  642. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  643. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  644. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  645. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  646. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  647. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  648. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/fuzz_frontmatter.py +0 -0
  649. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/fuzz/fuzz_registry.py +0 -0
  650. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/langchain/conftest.py +0 -0
  651. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/langchain/test_graph.py +0 -0
  652. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/langchain/test_loader.py +0 -0
  653. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/langchain/test_retriever.py +0 -0
  654. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/make_fixture.py +0 -0
  655. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/perf/test_benchmarks.py +0 -0
  656. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/smoke.sh +0 -0
  657. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_a11y_check.py +0 -0
  658. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_action_pin_lockstep.py +0 -0
  659. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_adapters.py +0 -0
  660. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_adapters_multi.py +0 -0
  661. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_adapters_runner.py +0 -0
  662. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_agents.py +0 -0
  663. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_ai.py +0 -0
  664. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_aihost.py +0 -0
  665. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_bmad_core.py +0 -0
  666. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_boost_first_offer.py +0 -0
  667. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_bootstrap.py +0 -0
  668. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_branch_current.py +0 -0
  669. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_browse.py +0 -0
  670. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_builtin.py +0 -0
  671. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_capabilities.py +0 -0
  672. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_catalog.py +0 -0
  673. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_catalogbundle.py +0 -0
  674. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_chat.py +0 -0
  675. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_check_anchors.py +0 -0
  676. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_check_dco.py +0 -0
  677. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_check_licenses.py +0 -0
  678. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_check_reproducible.py +0 -0
  679. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_claude_settings.py +0 -0
  680. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_clean_internal_cache.py +0 -0
  681. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_cli_update_shards.py +0 -0
  682. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_cliparse.py +0 -0
  683. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_codeql_analysis_key.py +0 -0
  684. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_command_reference_fresh.py +0 -0
  685. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_community_health_files.py +0 -0
  686. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_compact.py +0 -0
  687. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_complete.py +0 -0
  688. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_complete_rc_block.py +0 -0
  689. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_config.py +0 -0
  690. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_content_dedupe.py +0 -0
  691. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_content_identity.py +0 -0
  692. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_crash_redaction.py +0 -0
  693. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dedup_trust.py +0 -0
  694. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_demo_index.py +0 -0
  695. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense.py +0 -0
  696. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  697. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_embed_dedupe.py +0 -0
  698. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_entry_reuse.py +0 -0
  699. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_fallback.py +0 -0
  700. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_fix_hint.py +0 -0
  701. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_progress.py +0 -0
  702. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_quantized.py +0 -0
  703. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_ready_order.py +0 -0
  704. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_shard_real_schema.py +0 -0
  705. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  706. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_shards.py +0 -0
  707. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_status.py +0 -0
  708. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_status_cheap.py +0 -0
  709. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dense_vector_dedupe.py +0 -0
  710. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_dependabot_config.py +0 -0
  711. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_docs_pages_linked.py +0 -0
  712. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_docsite_chrome.py +0 -0
  713. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_ed25519.py +0 -0
  714. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_embed.py +0 -0
  715. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_embed_local.py +0 -0
  716. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_embed_truncated_response.py +0 -0
  717. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_entry_key.py +0 -0
  718. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_errors_and_cli_table.py +0 -0
  719. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_baseline.py +0 -0
  720. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_corpus.py +0 -0
  721. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_faithfulness.py +0 -0
  722. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_gate.py +0 -0
  723. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_grading.py +0 -0
  724. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_metrics.py +0 -0
  725. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_stats_summary.py +0 -0
  726. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_tools.py +0 -0
  727. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_eval_tools_probe.py +0 -0
  728. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  729. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_faithfulness.py +0 -0
  730. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_frontmatter.py +0 -0
  731. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_fuzz_targets.py +0 -0
  732. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  733. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gitleaks_config.py +0 -0
  734. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gitutil.py +0 -0
  735. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gitutil_lfs.py +0 -0
  736. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gitutil_sparse.py +0 -0
  737. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_gstack_coexistence.py +0 -0
  738. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_hook_settings_hosts.py +0 -0
  739. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_hookhost.py +0 -0
  740. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_imperative.py +0 -0
  741. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_import_budget.py +0 -0
  742. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_injectscan.py +0 -0
  743. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_install_permission_error.py +0 -0
  744. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_installscan.py +0 -0
  745. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_integrity.py +0 -0
  746. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_journal.py +0 -0
  747. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_langchain_packaging.py +0 -0
  748. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_link_ownership.py +0 -0
  749. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_localembed.py +0 -0
  750. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_localembed_e2e.py +0 -0
  751. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_lockfile.py +0 -0
  752. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_logs.py +0 -0
  753. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_marketing_counts.py +0 -0
  754. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcp.py +0 -0
  755. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcp_install_scan.py +0 -0
  756. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcp_read.py +0 -0
  757. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcpdecl.py +0 -0
  758. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mcphost.py +0 -0
  759. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_measure_registry.py +0 -0
  760. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_minisign.py +0 -0
  761. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mutation_hardening.py +0 -0
  762. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mutation_shards.py +0 -0
  763. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mutation_subfile_shards.py +0 -0
  764. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_mutmut_source_paths.py +0 -0
  765. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_nethttp.py +0 -0
  766. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_normalize_sdist.py +0 -0
  767. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_output.py +0 -0
  768. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_page_budget.py +0 -0
  769. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_paths.py +0 -0
  770. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_perf_gate.py +0 -0
  771. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_pkg_confusions.py +0 -0
  772. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_pkg_injection.py +0 -0
  773. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_pkg_secrets.py +0 -0
  774. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_platform_pins.py +0 -0
  775. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_policy.py +0 -0
  776. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_post_deploy_smoke.py +0 -0
  777. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_project_mcp_sidecar.py +0 -0
  778. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_projectlock.py +0 -0
  779. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_provenance.py +0 -0
  780. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_publish_golden_dataset.py +0 -0
  781. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rag.py +0 -0
  782. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rag_fastpath.py +0 -0
  783. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rag_fusion.py +0 -0
  784. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registries_fresh.py +0 -0
  785. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registry.py +0 -0
  786. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registry_categories.py +0 -0
  787. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registry_control_chars.py +0 -0
  788. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_registry_parallel.py +0 -0
  789. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_release_guard.py +0 -0
  790. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_release_preflight.py +0 -0
  791. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_required_checks.py +0 -0
  792. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rerank_cache.py +0 -0
  793. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_resolve.py +0 -0
  794. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_roadmap_fresh.py +0 -0
  795. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_rules.py +0 -0
  796. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_scale_corpus.py +0 -0
  797. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_scopes.py +0 -0
  798. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_secretscan.py +0 -0
  799. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_selfupdate.py +0 -0
  800. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_serve.py +0 -0
  801. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_serve_docs.py +0 -0
  802. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shard_plan.py +0 -0
  803. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shards.py +0 -0
  804. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shards_incremental.py +0 -0
  805. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shards_ingest.py +0 -0
  806. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_shards_matrix.py +0 -0
  807. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_smoke_covers_every_command.py +0 -0
  808. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_spdx_headers.py +0 -0
  809. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_spin.py +0 -0
  810. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_stackprobe.py +0 -0
  811. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_staleness.py +0 -0
  812. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_store.py +0 -0
  813. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_store_materialize.py +0 -0
  814. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_sync_blocked_links.py +0 -0
  815. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  816. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_tap_pins.py +0 -0
  817. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_token_parity.py +0 -0
  818. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_toolchain_lock.py +0 -0
  819. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_trustaudit.py +0 -0
  820. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_typosquat.py +0 -0
  821. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_updatediff.py +0 -0
  822. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_util.py +0 -0
  823. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_version.py +0 -0
  824. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_version_tags.py +0 -0
  825. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_vex.py +0 -0
  826. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_visual_harness_flags.py +0 -0
  827. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflow_concurrency.py +0 -0
  828. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  829. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  830. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflow_timeouts.py +0 -0
  831. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_workflows.py +0 -0
  832. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  833. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/visual/a11y_check.mjs +0 -0
  834. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/visual/console_check.mjs +0 -0
  835. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/visual/package-lock.json +0 -0
  836. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/visual/package.json +0 -0
  837. {boost_skill_cli-1.2.67 → boost_skill_cli-1.2.69}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.67
3
+ Version: 1.2.69
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -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.67'
22
- __version_tuple__ = version_tuple = (1, 2, 67)
21
+ __version__ = version = '1.2.69'
22
+ __version_tuple__ = version_tuple = (1, 2, 69)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.67
3
+ Version: 1.2.69
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -250,6 +250,7 @@ docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md
250
250
  docs/roadmap/items/crash-listing-branch-untested.md
251
251
  docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md
252
252
  docs/roadmap/items/crash-reports-leak-api-keys.md
253
+ docs/roadmap/items/delay-true-defeats-the-log-suppress.md
253
254
  docs/roadmap/items/demo-cannot-open-its-own-pr.md
254
255
  docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md
255
256
  docs/roadmap/items/demo-workflow-cancels-other-prs.md
@@ -363,6 +364,7 @@ docs/roadmap/items/mutation-hardening-core-store-py.md
363
364
  docs/roadmap/items/mutation-shard-floor-is-one-file.md
364
365
  docs/roadmap/items/mypy-strict-mode-for-commands.md
365
366
  docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md
367
+ docs/roadmap/items/near-identical-copies-still-eat-the-slots.md
366
368
  docs/roadmap/items/negative-limit-inverts-log-pulse-output.md
367
369
  docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md
368
370
  docs/roadmap/items/one-command-every-env-nox.md
@@ -0,0 +1,52 @@
1
+ ---
2
+ id: delay-true-defeats-the-log-suppress
3
+ board: code
4
+ section: planned
5
+ status: planned
6
+ category: Health · Robustness
7
+ complexity: S
8
+ impact: Medium
9
+ wow: 2
10
+ note: the suppress guards construction; delay=True moves the failure to emit
11
+ order: 130
12
+ title: A best-effort log handler prints a traceback over every command's output
13
+ ---
14
+ <code>logs.configure</code> says what it means to do &mdash; <em>&ldquo;File handler &mdash; always
15
+ DEBUG, best-effort (never break the CLI over a log)&rdquo;</em> &mdash; and wraps the handler in
16
+ <code>contextlib.suppress(OSError)</code> to guarantee it. The guarantee does not hold, and the
17
+ reason is one keyword inside the block: <code>with contextlib.suppress(OSError):</code> &middot;
18
+ <code>paths.logs_dir().mkdir(parents=True, exist_ok=True)</code> &middot;
19
+ <code>fh = logging.handlers.RotatingFileHandler(log_path(), maxBytes=MAX_BYTES,
20
+ backupCount=BACKUP_COUNT, encoding="utf-8", <b>delay=True</b>)</code>.
21
+
22
+ <code>delay=True</code> means the file is <b>not opened during construction</b>. It is opened on the
23
+ first <code>emit()</code>, inside <code>shouldRollover</code> &mdash; which happens later, on a
24
+ different stack, outside the <code>suppress</code>. So the <code>OSError</code> the block exists to
25
+ swallow is relocated to exactly where nothing is catching it. <code>logging.raiseExceptions</code>
26
+ is left at its default <code>True</code>, so Python's logging module prints
27
+ <code>--- Logging error ---</code> and a full traceback to stderr instead.
28
+
29
+ <b>Observed on a real machine</b>, with the log at <code>rw-r--r--</code> owned by the invoking user
30
+ and the directory writable, under a harness whose filesystem policy did not include
31
+ <code>~/.boost/logs</code>. Every <code>boost</code> command emitted <b>two</b> tracebacks &mdash;
32
+ one from <code>log_invocation</code> at <code>cli.py:311</code> and one from
33
+ <code>log_completion</code> at <code>cli.py:343</code> &mdash; roughly thirty lines of Python
34
+ internals wrapped around the fifteen lines of search results the user actually asked for. The
35
+ command itself returned <code>rc=0</code>. Nothing was broken except the output.
36
+
37
+ <b>Two things to get right.</b> First, catching the error is not the same as reporting it: a handler
38
+ that silently swallows every write means a user whose diagnostics have been dead for months learns
39
+ nothing, which is the failure <code>doctor</code>'s log check already exists to prevent. The right
40
+ shape is to fail <em>quietly per emit</em> and let <code>doctor</code> stay the surface that says
41
+ so &mdash; it already reports <code>&ldquo;diagnostic log &hellip; is not writable &mdash; every
42
+ invocation is failing to record&rdquo;</code>, which was accurate the whole time this was spewing
43
+ tracebacks. Second, <code>logging.raiseExceptions</code> is a <b>module-global</b>: boost sets it
44
+ for every library in the process, so flipping it wholesale is louder than it looks. Overriding
45
+ <code>handleError</code> on boost's own handler is the scoped version of the same fix.
46
+
47
+ <b>Worth checking while here</b>: whether <code>doctor</code>'s writability check and the handler
48
+ agree about what &ldquo;writable&rdquo; means. The check passed (<code>&#10003; diagnostic log at
49
+ ~/.boost/logs/boost.log</code>) in the same session where the handler was failing on every emit,
50
+ because the two ask different questions &mdash; one about the path's mode bits, the other about
51
+ what an <code>open()</code> actually returns. A health check that reports green while the thing it
52
+ checks fails on every invocation is the more expensive half of this card.
@@ -208,3 +208,12 @@ bodies cannot merge two genuinely different skills, which name-clustering would
208
208
  vendors its own skills produced an unanswerable disambiguation prompt. Tracked separately in
209
209
  <code>resolve-vendored-duplicate-copies</code>.
210
210
 
211
+ <b>The remainder now has its own card, and it is not a rounding error.</b> This card's last open
212
+ item &mdash; near-identical rather than byte-identical clustering &mdash; was left as a footnote
213
+ under a <code>shipped</code> status, described by the 0.60 residual duplicate slots per query. On a
214
+ real 466-tap install a single query (<code>exa search</code>) puts the same skill in <b>10 of 10
215
+ slots</b>, in Japanese, Chinese and five English phrasings, every copy passing content-hash dedup
216
+ correctly because the bodies genuinely differ. The averaged residual hid a per-query maximum an
217
+ order of magnitude larger. See
218
+ <a href="#near-identical-copies-still-eat-the-slots">near-identical copies still eat the slots</a>.
219
+
@@ -0,0 +1,69 @@
1
+ ---
2
+ id: near-identical-copies-still-eat-the-slots
3
+ board: code
4
+ section: planned
5
+ status: planned
6
+ category: Search · Ranking
7
+ complexity: M
8
+ impact: High
9
+ wow: 4
10
+ note: 10 of 10 slots on a real 466-tap install, all past byte-identical dedup
11
+ order: 131
12
+ title: Near-identical copies survive content-hash dedup and take the whole result page
13
+ ---
14
+ <a href="#near-duplicate-items-eat-the-result-slots">Content-hash dedup</a> shipped and worked:
15
+ <code>rag.dedupe_by_content</code> took duplicate result slots from <b>4.94 to 0.60 per query</b>
16
+ over a 77-tap corpus. That card closed naming one thing still open &mdash; <em>near-identical
17
+ rather than byte-identical clustering, where <code>core/typosquat.py</code>'s confusion machinery
18
+ would apply</em> &mdash; and buried it under a <code>shipped</code> status where nobody would claim
19
+ it. This card is that remainder, with a measurement that makes it look considerably worse than
20
+ &ldquo;refinement&rdquo;.
21
+
22
+ <b>Observed on a real 466-tap install</b> with hybrid RRF serving (658,131 chunks): for the query
23
+ <code>exa search</code>, every one of the top ten rows is <code>exa-search</code>, and the
24
+ descriptions are what give the
25
+ shape away &mdash; one Japanese (<code>Exa MCPによるウェブ、コード、企業調査</code>), two Chinese
26
+ (<code>通过Exa MCP进行神经搜索</code>), five English variants of <code>Neural search via Exa MCP</code>,
27
+ plus <code>Use Exa MCP for current web&hellip;</code> and <code>AI-powered web search&hellip;</code>.
28
+ All ten are <code>★ curated</code>. The footer reads
29
+ <code>51 matches &middot; ranked by hybrid RRF (BM25 + dense)</code>.
30
+
31
+ <b>Every one of those passed dedup correctly.</b> They are not byte-identical: they are the same
32
+ skill in Japanese, in Chinese, and in five English phrasings across different registries. The body
33
+ digest differs, so <code>dedupe_by_content</code> keeps them all &mdash; which is exactly the
34
+ behaviour <code>#366</code> proved must be preserved, since two entries sharing a name can be
35
+ genuinely different rules. The shipped fix is not misbehaving. It simply does not reach this shape.
36
+
37
+ <b>What the 0.60 residual actually was.</b> The prior card described its leftover as &ldquo;entries
38
+ sharing a <em>name</em> whose bodies genuinely differ, which must stay separate&rdquo; &mdash; true
39
+ as stated, and it reads as a rounding error. At 466 taps the same residual is a full result page.
40
+ The gap between 0.60 and 10.0 is worth understanding before designing anything: the 77-tap
41
+ measurement used 50 natural-language queries averaged, and an <em>average</em> hides the shape here.
42
+ Duplicate pressure was already known to be a step function of <em>which</em> registries are tapped
43
+ rather than how many; near-identical pressure looks like a step function of <b>which query</b> &mdash;
44
+ harmless across a query set, total on any query that lands on a widely-mirrored skill. Re-measure
45
+ per-query maxima, not means.
46
+
47
+ <b>The hard part is the safety proof, not the clustering.</b> Content hashing was adoptable because
48
+ one count settled it: of 14,153 distinct bodies, clusters spanning more than one name numbered
49
+ <b>zero</b>, so collapsing could not merge two different skills. Near-identical clustering has no
50
+ such free proof &mdash; any similarity threshold loose enough to merge a Japanese translation with
51
+ its English original is loose enough to merge two genuinely different skills that share boilerplate.
52
+ Establish the equivalent bound first (over a real corpus, at the chosen threshold, count clusters
53
+ spanning more than one <em>meaning</em>) or the fix trades a visible problem for a silent one.
54
+
55
+ <b>Three things to get right.</b> <em>Translations are the motivating case and the hardest</em>: they
56
+ share almost no tokens with the original, so token-overlap similarity will not find them while an
57
+ embedding will &mdash; and the vectors are already on disk, which makes this cheaper here than it
58
+ would be anywhere else. <em>Collapse before <code>k</code></em>, and at both the
59
+ <code>retrieve</code> and <code>retrieve_any</code> seams, for the reason the shipped dedup already
60
+ documents: fusion reintroduces copies either engine dropped, because the copies are distinct
61
+ <code>(tap, skill_md)</code> keys and RRF has no reason to treat them as one. <em>The existing
62
+ quality prior carries over unchanged</em> &mdash; <code>rag.source_rank</code> orders on the user's
63
+ <code>curated</code> flag first and shipped <code>confidence</code> second, and choosing among
64
+ near-identical copies is the same question as choosing among identical ones: where should the user
65
+ install from.
66
+
67
+ <b>Not to be confused with <code>#629</code></b>, which deduplicated vector <em>storage</em> (one
68
+ row per distinct embedding, 39.7% repeats reclaimed). That is a disk-size fix beneath the index and
69
+ changes no ranking; this is about which rows reach the user's screen.
@@ -132,8 +132,8 @@
132
132
  <!-- ROADMAP:stats -->
133
133
  <div class="stat"><b>20</b><span>Shipped</span></div>
134
134
  <div class="stat"><b>1</b><span>Next up</span></div>
135
- <div class="stat"><b>7</b><span>Planned</span></div>
136
- <div class="stat"><b>291</b><span>Loop finds</span></div>
135
+ <div class="stat"><b>9</b><span>Planned</span></div>
136
+ <div class="stat"><b>293</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -1010,6 +1010,123 @@ published version works against PyPI as it stands today.</p>
1010
1010
  <span class="m">declined — superseded by shipping the integration inside the boost-skill-cli wheel (see langchain-in-the-wheel)</span>
1011
1011
  </div>
1012
1012
  </article>
1013
+
1014
+ <article class="cap rcard" id="delay-true-defeats-the-log-suppress">
1015
+ <div class="head"><span class="pill planned">Planned</span><span class="cat">Health · Robustness</span></div>
1016
+ <h3>A best-effort log handler prints a traceback over every command's output</h3>
1017
+ <p><code>logs.configure</code> says what it means to do &mdash; <em>&ldquo;File handler &mdash; always
1018
+ DEBUG, best-effort (never break the CLI over a log)&rdquo;</em> &mdash; and wraps the handler in
1019
+ <code>contextlib.suppress(OSError)</code> to guarantee it. The guarantee does not hold, and the
1020
+ reason is one keyword inside the block: <code>with contextlib.suppress(OSError):</code> &middot;
1021
+ <code>paths.logs_dir().mkdir(parents=True, exist_ok=True)</code> &middot;
1022
+ <code>fh = logging.handlers.RotatingFileHandler(log_path(), maxBytes=MAX_BYTES,
1023
+ backupCount=BACKUP_COUNT, encoding="utf-8", <b>delay=True</b>)</code>.
1024
+
1025
+ <code>delay=True</code> means the file is <b>not opened during construction</b>. It is opened on the
1026
+ first <code>emit()</code>, inside <code>shouldRollover</code> &mdash; which happens later, on a
1027
+ different stack, outside the <code>suppress</code>. So the <code>OSError</code> the block exists to
1028
+ swallow is relocated to exactly where nothing is catching it. <code>logging.raiseExceptions</code>
1029
+ is left at its default <code>True</code>, so Python's logging module prints
1030
+ <code>--- Logging error ---</code> and a full traceback to stderr instead.
1031
+
1032
+ <b>Observed on a real machine</b>, with the log at <code>rw-r--r--</code> owned by the invoking user
1033
+ and the directory writable, under a harness whose filesystem policy did not include
1034
+ <code>~/.boost/logs</code>. Every <code>boost</code> command emitted <b>two</b> tracebacks &mdash;
1035
+ one from <code>log_invocation</code> at <code>cli.py:311</code> and one from
1036
+ <code>log_completion</code> at <code>cli.py:343</code> &mdash; roughly thirty lines of Python
1037
+ internals wrapped around the fifteen lines of search results the user actually asked for. The
1038
+ command itself returned <code>rc=0</code>. Nothing was broken except the output.
1039
+
1040
+ <b>Two things to get right.</b> First, catching the error is not the same as reporting it: a handler
1041
+ that silently swallows every write means a user whose diagnostics have been dead for months learns
1042
+ nothing, which is the failure <code>doctor</code>'s log check already exists to prevent. The right
1043
+ shape is to fail <em>quietly per emit</em> and let <code>doctor</code> stay the surface that says
1044
+ so &mdash; it already reports <code>&ldquo;diagnostic log &hellip; is not writable &mdash; every
1045
+ invocation is failing to record&rdquo;</code>, which was accurate the whole time this was spewing
1046
+ tracebacks. Second, <code>logging.raiseExceptions</code> is a <b>module-global</b>: boost sets it
1047
+ for every library in the process, so flipping it wholesale is louder than it looks. Overriding
1048
+ <code>handleError</code> on boost's own handler is the scoped version of the same fix.
1049
+
1050
+ <b>Worth checking while here</b>: whether <code>doctor</code>'s writability check and the handler
1051
+ agree about what &ldquo;writable&rdquo; means. The check passed (<code>&#10003; diagnostic log at
1052
+ ~/.boost/logs/boost.log</code>) in the same session where the handler was failing on every emit,
1053
+ because the two ask different questions &mdash; one about the path's mode bits, the other about
1054
+ what an <code>open()</code> actually returns. A health check that reports green while the thing it
1055
+ checks fails on every invocation is the more expensive half of this card.</p>
1056
+ <div class="meta">
1057
+ <span class="m">Complexity <b>S</b></span>
1058
+ <span class="m">Impact <b>Medium</b></span>
1059
+ <span class="m">Wow <b class="wow">★★</b></span>
1060
+ <span class="m">the suppress guards construction; delay=True moves the failure to emit</span>
1061
+ </div>
1062
+ </article>
1063
+
1064
+ <article class="cap rcard" id="near-identical-copies-still-eat-the-slots">
1065
+ <div class="head"><span class="pill planned">Planned</span><span class="cat">Search · Ranking</span></div>
1066
+ <h3>Near-identical copies survive content-hash dedup and take the whole result page</h3>
1067
+ <p><a href="#near-duplicate-items-eat-the-result-slots">Content-hash dedup</a> shipped and worked:
1068
+ <code>rag.dedupe_by_content</code> took duplicate result slots from <b>4.94 to 0.60 per query</b>
1069
+ over a 77-tap corpus. That card closed naming one thing still open &mdash; <em>near-identical
1070
+ rather than byte-identical clustering, where <code>core/typosquat.py</code>'s confusion machinery
1071
+ would apply</em> &mdash; and buried it under a <code>shipped</code> status where nobody would claim
1072
+ it. This card is that remainder, with a measurement that makes it look considerably worse than
1073
+ &ldquo;refinement&rdquo;.
1074
+
1075
+ <b>Observed on a real 466-tap install</b> with hybrid RRF serving (658,131 chunks): for the query
1076
+ <code>exa search</code>, every one of the top ten rows is <code>exa-search</code>, and the
1077
+ descriptions are what give the
1078
+ shape away &mdash; one Japanese (<code>Exa MCPによるウェブ、コード、企業調査</code>), two Chinese
1079
+ (<code>通过Exa MCP进行神经搜索</code>), five English variants of <code>Neural search via Exa MCP</code>,
1080
+ plus <code>Use Exa MCP for current web&hellip;</code> and <code>AI-powered web search&hellip;</code>.
1081
+ All ten are <code>★ curated</code>. The footer reads
1082
+ <code>51 matches &middot; ranked by hybrid RRF (BM25 + dense)</code>.
1083
+
1084
+ <b>Every one of those passed dedup correctly.</b> They are not byte-identical: they are the same
1085
+ skill in Japanese, in Chinese, and in five English phrasings across different registries. The body
1086
+ digest differs, so <code>dedupe_by_content</code> keeps them all &mdash; which is exactly the
1087
+ behaviour <code>#366</code> proved must be preserved, since two entries sharing a name can be
1088
+ genuinely different rules. The shipped fix is not misbehaving. It simply does not reach this shape.
1089
+
1090
+ <b>What the 0.60 residual actually was.</b> The prior card described its leftover as &ldquo;entries
1091
+ sharing a <em>name</em> whose bodies genuinely differ, which must stay separate&rdquo; &mdash; true
1092
+ as stated, and it reads as a rounding error. At 466 taps the same residual is a full result page.
1093
+ The gap between 0.60 and 10.0 is worth understanding before designing anything: the 77-tap
1094
+ measurement used 50 natural-language queries averaged, and an <em>average</em> hides the shape here.
1095
+ Duplicate pressure was already known to be a step function of <em>which</em> registries are tapped
1096
+ rather than how many; near-identical pressure looks like a step function of <b>which query</b> &mdash;
1097
+ harmless across a query set, total on any query that lands on a widely-mirrored skill. Re-measure
1098
+ per-query maxima, not means.
1099
+
1100
+ <b>The hard part is the safety proof, not the clustering.</b> Content hashing was adoptable because
1101
+ one count settled it: of 14,153 distinct bodies, clusters spanning more than one name numbered
1102
+ <b>zero</b>, so collapsing could not merge two different skills. Near-identical clustering has no
1103
+ such free proof &mdash; any similarity threshold loose enough to merge a Japanese translation with
1104
+ its English original is loose enough to merge two genuinely different skills that share boilerplate.
1105
+ Establish the equivalent bound first (over a real corpus, at the chosen threshold, count clusters
1106
+ spanning more than one <em>meaning</em>) or the fix trades a visible problem for a silent one.
1107
+
1108
+ <b>Three things to get right.</b> <em>Translations are the motivating case and the hardest</em>: they
1109
+ share almost no tokens with the original, so token-overlap similarity will not find them while an
1110
+ embedding will &mdash; and the vectors are already on disk, which makes this cheaper here than it
1111
+ would be anywhere else. <em>Collapse before <code>k</code></em>, and at both the
1112
+ <code>retrieve</code> and <code>retrieve_any</code> seams, for the reason the shipped dedup already
1113
+ documents: fusion reintroduces copies either engine dropped, because the copies are distinct
1114
+ <code>(tap, skill_md)</code> keys and RRF has no reason to treat them as one. <em>The existing
1115
+ quality prior carries over unchanged</em> &mdash; <code>rag.source_rank</code> orders on the user's
1116
+ <code>curated</code> flag first and shipped <code>confidence</code> second, and choosing among
1117
+ near-identical copies is the same question as choosing among identical ones: where should the user
1118
+ install from.
1119
+
1120
+ <b>Not to be confused with <code>#629</code></b>, which deduplicated vector <em>storage</em> (one
1121
+ row per distinct embedding, 39.7% repeats reclaimed). That is a disk-size fix beneath the index and
1122
+ changes no ranking; this is about which rows reach the user's screen.</p>
1123
+ <div class="meta">
1124
+ <span class="m">Complexity <b>M</b></span>
1125
+ <span class="m hi">Impact <b>High</b></span>
1126
+ <span class="m">Wow <b class="wow">★★★★</b></span>
1127
+ <span class="m">10 of 10 slots on a real 466-tap install, all past byte-identical dedup</span>
1128
+ </div>
1129
+ </article>
1013
1130
  <!-- /ROADMAP:cards -->
1014
1131
 
1015
1132
  </div>
@@ -7327,7 +7444,16 @@ bodies cannot merge two genuinely different skills, which name-clustering would
7327
7444
 
7328
7445
  <b>Related follow-on:</b> the same duplicate shape reaches <code>resolve_one</code>, where a tap that
7329
7446
  vendors its own skills produced an unanswerable disambiguation prompt. Tracked separately in
7330
- <code>resolve-vendored-duplicate-copies</code>.</p></details>
7447
+ <code>resolve-vendored-duplicate-copies</code>.
7448
+
7449
+ <b>The remainder now has its own card, and it is not a rounding error.</b> This card's last open
7450
+ item &mdash; near-identical rather than byte-identical clustering &mdash; was left as a footnote
7451
+ under a <code>shipped</code> status, described by the 0.60 residual duplicate slots per query. On a
7452
+ real 466-tap install a single query (<code>exa search</code>) puts the same skill in <b>10 of 10
7453
+ slots</b>, in Japanese, Chinese and five English phrasings, every copy passing content-hash dedup
7454
+ correctly because the bodies genuinely differ. The averaged residual hid a per-query maximum an
7455
+ order of magnitude larger. See
7456
+ <a href="#near-identical-copies-still-eat-the-slots">near-identical copies still eat the slots</a>.</p></details>
7331
7457
  <div class="meta">
7332
7458
  <span class="m">Complexity <b>M</b></span>
7333
7459
  <span class="m hi">Impact <b>High</b></span>
@@ -27,6 +27,7 @@ satisfy.
27
27
  from __future__ import annotations
28
28
 
29
29
  import importlib.util
30
+ import re
30
31
  from pathlib import Path
31
32
 
32
33
  import pytest
@@ -110,6 +111,59 @@ class TestEveryBotPullRequestPassesTheDcoGate:
110
111
  "%s does not set `sign-commits: true`" % workflow)
111
112
 
112
113
 
114
+ class TestTheirPullRequestsCanActuallyRunChecks:
115
+ """A PR the default token opened cannot start the checks it is gated on.
116
+
117
+ GitHub suppresses workflow triggers for anything done with the repository's
118
+ own `GITHUB_TOKEN`, to stop a workflow re-triggering itself forever. So a
119
+ pull request these workflows open with it gets **no** `on: pull_request`
120
+ run: `ci.yml`'s twenty required checks never start, and branch protection
121
+ refuses the merge with "20 of 20 required status checks are expected".
122
+
123
+ That is not theoretical. #617 and #631 both sat unmergeable in exactly that
124
+ state, and #617's recording never reached main — the workflow had been
125
+ faithfully opening pull requests nobody could land.
126
+
127
+ Passing a token that belongs to an account rather than to the workflow is
128
+ the fix the action's own docs name as standard. The fallback to
129
+ `github.token` matters as much as the token: without it a fork, or this
130
+ repo before the secret exists, would fail the step outright rather than
131
+ degrade to the old behaviour.
132
+ """
133
+
134
+ @pytest.mark.parametrize("workflow,With", _pr_steps(),
135
+ ids=[w for w, _ in _pr_steps()])
136
+ def test_the_step_passes_an_explicit_token(self, workflow, With):
137
+ assert "token" in With, (
138
+ "%s opens a PR with the default GITHUB_TOKEN, so none of ci.yml's "
139
+ "required checks will run on it and branch protection can never "
140
+ "be satisfied" % workflow)
141
+
142
+ @pytest.mark.parametrize("workflow,With", _pr_steps(),
143
+ ids=[w for w, _ in _pr_steps()])
144
+ def test_that_token_is_not_just_the_default_again(self, workflow, With):
145
+ # `token: ${{ github.token }}` would satisfy the test above and change
146
+ # nothing at all.
147
+ tok = str(With.get("token", ""))
148
+ assert "secrets." in tok, tok
149
+
150
+ @pytest.mark.parametrize("workflow,With", _pr_steps(),
151
+ ids=[w for w, _ in _pr_steps()])
152
+ def test_it_still_works_where_the_secret_does_not_exist(self, workflow,
153
+ With):
154
+ # A fork has no secrets. Without a fallback the step fails there, which
155
+ # trades an unmergeable PR for a red workflow — strictly worse.
156
+ tok = str(With.get("token", ""))
157
+ assert "||" in tok and "github.token" in tok, tok
158
+
159
+ def test_every_pr_opening_workflow_uses_the_same_secret(self):
160
+ # One name, so creating the secret fixes all five at once and a typo in
161
+ # one cannot leave a single workflow silently on the old behaviour.
162
+ names = {re.search(r"secrets\.([A-Z_0-9]+)", str(w.get("token", ""))).group(1)
163
+ for _n, w in _pr_steps() if "secrets." in str(w.get("token", ""))}
164
+ assert len(names) == 1, names
165
+
166
+
113
167
  class TestTheDefaultIsRecordedAsTheBug:
114
168
  """Without this the fix above reads as an arbitrary preference."""
115
169
 
File without changes
File without changes