boost-skill-cli 1.2.66__tar.gz → 1.2.68__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.66/boost_skill_cli.egg-info → boost_skill_cli-1.2.68}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/bmad.py +22 -2
  4. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  5. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  6. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +12 -0
  7. boost_skill_cli-1.2.68/docs/roadmap/items/delay-true-defeats-the-log-suppress.md +52 -0
  8. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +9 -0
  9. boost_skill_cli-1.2.68/docs/roadmap/items/near-identical-copies-still-eat-the-slots.md +69 -0
  10. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap.html +141 -3
  11. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_bmad_core.py +55 -0
  12. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.gitattributes +0 -0
  13. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.gitignore +0 -0
  14. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.gitleaks.toml +0 -0
  15. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.htmlvalidate.json +0 -0
  16. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.lighthouserc.json +0 -0
  17. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.lycheeignore +0 -0
  18. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.markdownlint-cli2.jsonc +0 -0
  19. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.pre-commit-config.yaml +0 -0
  20. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.stylelintrc.json +0 -0
  21. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.vale/styles/boost/AIWriting.yml +0 -0
  22. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.vale/styles/boost/Terminology.yml +0 -0
  23. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  24. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/.vale.ini +0 -0
  25. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/CLAUDE.md +0 -0
  26. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/CODE_OF_CONDUCT.md +0 -0
  27. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/CONTRIBUTING.md +0 -0
  28. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/DCO +0 -0
  29. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/GOVERNANCE.md +0 -0
  30. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/LICENSE +0 -0
  31. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/MAINTAINERS.md +0 -0
  32. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/MANIFEST.in +0 -0
  33. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/Makefile +0 -0
  34. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/README.md +0 -0
  35. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/SECURITY.md +0 -0
  36. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/SUPPORT.md +0 -0
  37. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost +0 -0
  38. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/__init__.py +0 -0
  39. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/__main__.py +0 -0
  40. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/cli.py +0 -0
  41. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/cliparse.py +0 -0
  42. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/__init__.py +0 -0
  43. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/_common.py +0 -0
  44. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/bmad.py +0 -0
  45. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/configuration.py +0 -0
  46. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/discovery.py +0 -0
  47. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/hooks.py +0 -0
  48. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/info.py +0 -0
  49. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/intelligence.py +0 -0
  50. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/pkg.py +0 -0
  51. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/quality.py +0 -0
  52. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/quickstart.py +0 -0
  53. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/run.py +0 -0
  54. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/safety.py +0 -0
  55. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/taps.py +0 -0
  56. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/commands/team.py +0 -0
  57. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/__init__.py +0 -0
  58. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/adapters.py +0 -0
  59. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/agents.py +0 -0
  60. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/ai.py +0 -0
  61. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/aihost.py +0 -0
  62. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/bootstrap.py +0 -0
  63. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/browse.py +0 -0
  64. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/builtin.py +0 -0
  65. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/capabilities.py +0 -0
  66. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/catalog.py +0 -0
  67. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/catalogbundle.py +0 -0
  68. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/chat.py +0 -0
  69. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/claude_settings.py +0 -0
  70. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/complete.py +0 -0
  71. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/config.py +0 -0
  72. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/dense.py +0 -0
  73. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/ed25519.py +0 -0
  74. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/embed.py +0 -0
  75. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/faithfulness.py +0 -0
  76. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/frontmatter.py +0 -0
  77. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/gitutil.py +0 -0
  78. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/hookhost.py +0 -0
  79. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/imperative.py +0 -0
  80. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/injectscan.py +0 -0
  81. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/installscan.py +0 -0
  82. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/integrity.py +0 -0
  83. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/journal.py +0 -0
  84. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/localembed.py +0 -0
  85. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/lockfile.py +0 -0
  86. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/logs.py +0 -0
  87. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/mcp.py +0 -0
  88. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/mcpdecl.py +0 -0
  89. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/mcphost.py +0 -0
  90. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/minisign.py +0 -0
  91. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/nethttp.py +0 -0
  92. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/output.py +0 -0
  93. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/paths.py +0 -0
  94. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/policy.py +0 -0
  95. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/projectlock.py +0 -0
  96. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/provenance.py +0 -0
  97. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/rag.py +0 -0
  98. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/registry.py +0 -0
  99. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/resolve.py +0 -0
  100. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/rules.py +0 -0
  101. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/scopes.py +0 -0
  102. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/secretscan.py +0 -0
  103. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/selfupdate.py +0 -0
  104. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/serve.py +0 -0
  105. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/shards.py +0 -0
  106. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/stackprobe.py +0 -0
  107. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/staleness.py +0 -0
  108. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/store.py +0 -0
  109. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/trustaudit.py +0 -0
  110. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/typosquat.py +0 -0
  111. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/updatediff.py +0 -0
  112. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/util.py +0 -0
  113. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/core/workflows.py +0 -0
  114. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/data/registries.json +0 -0
  115. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/data/rules/boost-first.mdc +0 -0
  116. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/errors.py +0 -0
  117. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_cli/spin.py +0 -0
  118. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_langchain/__init__.py +0 -0
  119. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_langchain/_compat.py +0 -0
  120. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_langchain/graph.py +0 -0
  121. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_langchain/loader.py +0 -0
  122. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_langchain/py.typed +0 -0
  123. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_langchain/retriever.py +0 -0
  124. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  125. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  126. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_skill_cli.egg-info/requires.txt +0 -0
  127. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/boost_skill_cli.egg-info/top_level.txt +0 -0
  128. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/codecov.yml +0 -0
  129. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/.claude/settings.local.json +0 -0
  130. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/DEBUGGING.md +0 -0
  131. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/adapters.html +0 -0
  132. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/architecture/README.md +0 -0
  133. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/architecture/c4-components-core.md +0 -0
  134. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/architecture/c4-containers.md +0 -0
  135. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/architecture/c4-context.md +0 -0
  136. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/architecture/c4-dynamic-install.md +0 -0
  137. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/bmad.md +0 -0
  138. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/gifs/distill.gif +0 -0
  139. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/gifs/doctor.gif +0 -0
  140. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/gifs/explain.gif +0 -0
  141. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/gifs/hooks.gif +0 -0
  142. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/gifs/install.gif +0 -0
  143. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/gifs/pulse.gif +0 -0
  144. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/gifs/search.gif +0 -0
  145. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/gifs/tap.gif +0 -0
  146. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/tapes/distill.tape +0 -0
  147. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/tapes/doctor.tape +0 -0
  148. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/tapes/explain.tape +0 -0
  149. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/tapes/hooks.tape +0 -0
  150. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/tapes/install.tape +0 -0
  151. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/tapes/pulse.tape +0 -0
  152. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/tapes/search.tape +0 -0
  153. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel/tapes/tap.tape +0 -0
  154. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/carousel.html +0 -0
  155. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/chat.html +0 -0
  156. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/code-review.md +0 -0
  157. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/commands.html +0 -0
  158. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/commit-audit.md +0 -0
  159. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/demo-index.json +0 -0
  160. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/demo.gif +0 -0
  161. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/demo.html +0 -0
  162. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/demo.tape +0 -0
  163. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/dependencies.md +0 -0
  164. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/design-roadmap.html +0 -0
  165. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/eval-latest.json +0 -0
  166. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/eval.html +0 -0
  167. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/index.html +0 -0
  168. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/langchain.html +0 -0
  169. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/mcp-hub.html +0 -0
  170. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/openssf-badge.md +0 -0
  171. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/openssf-playbook.md +0 -0
  172. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/rag-architecture.md +0 -0
  173. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D01.md +0 -0
  174. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D02.md +0 -0
  175. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D03.md +0 -0
  176. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D04.md +0 -0
  177. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D05.md +0 -0
  178. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D06.md +0 -0
  179. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D07.md +0 -0
  180. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D08.md +0 -0
  181. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D09.md +0 -0
  182. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D10.md +0 -0
  183. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D11.md +0 -0
  184. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D12.md +0 -0
  185. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D13.md +0 -0
  186. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D14.md +0 -0
  187. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D15.md +0 -0
  188. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D16.md +0 -0
  189. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D17.md +0 -0
  190. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D18.md +0 -0
  191. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D19.md +0 -0
  192. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D20.md +0 -0
  193. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D21.md +0 -0
  194. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D22.md +0 -0
  195. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D23.md +0 -0
  196. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D24.md +0 -0
  197. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D25.md +0 -0
  198. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D26.md +0 -0
  199. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/BOOST-D27.md +0 -0
  200. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  201. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  202. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  203. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  204. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  205. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  206. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  207. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  208. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  209. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  210. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  211. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  212. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  213. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  214. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  215. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/boost-first-rule.md +0 -0
  216. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  217. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  218. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/branch-current-gate.md +0 -0
  219. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  220. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  221. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  222. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  223. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  224. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  225. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  226. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  227. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  228. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  229. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  230. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  231. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  232. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  233. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/cli-command-audit.md +0 -0
  234. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  235. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  236. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  237. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  238. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/command-carousel-page.md +0 -0
  239. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  240. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  241. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  242. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  243. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  244. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  245. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  246. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  247. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  248. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  249. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  250. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  251. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  252. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  253. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  254. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  255. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  256. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dense-store-holds-every-vector-once-per-copy.md +0 -0
  257. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  258. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  259. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  260. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  261. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  262. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  263. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  264. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  265. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  266. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  267. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  268. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  269. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  270. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  271. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  272. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  273. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  274. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  275. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  276. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  277. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  278. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  279. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  280. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  281. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  282. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  283. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  284. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  285. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  286. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  287. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  288. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  289. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  290. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  291. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  292. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/github-community-health-files.md +0 -0
  293. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  294. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  295. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  296. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  297. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  298. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  299. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  300. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  301. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  302. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  303. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  304. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  305. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  306. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  307. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  308. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  309. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  310. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  311. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  312. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  313. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  314. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  315. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  316. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  317. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  318. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  319. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  320. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  321. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  322. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  323. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  324. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  325. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  326. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  327. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  328. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  329. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  330. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  331. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  332. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  333. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  334. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  335. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  336. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  337. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  338. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  339. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  340. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  341. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  342. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  343. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  344. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  345. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  346. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  347. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  348. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  349. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  350. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  351. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  352. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  353. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  354. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  355. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  356. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  357. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  358. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  359. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  360. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  361. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  362. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  363. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  364. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  365. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  366. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  367. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  368. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  369. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/openssf-playbook.md +0 -0
  370. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/openssf-silver.md +0 -0
  371. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  372. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  373. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  374. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  375. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  376. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  377. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  378. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  379. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  380. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  381. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  382. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  383. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  384. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  385. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  386. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  387. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  388. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  389. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  390. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  391. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  392. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  393. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  394. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  395. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  396. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  397. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  398. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  399. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  400. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  401. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  402. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  403. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/relicence-apache-2.md +0 -0
  404. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  405. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  406. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  407. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  408. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  409. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  410. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  411. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  412. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  413. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  414. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  415. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  416. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  417. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  418. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  419. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  420. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  421. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  422. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  423. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  424. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  425. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  426. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  427. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  428. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  429. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  430. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  431. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  432. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  433. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  434. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  435. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  436. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  437. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  438. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +0 -0
  439. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  440. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  441. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  442. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  443. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  444. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  445. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  446. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  447. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  448. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  449. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  450. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  451. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  452. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  453. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  454. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  455. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  456. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  457. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  458. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  459. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  460. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  461. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  462. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  463. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  464. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  465. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  466. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  467. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  468. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  469. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  470. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  471. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  472. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  473. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  474. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  475. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  476. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  477. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  478. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/weekly-vectors-had-no-ingestion-path.md +0 -0
  479. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  480. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  481. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  482. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  483. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  484. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  485. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/workspace-scope-install.md +0 -0
  486. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/zip-strict-audit.md +0 -0
  487. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  488. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  489. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/security-design.md +0 -0
  490. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/semantic-search.md +0 -0
  491. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  492. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/verifying-releases.md +0 -0
  493. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/vex/meta.md +0 -0
  494. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/vex/openvex.json +0 -0
  495. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  496. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  497. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  498. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  499. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/eslint.config.mjs +0 -0
  500. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/README.md +0 -0
  501. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/__init__.py +0 -0
  502. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/baseline.json +0 -0
  503. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/faithfulness.py +0 -0
  504. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/golden_set.json +0 -0
  505. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/make_corpus.py +0 -0
  506. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/make_golden.py +0 -0
  507. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/metrics.py +0 -0
  508. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/publish_golden_dataset.py +0 -0
  509. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/evals/run_evals.py +0 -0
  510. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/examples/README.md +0 -0
  511. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/examples/adapt-demo.sh +0 -0
  512. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/examples/boost-run-prototype.sh +0 -0
  513. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/index.html +0 -0
  514. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/noxfile.py +0 -0
  515. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/pyproject.toml +0 -0
  516. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/coverage-tools.in +0 -0
  517. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/coverage-tools.txt +0 -0
  518. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/lint-tools.in +0 -0
  519. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/lint-tools.txt +0 -0
  520. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/mutation-tools.in +0 -0
  521. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/mutation-tools.txt +0 -0
  522. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/platform-pins.lock +0 -0
  523. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/release-tools.in +0 -0
  524. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/release-tools.txt +0 -0
  525. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/test-tools.in +0 -0
  526. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/requirements/test-tools.txt +0 -0
  527. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/a11y_check.py +0 -0
  528. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/add_spdx_headers.py +0 -0
  529. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/bench_cli.sh +0 -0
  530. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/build_command_reference.py +0 -0
  531. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/build_demo_index.py +0 -0
  532. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/build_registries.py +0 -0
  533. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/build_roadmap.py +0 -0
  534. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/build_scale_corpus.py +0 -0
  535. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/build_vex.py +0 -0
  536. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/check_anchors.py +0 -0
  537. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/check_branch_current.py +0 -0
  538. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/check_dco.py +0 -0
  539. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/check_licenses.py +0 -0
  540. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/check_reproducible.py +0 -0
  541. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/check_required_checks.py +0 -0
  542. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/ensure_eval_corpus.sh +0 -0
  543. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/eval_corpus.py +0 -0
  544. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/eval_explain.py +0 -0
  545. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/eval_gate.py +0 -0
  546. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/eval_recommend.py +0 -0
  547. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/eval_retrieval.py +0 -0
  548. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/eval_stats_summary.py +0 -0
  549. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/eval_tools.py +0 -0
  550. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/import_budget.py +0 -0
  551. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/lock_toolchain.py +0 -0
  552. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/measure_registry.py +0 -0
  553. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/mutation_gate.py +0 -0
  554. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/mutation_shards.py +0 -0
  555. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/mutation_weights.json +0 -0
  556. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/normalize_sdist.py +0 -0
  557. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/page_budget.py +0 -0
  558. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/perf_gate.py +0 -0
  559. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/post_deploy_smoke.py +0 -0
  560. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/publish_eval_json.py +0 -0
  561. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/publish_shards.py +0 -0
  562. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/release_guard.py +0 -0
  563. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/release_preflight.py +0 -0
  564. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/serve_docs.py +0 -0
  565. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/scripts/shard_plan.py +0 -0
  566. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/setup.cfg +0 -0
  567. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/sonar-project.properties +0 -0
  568. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/style/README.md +0 -0
  569. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/style/boost.css +0 -0
  570. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/style/boost.js +0 -0
  571. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/style/demo.html +0 -0
  572. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/adapt.feature +0 -0
  573. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/browse.feature +0 -0
  574. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/count.feature +0 -0
  575. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/discover.feature +0 -0
  576. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/doctor.feature +0 -0
  577. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/environment.py +0 -0
  578. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/explain.feature +0 -0
  579. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/index.feature +0 -0
  580. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/install.feature +0 -0
  581. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/list.feature +0 -0
  582. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/mcp.feature +0 -0
  583. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/search.feature +0 -0
  584. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/steps/cli_steps.py +0 -0
  585. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/steps/discovery_steps.py +0 -0
  586. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/steps/mcp_steps.py +0 -0
  587. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/bdd/features/steps/quality_steps.py +0 -0
  588. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/conftest.py +0 -0
  589. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/eval/baseline.json +0 -0
  590. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/eval/explain.jsonl +0 -0
  591. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/eval/fixtures/claude_init_event.jsonl +0 -0
  592. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/eval/golden-natural.jsonl +0 -0
  593. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/eval/golden.jsonl +0 -0
  594. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/eval/recommend.jsonl +0 -0
  595. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/eval/taps-scale.txt +0 -0
  596. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/eval/taps.txt +0 -0
  597. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/eval/tool_calls.jsonl +0 -0
  598. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_bmad_all_hosts.py +0 -0
  599. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_capabilities_policy.py +0 -0
  600. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_adapt.py +0 -0
  601. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_bmad.py +0 -0
  602. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_catalog.py +0 -0
  603. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_chat.py +0 -0
  604. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_configuration.py +0 -0
  605. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_discovery.py +0 -0
  606. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_hooks.py +0 -0
  607. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_hooks_gemini.py +0 -0
  608. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_info.py +0 -0
  609. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_intelligence.py +0 -0
  610. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_pane_width.py +0 -0
  611. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_pkg.py +0 -0
  612. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_quality.py +0 -0
  613. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_quickstart.py +0 -0
  614. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_tap_pins.py +0 -0
  615. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_taps.py +0 -0
  616. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_cli_team.py +0 -0
  617. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_everyday_loop.py +0 -0
  618. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_integrity_enforce.py +0 -0
  619. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_kind_conformance.py +0 -0
  620. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_property_parsers.py +0 -0
  621. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_run.py +0 -0
  622. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_tap_signing.py +0 -0
  623. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/functional/test_workspace_scope.py +0 -0
  624. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/README.md +0 -0
  625. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  626. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  627. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  628. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  629. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  630. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  631. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  632. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  633. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  634. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  635. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  636. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  637. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  638. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  639. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  640. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  641. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  642. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  643. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  644. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  645. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  646. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  647. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  648. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/fuzz_frontmatter.py +0 -0
  649. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/fuzz/fuzz_registry.py +0 -0
  650. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/langchain/conftest.py +0 -0
  651. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/langchain/test_graph.py +0 -0
  652. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/langchain/test_loader.py +0 -0
  653. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/langchain/test_retriever.py +0 -0
  654. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/make_fixture.py +0 -0
  655. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/perf/test_benchmarks.py +0 -0
  656. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/smoke.sh +0 -0
  657. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_a11y_check.py +0 -0
  658. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_action_pin_lockstep.py +0 -0
  659. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_adapters.py +0 -0
  660. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_adapters_multi.py +0 -0
  661. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_adapters_runner.py +0 -0
  662. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_agents.py +0 -0
  663. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_ai.py +0 -0
  664. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_aihost.py +0 -0
  665. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_boost_first_offer.py +0 -0
  666. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_bootstrap.py +0 -0
  667. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_bot_pr_dco.py +0 -0
  668. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_branch_current.py +0 -0
  669. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_browse.py +0 -0
  670. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_builtin.py +0 -0
  671. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_capabilities.py +0 -0
  672. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_catalog.py +0 -0
  673. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_catalogbundle.py +0 -0
  674. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_chat.py +0 -0
  675. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_check_anchors.py +0 -0
  676. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_check_dco.py +0 -0
  677. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_check_licenses.py +0 -0
  678. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_check_reproducible.py +0 -0
  679. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_claude_settings.py +0 -0
  680. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_clean_internal_cache.py +0 -0
  681. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_cli_update_shards.py +0 -0
  682. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_cliparse.py +0 -0
  683. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_codeql_analysis_key.py +0 -0
  684. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_command_reference_fresh.py +0 -0
  685. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_community_health_files.py +0 -0
  686. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_compact.py +0 -0
  687. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_complete.py +0 -0
  688. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_complete_rc_block.py +0 -0
  689. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_config.py +0 -0
  690. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_content_dedupe.py +0 -0
  691. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_content_identity.py +0 -0
  692. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_crash_redaction.py +0 -0
  693. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dedup_trust.py +0 -0
  694. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_demo_index.py +0 -0
  695. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense.py +0 -0
  696. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_boilerplate_cluster.py +0 -0
  697. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_embed_dedupe.py +0 -0
  698. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_entry_reuse.py +0 -0
  699. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_fallback.py +0 -0
  700. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_fix_hint.py +0 -0
  701. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_progress.py +0 -0
  702. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_quantized.py +0 -0
  703. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_ready_order.py +0 -0
  704. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_shard_real_schema.py +0 -0
  705. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  706. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_shards.py +0 -0
  707. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_status.py +0 -0
  708. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_status_cheap.py +0 -0
  709. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dense_vector_dedupe.py +0 -0
  710. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_dependabot_config.py +0 -0
  711. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_docs_pages_linked.py +0 -0
  712. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_docsite_chrome.py +0 -0
  713. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_ed25519.py +0 -0
  714. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_embed.py +0 -0
  715. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_embed_local.py +0 -0
  716. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_embed_truncated_response.py +0 -0
  717. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_entry_key.py +0 -0
  718. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_errors_and_cli_table.py +0 -0
  719. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_eval_baseline.py +0 -0
  720. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_eval_corpus.py +0 -0
  721. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_eval_faithfulness.py +0 -0
  722. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_eval_gate.py +0 -0
  723. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_eval_grading.py +0 -0
  724. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_eval_metrics.py +0 -0
  725. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_eval_stats_summary.py +0 -0
  726. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_eval_tools.py +0 -0
  727. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_eval_tools_probe.py +0 -0
  728. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  729. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_faithfulness.py +0 -0
  730. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_frontmatter.py +0 -0
  731. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_fuzz_targets.py +0 -0
  732. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  733. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_gitleaks_config.py +0 -0
  734. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_gitutil.py +0 -0
  735. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_gitutil_lfs.py +0 -0
  736. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_gitutil_sparse.py +0 -0
  737. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_gstack_coexistence.py +0 -0
  738. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_hook_settings_hosts.py +0 -0
  739. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_hookhost.py +0 -0
  740. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_imperative.py +0 -0
  741. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_import_budget.py +0 -0
  742. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_injectscan.py +0 -0
  743. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_install_permission_error.py +0 -0
  744. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_installscan.py +0 -0
  745. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_integrity.py +0 -0
  746. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_journal.py +0 -0
  747. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_langchain_packaging.py +0 -0
  748. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_link_ownership.py +0 -0
  749. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_localembed.py +0 -0
  750. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_localembed_e2e.py +0 -0
  751. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_lockfile.py +0 -0
  752. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_logs.py +0 -0
  753. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_marketing_counts.py +0 -0
  754. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_mcp.py +0 -0
  755. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_mcp_install_scan.py +0 -0
  756. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_mcp_read.py +0 -0
  757. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_mcpdecl.py +0 -0
  758. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_mcphost.py +0 -0
  759. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_measure_registry.py +0 -0
  760. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_minisign.py +0 -0
  761. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_mutation_hardening.py +0 -0
  762. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_mutation_shards.py +0 -0
  763. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_mutation_subfile_shards.py +0 -0
  764. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_mutmut_source_paths.py +0 -0
  765. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_nethttp.py +0 -0
  766. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_normalize_sdist.py +0 -0
  767. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_output.py +0 -0
  768. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_page_budget.py +0 -0
  769. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_paths.py +0 -0
  770. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_perf_gate.py +0 -0
  771. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_pkg_confusions.py +0 -0
  772. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_pkg_injection.py +0 -0
  773. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_pkg_secrets.py +0 -0
  774. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_platform_pins.py +0 -0
  775. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_policy.py +0 -0
  776. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_post_deploy_smoke.py +0 -0
  777. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_project_mcp_sidecar.py +0 -0
  778. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_projectlock.py +0 -0
  779. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_provenance.py +0 -0
  780. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_publish_golden_dataset.py +0 -0
  781. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_rag.py +0 -0
  782. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_rag_fastpath.py +0 -0
  783. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_rag_fusion.py +0 -0
  784. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_registries_fresh.py +0 -0
  785. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_registry.py +0 -0
  786. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_registry_categories.py +0 -0
  787. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_registry_control_chars.py +0 -0
  788. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_registry_parallel.py +0 -0
  789. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_release_guard.py +0 -0
  790. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_release_preflight.py +0 -0
  791. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_required_checks.py +0 -0
  792. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_rerank_cache.py +0 -0
  793. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_resolve.py +0 -0
  794. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_roadmap_fresh.py +0 -0
  795. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_rules.py +0 -0
  796. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_scale_corpus.py +0 -0
  797. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_scopes.py +0 -0
  798. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_secretscan.py +0 -0
  799. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_selfupdate.py +0 -0
  800. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_serve.py +0 -0
  801. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_serve_docs.py +0 -0
  802. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_shard_plan.py +0 -0
  803. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_shards.py +0 -0
  804. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_shards_incremental.py +0 -0
  805. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_shards_ingest.py +0 -0
  806. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_shards_matrix.py +0 -0
  807. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_smoke_covers_every_command.py +0 -0
  808. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_spdx_headers.py +0 -0
  809. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_spin.py +0 -0
  810. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_stackprobe.py +0 -0
  811. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_staleness.py +0 -0
  812. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_store.py +0 -0
  813. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_store_materialize.py +0 -0
  814. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_sync_blocked_links.py +0 -0
  815. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  816. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_tap_pins.py +0 -0
  817. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_token_parity.py +0 -0
  818. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_toolchain_lock.py +0 -0
  819. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_trustaudit.py +0 -0
  820. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_typosquat.py +0 -0
  821. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_updatediff.py +0 -0
  822. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_util.py +0 -0
  823. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_version.py +0 -0
  824. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_version_tags.py +0 -0
  825. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_vex.py +0 -0
  826. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_visual_harness_flags.py +0 -0
  827. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_workflow_concurrency.py +0 -0
  828. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  829. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  830. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_workflow_timeouts.py +0 -0
  831. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_workflows.py +0 -0
  832. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  833. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/visual/a11y_check.mjs +0 -0
  834. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/visual/console_check.mjs +0 -0
  835. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/visual/package-lock.json +0 -0
  836. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/tests/visual/package.json +0 -0
  837. {boost_skill_cli-1.2.66 → boost_skill_cli-1.2.68}/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.66
3
+ Version: 1.2.68
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.66'
22
- __version_tuple__ = version_tuple = (1, 2, 66)
21
+ __version__ = version = '1.2.68'
22
+ __version_tuple__ = version_tuple = (1, 2, 68)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -371,6 +371,23 @@ is pure noise. A 45-word paragraph that happens to begin "how should we…" is a
371
371
  design brief, so length is what separates them.
372
372
  """
373
373
 
374
+ LONG_PROMPT_WORDS = 60
375
+ """Past this, one keyword is not enough evidence to route on.
376
+
377
+ The other trivial gates all key on *shape* — a question, a slash command, too
378
+ few words — and a pasted terminal session is none of those. The day the
379
+ autopilot shipped, a user pasted ~90 words of their own shell output back into
380
+ the chat and got a full delegation banner because `\\bupdate\\b` matched inside
381
+ "boost self-update": one weak hit in a wall of text.
382
+
383
+ Density is the missing signal. In a short prompt every word is deliberate, so a
384
+ single keyword is strong evidence; in a long one it is easily incidental, while
385
+ a genuine long request names its work more than once ("refactor … and update
386
+ …"). Requiring two distinct hits above this length costs real requests nothing
387
+ and silences pastes, which is the right way round: this module would rather
388
+ under-route than talk over someone.
389
+ """
390
+
374
391
 
375
392
  def classify(prompt: str) -> str:
376
393
  """Name the track a prompt belongs to, or ``"trivial"`` to stay silent.
@@ -378,7 +395,8 @@ def classify(prompt: str) -> str:
378
395
  Silence is the default for anything that is not recognisably a unit of
379
396
  work: empty input, an acknowledgement, a slash command (which carries its
380
397
  own instructions), a short informational question, an explicit opt-out
381
- ("no bmad"), or a prompt that matches no track at all.
398
+ ("no bmad"), a prompt that matches no track at all, or — past
399
+ :data:`LONG_PROMPT_WORDS` — one that matches only a single keyword.
382
400
  """
383
401
  text = prompt.strip()
384
402
  if not text or _SLASH.match(text) or _OPT_OUT.search(text):
@@ -389,10 +407,12 @@ def classify(prompt: str) -> str:
389
407
  if (_INFO_QUESTION.match(text) and len(words) <= QUESTION_MAX_WORDS
390
408
  and not _SECOND_SENTENCE.search(text)):
391
409
  return TRIVIAL
410
+ # Distinct patterns matched, not occurrences: saying "update" twenty times
411
+ # is one piece of evidence, which is what keeps a repetitive log quiet.
392
412
  scores = {t: sum(1 for rx in pats if rx.search(text))
393
413
  for t, pats in _COMPILED.items()}
394
414
  best = max(scores.values())
395
- if best == 0:
415
+ if best == 0 or (best < 2 and len(words) > LONG_PROMPT_WORDS):
396
416
  return TRIVIAL
397
417
  return next(t for t in TRACK_ORDER if scores[t] == best)
398
418
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.66
3
+ Version: 1.2.68
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
@@ -84,6 +84,18 @@ from the transcript, so every message the user typed would vanish until they fou
84
84
  The guard has to sit outside any version of boost, so the installed command ends
85
85
  <code>|| true</code>.
86
86
 
87
+ <b>First production tuning: evidence has to scale with prompt length.</b> Within an hour of
88
+ release, the first real-world false positive arrived — a user pasted their own terminal session
89
+ back into the chat (~90 words of <code>boost self-update</code> output) and got a full delegation
90
+ banner, because <code>\bupdate\b</code> matches inside &ldquo;self-<b>update</b>&rdquo;. One weak
91
+ hit in a wall of text. Every existing trivial gate keys on <em>shape</em> &mdash; a question, a
92
+ slash command, too few words &mdash; and a pasted log is none of those, so none of them could
93
+ fire. The missing signal was density: in a short prompt every word is deliberate, so one keyword
94
+ is strong evidence; in a long one it is easily incidental, while a genuine long request names its
95
+ work more than once (&ldquo;refactor &hellip; and update &hellip;&rdquo;). Past
96
+ <code>LONG_PROMPT_WORDS</code> (60) the router now needs two distinct keyword hits. Verified
97
+ against the real paste and against 80- and 69-word genuine requests, which still route.
98
+
87
99
  <b>Two keyword-table defects, found by routing real prompts rather than by reading.</b>
88
100
  <code>\bfix\w*\b</code> matches &ldquo;fixture&rdquo; and <code>\bchange\w*\b</code> matches
89
101
  &ldquo;changelog&rdquo; — the exact words the quality and docs tables claim — so &ldquo;add
@@ -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>
@@ -8686,6 +8812,18 @@ from the transcript, so every message the user typed would vanish until they fou
8686
8812
  The guard has to sit outside any version of boost, so the installed command ends
8687
8813
  <code>|| true</code>.
8688
8814
 
8815
+ <b>First production tuning: evidence has to scale with prompt length.</b> Within an hour of
8816
+ release, the first real-world false positive arrived — a user pasted their own terminal session
8817
+ back into the chat (~90 words of <code>boost self-update</code> output) and got a full delegation
8818
+ banner, because <code>\bupdate\b</code> matches inside &ldquo;self-<b>update</b>&rdquo;. One weak
8819
+ hit in a wall of text. Every existing trivial gate keys on <em>shape</em> &mdash; a question, a
8820
+ slash command, too few words &mdash; and a pasted log is none of those, so none of them could
8821
+ fire. The missing signal was density: in a short prompt every word is deliberate, so one keyword
8822
+ is strong evidence; in a long one it is easily incidental, while a genuine long request names its
8823
+ work more than once (&ldquo;refactor &hellip; and update &hellip;&rdquo;). Past
8824
+ <code>LONG_PROMPT_WORDS</code> (60) the router now needs two distinct keyword hits. Verified
8825
+ against the real paste and against 80- and 69-word genuine requests, which still route.
8826
+
8689
8827
  <b>Two keyword-table defects, found by routing real prompts rather than by reading.</b>
8690
8828
  <code>\bfix\w*\b</code> matches &ldquo;fixture&rdquo; and <code>\bchange\w*\b</code> matches
8691
8829
  &ldquo;changelog&rdquo; — the exact words the quality and docs tables claim — so &ldquo;add
@@ -106,6 +106,61 @@ class TestClassifyTrivial:
106
106
  """`SKILL.md` and `store.install` must not read as end-of-sentence."""
107
107
  assert bmad.classify("what does store.install do with SKILL.md?") == "trivial"
108
108
 
109
+
110
+ class TestEvidenceScalesWithLength:
111
+ """One keyword is strong signal in a short prompt and noise in a long one.
112
+
113
+ Found in production on the day the autopilot shipped: a user pasted their
114
+ terminal session back into the chat and got a full delegation banner, on the
115
+ strength of `\\bupdate\\b` matching inside "boost self-update". ~90 words,
116
+ one weak hit. The shape gates could not catch it — it is not a question, not
117
+ a slash command, and far past the word floor — so the missing rule is about
118
+ evidence density, not shape.
119
+ """
120
+
121
+ # the actual paste, trimmed of ANSI and the shell prompt lines
122
+ PASTE = """boost self-update
123
+ updating via pipx: /opt/homebrew/bin/pipx upgrade boost-skill-cli
124
+ boost v1.0.419 -> v1.0.420
125
+ boost bmad on
126
+ BMAD autopilot ON (global) - 7 persona subagent(s) + prompt router
127
+ personas -> ~/.claude/agents
128
+ hooks -> ~/.claude/settings.json (SessionStart + UserPromptSubmit)
129
+ every substantive prompt now names its lead persona and its definition of
130
+ done; trivial asks are left alone
131
+ restart your agent session to pick up the new subagents
132
+ full BMAD workflow skills (needs Node): boost bmad install
133
+ boost bmad install
134
+ installed BMAD in /Users/cassandragaston/IdeaProjects/boost (46 skills)"""
135
+
136
+ def test_the_paste_that_prompted_this_rule_is_silent(self):
137
+ assert len(self.PASTE.split()) > bmad.LONG_PROMPT_WORDS
138
+ assert bmad.classify(self.PASTE) == "trivial"
139
+
140
+ def test_it_is_the_length_that_silences_it_not_the_words(self):
141
+ """The same weak evidence in a short prompt must still route."""
142
+ assert bmad.classify("update the flag") == "build"
143
+
144
+ def test_a_long_prompt_with_real_evidence_still_routes(self):
145
+ """Two hits is enough — genuine long asks name the work more than once."""
146
+ prompt = (
147
+ "I have been going back and forth on this for a while and I think "
148
+ "the cleanest thing is to refactor the retrieval layer so that the "
149
+ "dense engine and the BM25 engine share one index build path, "
150
+ "because right now they diverge in ways that are hard to reason "
151
+ "about and it keeps biting us whenever somebody touches either "
152
+ "one of them, so please update the module boundary as well while "
153
+ "you are in there and leave it tidy for the next person"
154
+ )
155
+ assert len(prompt.split()) > bmad.LONG_PROMPT_WORDS
156
+ assert bmad.classify(prompt) == "build"
157
+
158
+ def test_repeating_one_keyword_is_not_more_evidence(self):
159
+ """Scoring counts distinct patterns, not occurrences — so a long log
160
+ that says "update" twenty times still scores 1 and stays silent."""
161
+ wordy = ("please update it " * 20) + ("blah " * bmad.LONG_PROMPT_WORDS)
162
+ assert bmad.classify(wordy) == "trivial"
163
+
109
164
  def test_a_question_of_exactly_the_cutoff_length_is_trivial(self):
110
165
  """The boundary itself is inclusive — 30 words is still a question."""
111
166
  prompt = ("how should we handle the case where a tap has no SKILL.md at "
File without changes
File without changes