boost-skill-cli 1.2.53__tar.gz → 1.2.54__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 (821) hide show
  1. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/CLAUDE.md +16 -0
  2. {boost_skill_cli-1.2.53/boost_skill_cli.egg-info → boost_skill_cli-1.2.54}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/shards.py +27 -0
  5. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  6. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  7. boost_skill_cli-1.2.54/docs/roadmap/items/shard-runs-reembed-everything-weekly.md +48 -0
  8. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap.html +46 -1
  9. boost_skill_cli-1.2.54/scripts/publish_shards.py +303 -0
  10. boost_skill_cli-1.2.54/tests/unit/test_shards_incremental.py +271 -0
  11. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_shards_matrix.py +4 -1
  12. boost_skill_cli-1.2.53/scripts/publish_shards.py +0 -166
  13. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.gitattributes +0 -0
  14. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.gitignore +0 -0
  15. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.gitleaks.toml +0 -0
  16. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.htmlvalidate.json +0 -0
  17. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.lighthouserc.json +0 -0
  18. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.lycheeignore +0 -0
  19. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.markdownlint-cli2.jsonc +0 -0
  20. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.pre-commit-config.yaml +0 -0
  21. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.stylelintrc.json +0 -0
  22. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.vale/styles/boost/AIWriting.yml +0 -0
  23. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.vale/styles/boost/Terminology.yml +0 -0
  24. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  25. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/.vale.ini +0 -0
  26. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/CODE_OF_CONDUCT.md +0 -0
  27. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/CONTRIBUTING.md +0 -0
  28. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/DCO +0 -0
  29. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/GOVERNANCE.md +0 -0
  30. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/LICENSE +0 -0
  31. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/MAINTAINERS.md +0 -0
  32. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/MANIFEST.in +0 -0
  33. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/Makefile +0 -0
  34. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/README.md +0 -0
  35. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/SECURITY.md +0 -0
  36. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/SUPPORT.md +0 -0
  37. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost +0 -0
  38. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/__init__.py +0 -0
  39. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/__main__.py +0 -0
  40. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/cli.py +0 -0
  41. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/cliparse.py +0 -0
  42. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/__init__.py +0 -0
  43. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/_common.py +0 -0
  44. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/bmad.py +0 -0
  45. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/configuration.py +0 -0
  46. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/discovery.py +0 -0
  47. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/hooks.py +0 -0
  48. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/info.py +0 -0
  49. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/intelligence.py +0 -0
  50. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/pkg.py +0 -0
  51. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/quality.py +0 -0
  52. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/quickstart.py +0 -0
  53. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/run.py +0 -0
  54. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/safety.py +0 -0
  55. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/taps.py +0 -0
  56. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/commands/team.py +0 -0
  57. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/__init__.py +0 -0
  58. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/adapters.py +0 -0
  59. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/agents.py +0 -0
  60. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/ai.py +0 -0
  61. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/aihost.py +0 -0
  62. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/bmad.py +0 -0
  63. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/bootstrap.py +0 -0
  64. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/browse.py +0 -0
  65. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/builtin.py +0 -0
  66. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/capabilities.py +0 -0
  67. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/catalog.py +0 -0
  68. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/catalogbundle.py +0 -0
  69. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/chat.py +0 -0
  70. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/claude_settings.py +0 -0
  71. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/complete.py +0 -0
  72. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/config.py +0 -0
  73. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/dense.py +0 -0
  74. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/ed25519.py +0 -0
  75. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/embed.py +0 -0
  76. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/faithfulness.py +0 -0
  77. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/frontmatter.py +0 -0
  78. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/gitutil.py +0 -0
  79. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/hookhost.py +0 -0
  80. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/imperative.py +0 -0
  81. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/injectscan.py +0 -0
  82. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/installscan.py +0 -0
  83. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/integrity.py +0 -0
  84. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/journal.py +0 -0
  85. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/localembed.py +0 -0
  86. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/lockfile.py +0 -0
  87. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/logs.py +0 -0
  88. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/mcp.py +0 -0
  89. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/mcpdecl.py +0 -0
  90. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/mcphost.py +0 -0
  91. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/minisign.py +0 -0
  92. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/nethttp.py +0 -0
  93. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/output.py +0 -0
  94. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/paths.py +0 -0
  95. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/policy.py +0 -0
  96. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/projectlock.py +0 -0
  97. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/provenance.py +0 -0
  98. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/rag.py +0 -0
  99. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/registry.py +0 -0
  100. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/resolve.py +0 -0
  101. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/rules.py +0 -0
  102. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/scopes.py +0 -0
  103. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/secretscan.py +0 -0
  104. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/selfupdate.py +0 -0
  105. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/serve.py +0 -0
  106. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/stackprobe.py +0 -0
  107. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/staleness.py +0 -0
  108. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/store.py +0 -0
  109. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/trustaudit.py +0 -0
  110. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/typosquat.py +0 -0
  111. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/updatediff.py +0 -0
  112. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/util.py +0 -0
  113. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/core/workflows.py +0 -0
  114. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/data/registries.json +0 -0
  115. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/data/rules/boost-first.mdc +0 -0
  116. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/errors.py +0 -0
  117. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_cli/spin.py +0 -0
  118. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_langchain/__init__.py +0 -0
  119. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_langchain/_compat.py +0 -0
  120. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_langchain/graph.py +0 -0
  121. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_langchain/loader.py +0 -0
  122. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_langchain/py.typed +0 -0
  123. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_langchain/retriever.py +0 -0
  124. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  125. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  126. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_skill_cli.egg-info/requires.txt +0 -0
  127. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/boost_skill_cli.egg-info/top_level.txt +0 -0
  128. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/codecov.yml +0 -0
  129. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/.claude/settings.local.json +0 -0
  130. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/DEBUGGING.md +0 -0
  131. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/adapters.html +0 -0
  132. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/architecture/README.md +0 -0
  133. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/architecture/c4-components-core.md +0 -0
  134. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/architecture/c4-containers.md +0 -0
  135. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/architecture/c4-context.md +0 -0
  136. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/architecture/c4-dynamic-install.md +0 -0
  137. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/bmad.md +0 -0
  138. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/gifs/distill.gif +0 -0
  139. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/gifs/doctor.gif +0 -0
  140. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/gifs/explain.gif +0 -0
  141. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/gifs/hooks.gif +0 -0
  142. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/gifs/install.gif +0 -0
  143. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/gifs/pulse.gif +0 -0
  144. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/gifs/search.gif +0 -0
  145. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/gifs/tap.gif +0 -0
  146. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/tapes/distill.tape +0 -0
  147. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/tapes/doctor.tape +0 -0
  148. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/tapes/explain.tape +0 -0
  149. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/tapes/hooks.tape +0 -0
  150. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/tapes/install.tape +0 -0
  151. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/tapes/pulse.tape +0 -0
  152. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/tapes/search.tape +0 -0
  153. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel/tapes/tap.tape +0 -0
  154. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/carousel.html +0 -0
  155. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/chat.html +0 -0
  156. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/code-review.md +0 -0
  157. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/commands.html +0 -0
  158. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/commit-audit.md +0 -0
  159. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/demo-index.json +0 -0
  160. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/demo.gif +0 -0
  161. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/demo.html +0 -0
  162. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/demo.tape +0 -0
  163. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/dependencies.md +0 -0
  164. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/design-roadmap.html +0 -0
  165. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/eval-latest.json +0 -0
  166. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/eval.html +0 -0
  167. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/index.html +0 -0
  168. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/langchain.html +0 -0
  169. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/mcp-hub.html +0 -0
  170. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/openssf-badge.md +0 -0
  171. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/openssf-playbook.md +0 -0
  172. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/rag-architecture.md +0 -0
  173. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D01.md +0 -0
  174. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D02.md +0 -0
  175. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D03.md +0 -0
  176. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D04.md +0 -0
  177. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D05.md +0 -0
  178. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D06.md +0 -0
  179. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D07.md +0 -0
  180. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D08.md +0 -0
  181. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D09.md +0 -0
  182. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D10.md +0 -0
  183. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D11.md +0 -0
  184. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D12.md +0 -0
  185. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D13.md +0 -0
  186. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D14.md +0 -0
  187. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D15.md +0 -0
  188. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D16.md +0 -0
  189. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D17.md +0 -0
  190. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D18.md +0 -0
  191. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D19.md +0 -0
  192. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D20.md +0 -0
  193. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D21.md +0 -0
  194. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D22.md +0 -0
  195. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D23.md +0 -0
  196. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D24.md +0 -0
  197. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D25.md +0 -0
  198. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D26.md +0 -0
  199. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/BOOST-D27.md +0 -0
  200. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  201. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  202. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  203. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  204. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  205. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/ai-backend-fanout.md +0 -0
  206. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  207. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  208. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  209. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  210. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  211. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  212. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  213. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  214. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/bmad-hooks-all-hosts.md +0 -0
  215. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  216. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/boost-first-rule.md +0 -0
  217. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  218. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  219. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/branch-current-gate.md +0 -0
  220. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  221. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  222. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  223. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  224. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  225. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  226. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  227. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  228. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  229. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  230. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  231. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  232. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  233. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  234. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/cli-command-audit.md +0 -0
  235. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  236. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  237. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  238. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  239. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/command-carousel-page.md +0 -0
  240. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  241. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  242. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  243. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  244. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  245. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  246. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  247. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  248. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  249. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  250. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  251. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  252. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  253. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dense-reindex-has-no-progress-or-durability.md +0 -0
  254. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dense-reindex-reuses-whole-taps.md +0 -0
  255. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  256. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  257. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  258. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  259. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  260. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  261. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  262. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  263. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  264. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  265. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  266. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  267. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  268. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  269. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  270. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  271. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  272. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  273. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  274. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  275. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  276. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  277. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  278. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  279. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  280. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  281. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  282. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  283. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  284. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  285. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  286. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  287. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  288. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  289. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/gemini-duplicate-skill-discovery.md +0 -0
  290. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/gemini-hooks-host-aware.md +0 -0
  291. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/gemini-mcp-parity.md +0 -0
  292. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/github-community-health-files.md +0 -0
  293. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  294. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  295. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  296. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/gstack-tap-first-then-coexistence.md +0 -0
  297. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  298. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  299. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  300. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  301. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  302. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  303. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  304. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  305. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  306. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  307. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  308. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  309. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  310. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  311. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  312. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  313. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  314. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  315. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  316. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  317. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  318. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  319. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  320. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  321. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  322. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  323. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  324. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  325. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  326. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  327. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  328. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  329. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  330. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  331. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  332. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  333. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  334. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  335. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  336. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  337. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  338. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-cannot-read-a-skill-before-installing.md +0 -0
  339. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  340. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  341. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  342. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  343. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  344. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  345. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  346. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  347. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  348. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  349. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  350. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  351. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  352. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  353. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  354. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  355. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  356. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  357. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  358. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  359. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  360. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  361. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  362. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  363. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  364. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  365. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  366. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  367. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  368. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  369. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/openssf-gold-ceiling.md +0 -0
  370. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/openssf-playbook.md +0 -0
  371. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/openssf-silver.md +0 -0
  372. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  373. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  374. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  375. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  376. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  377. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  378. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  379. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  380. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  381. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  382. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  383. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  384. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  385. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  386. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  387. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  388. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  389. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  390. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  391. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  392. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  393. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/published-shards-have-no-consumer.md +0 -0
  394. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  395. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  396. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  397. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  398. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  399. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/readme-prune-and-search-guide.md +0 -0
  400. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  401. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  402. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  403. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  404. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/relicence-apache-2.md +0 -0
  405. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/reproducible-release-artifacts.md +0 -0
  406. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  407. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  408. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  409. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  410. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  411. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  412. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  413. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  414. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  415. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  416. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  417. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  418. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  419. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  420. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  421. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  422. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  423. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  424. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  425. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  426. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  427. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  428. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  429. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  430. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  431. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  432. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  433. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  434. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  435. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  436. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  437. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  438. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  439. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  440. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  441. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  442. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  443. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  444. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  445. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  446. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  447. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  448. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  449. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  450. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  451. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  452. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  453. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  454. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  455. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  456. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  457. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  458. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  459. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  460. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  461. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  462. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  463. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  464. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  465. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  466. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  467. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  468. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  469. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  470. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  471. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  472. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  473. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  474. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  475. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  476. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/vex-openvex-feed.md +0 -0
  477. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  478. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  479. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  480. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  481. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  482. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  483. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  484. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/workspace-scope-install.md +0 -0
  485. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/zip-strict-audit.md +0 -0
  486. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  487. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  488. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/security-design.md +0 -0
  489. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/semantic-search.md +0 -0
  490. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  491. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/verifying-releases.md +0 -0
  492. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/vex/meta.md +0 -0
  493. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/vex/openvex.json +0 -0
  494. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/vex/statements/gitleaks-secretscan-test-fixtures.md +0 -0
  495. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/vex/statements/quality-trust-fingerprint-not-sensitive.md +0 -0
  496. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/vex/statements/zizmor-adhoc-packages-lint-runners.md +0 -0
  497. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/docs/vex/statements/zizmor-dangerous-triggers-workflow-run.md +0 -0
  498. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/eslint.config.mjs +0 -0
  499. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/README.md +0 -0
  500. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/__init__.py +0 -0
  501. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/baseline.json +0 -0
  502. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/faithfulness.py +0 -0
  503. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/golden_set.json +0 -0
  504. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/make_corpus.py +0 -0
  505. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/make_golden.py +0 -0
  506. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/metrics.py +0 -0
  507. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/publish_golden_dataset.py +0 -0
  508. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/evals/run_evals.py +0 -0
  509. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/examples/README.md +0 -0
  510. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/examples/adapt-demo.sh +0 -0
  511. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/examples/boost-run-prototype.sh +0 -0
  512. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/index.html +0 -0
  513. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/noxfile.py +0 -0
  514. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/pyproject.toml +0 -0
  515. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/coverage-tools.in +0 -0
  516. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/coverage-tools.txt +0 -0
  517. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/lint-tools.in +0 -0
  518. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/lint-tools.txt +0 -0
  519. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/mutation-tools.in +0 -0
  520. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/mutation-tools.txt +0 -0
  521. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/platform-pins.lock +0 -0
  522. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/release-tools.in +0 -0
  523. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/release-tools.txt +0 -0
  524. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/test-tools.in +0 -0
  525. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/requirements/test-tools.txt +0 -0
  526. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/a11y_check.py +0 -0
  527. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/add_spdx_headers.py +0 -0
  528. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/bench_cli.sh +0 -0
  529. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/build_command_reference.py +0 -0
  530. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/build_demo_index.py +0 -0
  531. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/build_registries.py +0 -0
  532. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/build_roadmap.py +0 -0
  533. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/build_scale_corpus.py +0 -0
  534. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/build_vex.py +0 -0
  535. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/check_anchors.py +0 -0
  536. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/check_branch_current.py +0 -0
  537. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/check_dco.py +0 -0
  538. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/check_licenses.py +0 -0
  539. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/check_reproducible.py +0 -0
  540. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/check_required_checks.py +0 -0
  541. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/ensure_eval_corpus.sh +0 -0
  542. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/eval_corpus.py +0 -0
  543. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/eval_explain.py +0 -0
  544. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/eval_gate.py +0 -0
  545. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/eval_recommend.py +0 -0
  546. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/eval_retrieval.py +0 -0
  547. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/eval_stats_summary.py +0 -0
  548. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/import_budget.py +0 -0
  549. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/lock_toolchain.py +0 -0
  550. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/measure_registry.py +0 -0
  551. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/mutation_gate.py +0 -0
  552. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/mutation_shards.py +0 -0
  553. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/mutation_weights.json +0 -0
  554. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/normalize_sdist.py +0 -0
  555. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/page_budget.py +0 -0
  556. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/perf_gate.py +0 -0
  557. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/post_deploy_smoke.py +0 -0
  558. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/publish_eval_json.py +0 -0
  559. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/release_guard.py +0 -0
  560. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/release_preflight.py +0 -0
  561. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/serve_docs.py +0 -0
  562. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/scripts/shard_plan.py +0 -0
  563. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/setup.cfg +0 -0
  564. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/sonar-project.properties +0 -0
  565. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/style/README.md +0 -0
  566. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/style/boost.css +0 -0
  567. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/style/boost.js +0 -0
  568. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/style/demo.html +0 -0
  569. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/adapt.feature +0 -0
  570. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/browse.feature +0 -0
  571. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/count.feature +0 -0
  572. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/discover.feature +0 -0
  573. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/doctor.feature +0 -0
  574. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/environment.py +0 -0
  575. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/explain.feature +0 -0
  576. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/index.feature +0 -0
  577. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/install.feature +0 -0
  578. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/list.feature +0 -0
  579. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/mcp.feature +0 -0
  580. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/search.feature +0 -0
  581. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/steps/cli_steps.py +0 -0
  582. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/steps/discovery_steps.py +0 -0
  583. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/steps/mcp_steps.py +0 -0
  584. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/bdd/features/steps/quality_steps.py +0 -0
  585. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/conftest.py +0 -0
  586. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/eval/baseline.json +0 -0
  587. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/eval/explain.jsonl +0 -0
  588. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/eval/golden-natural.jsonl +0 -0
  589. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/eval/golden.jsonl +0 -0
  590. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/eval/recommend.jsonl +0 -0
  591. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/eval/taps-scale.txt +0 -0
  592. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/eval/taps.txt +0 -0
  593. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_bmad_all_hosts.py +0 -0
  594. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_capabilities_policy.py +0 -0
  595. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_adapt.py +0 -0
  596. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_bmad.py +0 -0
  597. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_catalog.py +0 -0
  598. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_chat.py +0 -0
  599. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_configuration.py +0 -0
  600. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_discovery.py +0 -0
  601. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_hooks.py +0 -0
  602. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_hooks_gemini.py +0 -0
  603. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_info.py +0 -0
  604. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_intelligence.py +0 -0
  605. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_pane_width.py +0 -0
  606. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_pkg.py +0 -0
  607. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_quality.py +0 -0
  608. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_quickstart.py +0 -0
  609. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_tap_pins.py +0 -0
  610. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_taps.py +0 -0
  611. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_cli_team.py +0 -0
  612. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_everyday_loop.py +0 -0
  613. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_integrity_enforce.py +0 -0
  614. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_kind_conformance.py +0 -0
  615. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_property_parsers.py +0 -0
  616. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_run.py +0 -0
  617. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_tap_signing.py +0 -0
  618. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/functional/test_workspace_scope.py +0 -0
  619. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/README.md +0 -0
  620. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  621. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  622. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  623. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  624. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  625. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  626. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  627. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  628. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  629. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  630. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  631. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  632. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  633. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  634. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  635. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  636. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  637. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  638. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  639. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  640. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  641. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  642. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  643. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/fuzz_frontmatter.py +0 -0
  644. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/fuzz/fuzz_registry.py +0 -0
  645. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/langchain/conftest.py +0 -0
  646. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/langchain/test_graph.py +0 -0
  647. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/langchain/test_loader.py +0 -0
  648. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/langchain/test_retriever.py +0 -0
  649. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/make_fixture.py +0 -0
  650. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/perf/test_benchmarks.py +0 -0
  651. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/smoke.sh +0 -0
  652. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_a11y_check.py +0 -0
  653. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_action_pin_lockstep.py +0 -0
  654. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_adapters.py +0 -0
  655. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_adapters_multi.py +0 -0
  656. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_adapters_runner.py +0 -0
  657. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_agents.py +0 -0
  658. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_ai.py +0 -0
  659. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_aihost.py +0 -0
  660. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_bmad_core.py +0 -0
  661. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_boost_first_offer.py +0 -0
  662. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_bootstrap.py +0 -0
  663. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_branch_current.py +0 -0
  664. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_browse.py +0 -0
  665. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_builtin.py +0 -0
  666. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_capabilities.py +0 -0
  667. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_catalog.py +0 -0
  668. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_catalogbundle.py +0 -0
  669. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_chat.py +0 -0
  670. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_check_anchors.py +0 -0
  671. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_check_dco.py +0 -0
  672. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_check_licenses.py +0 -0
  673. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_check_reproducible.py +0 -0
  674. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_claude_settings.py +0 -0
  675. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_clean_internal_cache.py +0 -0
  676. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_cliparse.py +0 -0
  677. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_codeql_analysis_key.py +0 -0
  678. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_command_reference_fresh.py +0 -0
  679. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_community_health_files.py +0 -0
  680. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_compact.py +0 -0
  681. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_complete.py +0 -0
  682. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_complete_rc_block.py +0 -0
  683. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_config.py +0 -0
  684. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_content_dedupe.py +0 -0
  685. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_content_identity.py +0 -0
  686. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_crash_redaction.py +0 -0
  687. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dedup_trust.py +0 -0
  688. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_demo_index.py +0 -0
  689. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense.py +0 -0
  690. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_embed_dedupe.py +0 -0
  691. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_fallback.py +0 -0
  692. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_fix_hint.py +0 -0
  693. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_progress.py +0 -0
  694. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_quantized.py +0 -0
  695. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_ready_order.py +0 -0
  696. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_shard_real_schema.py +0 -0
  697. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  698. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_shards.py +0 -0
  699. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_status.py +0 -0
  700. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dense_status_cheap.py +0 -0
  701. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_dependabot_config.py +0 -0
  702. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_docs_pages_linked.py +0 -0
  703. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_docsite_chrome.py +0 -0
  704. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_ed25519.py +0 -0
  705. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_embed.py +0 -0
  706. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_embed_local.py +0 -0
  707. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_embed_truncated_response.py +0 -0
  708. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_entry_key.py +0 -0
  709. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_errors_and_cli_table.py +0 -0
  710. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_eval_baseline.py +0 -0
  711. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_eval_corpus.py +0 -0
  712. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_eval_faithfulness.py +0 -0
  713. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_eval_gate.py +0 -0
  714. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_eval_grading.py +0 -0
  715. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_eval_metrics.py +0 -0
  716. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_eval_stats_summary.py +0 -0
  717. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  718. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_faithfulness.py +0 -0
  719. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_frontmatter.py +0 -0
  720. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_fuzz_targets.py +0 -0
  721. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  722. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_gitleaks_config.py +0 -0
  723. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_gitutil.py +0 -0
  724. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_gitutil_lfs.py +0 -0
  725. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_gitutil_sparse.py +0 -0
  726. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_hook_settings_hosts.py +0 -0
  727. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_hookhost.py +0 -0
  728. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_imperative.py +0 -0
  729. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_import_budget.py +0 -0
  730. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_injectscan.py +0 -0
  731. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_install_permission_error.py +0 -0
  732. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_installscan.py +0 -0
  733. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_integrity.py +0 -0
  734. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_journal.py +0 -0
  735. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_langchain_packaging.py +0 -0
  736. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_link_ownership.py +0 -0
  737. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_localembed.py +0 -0
  738. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_localembed_e2e.py +0 -0
  739. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_lockfile.py +0 -0
  740. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_logs.py +0 -0
  741. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_marketing_counts.py +0 -0
  742. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_mcp.py +0 -0
  743. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_mcp_install_scan.py +0 -0
  744. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_mcpdecl.py +0 -0
  745. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_mcphost.py +0 -0
  746. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_measure_registry.py +0 -0
  747. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_minisign.py +0 -0
  748. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_mutation_hardening.py +0 -0
  749. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_mutation_shards.py +0 -0
  750. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_mutation_subfile_shards.py +0 -0
  751. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_mutmut_source_paths.py +0 -0
  752. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_nethttp.py +0 -0
  753. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_normalize_sdist.py +0 -0
  754. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_output.py +0 -0
  755. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_page_budget.py +0 -0
  756. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_paths.py +0 -0
  757. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_perf_gate.py +0 -0
  758. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_pkg_confusions.py +0 -0
  759. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_pkg_injection.py +0 -0
  760. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_pkg_secrets.py +0 -0
  761. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_platform_pins.py +0 -0
  762. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_policy.py +0 -0
  763. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_post_deploy_smoke.py +0 -0
  764. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_project_mcp_sidecar.py +0 -0
  765. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_projectlock.py +0 -0
  766. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_provenance.py +0 -0
  767. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_publish_golden_dataset.py +0 -0
  768. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_rag.py +0 -0
  769. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_rag_fastpath.py +0 -0
  770. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_rag_fusion.py +0 -0
  771. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_registries_fresh.py +0 -0
  772. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_registry.py +0 -0
  773. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_registry_categories.py +0 -0
  774. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_registry_control_chars.py +0 -0
  775. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_registry_parallel.py +0 -0
  776. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_release_guard.py +0 -0
  777. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_release_preflight.py +0 -0
  778. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_required_checks.py +0 -0
  779. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_rerank_cache.py +0 -0
  780. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_resolve.py +0 -0
  781. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_roadmap_fresh.py +0 -0
  782. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_rules.py +0 -0
  783. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_scale_corpus.py +0 -0
  784. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_scopes.py +0 -0
  785. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_secretscan.py +0 -0
  786. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_selfupdate.py +0 -0
  787. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_serve.py +0 -0
  788. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_serve_docs.py +0 -0
  789. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_shard_plan.py +0 -0
  790. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_shards.py +0 -0
  791. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_smoke_covers_every_command.py +0 -0
  792. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_spdx_headers.py +0 -0
  793. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_spin.py +0 -0
  794. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_stackprobe.py +0 -0
  795. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_staleness.py +0 -0
  796. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_store.py +0 -0
  797. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_store_materialize.py +0 -0
  798. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_sync_blocked_links.py +0 -0
  799. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  800. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_tap_pins.py +0 -0
  801. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_token_parity.py +0 -0
  802. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_toolchain_lock.py +0 -0
  803. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_trustaudit.py +0 -0
  804. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_typosquat.py +0 -0
  805. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_updatediff.py +0 -0
  806. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_util.py +0 -0
  807. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_version.py +0 -0
  808. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_version_tags.py +0 -0
  809. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_vex.py +0 -0
  810. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_visual_harness_flags.py +0 -0
  811. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_workflow_concurrency.py +0 -0
  812. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  813. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  814. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_workflow_timeouts.py +0 -0
  815. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_workflows.py +0 -0
  816. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  817. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/visual/a11y_check.mjs +0 -0
  818. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/visual/console_check.mjs +0 -0
  819. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/visual/package-lock.json +0 -0
  820. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/visual/package.json +0 -0
  821. {boost_skill_cli-1.2.53 → boost_skill_cli-1.2.54}/tests/visual/visual_check.mjs +0 -0
@@ -493,6 +493,22 @@ each agent's skills dir, and updating the lock file.
493
493
  published. A matrix entry is a **space-separated list**, split in Python
494
494
  inside the job, never by shell word-splitting.
495
495
 
496
+ - **A shard run reuses what it already published, and the manifest is how.**
497
+ Every weekly run used to embed the whole catalogue (~9 job-hours) on
498
+ ephemeral runners with no memory of last week, although registries move
499
+ slowly. `shards.unchanged(manifest, commits)` returns the rows whose pinned
500
+ commit is the tap's commit *now*; the build job removes those taps before
501
+ `reindex --dense`, and the publish job fetches last week's manifest from the
502
+ release and carries their rows forward verbatim (`publish_shards.py manifest
503
+ --carry-forward`). Carry forward, not import-and-re-export: the assets are
504
+ still on the release byte for byte (`gh release upload --clobber` replaces,
505
+ never deletes), so re-exporting would re-upload ~300 MB of identical vectors
506
+ a week. Three refusals keep it honest — an empty local commit is a failed
507
+ clone, not a match; a manifest in another embedding space reuses nothing;
508
+ and a row is carried only when the job's commit and the manifest's agree. A
509
+ registry that is neither fresh nor unchanged drops out of the manifest rather
510
+ than accumulating forever. Its asset stays; its row returns when it does.
511
+
496
512
  - **A published shard is only importable while three things match, and every
497
513
  mismatch is silent if waved through.** `core/shards.py` fetches
498
514
  `manifest.json` from a rolling `shards-latest` **prerelease** on this repo —
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.53
3
+ Version: 1.2.54
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.53'
22
- __version_tuple__ = version_tuple = (1, 2, 53)
21
+ __version__ = version = '1.2.54'
22
+ __version_tuple__ = version_tuple = (1, 2, 54)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -171,6 +171,33 @@ def rows(manifest: dict) -> dict[str, dict]:
171
171
  return out
172
172
 
173
173
 
174
+ def unchanged(manifest: dict, commits: dict[str, str]) -> dict[str, dict]:
175
+ """Manifest rows that already describe the commit each tap is at now.
176
+
177
+ This is what lets a weekly shard run skip most of its own work. Every run
178
+ used to embed every registry from scratch — ~9 job-hours for the catalogue
179
+ — on ephemeral runners with no memory of last week, and registries move
180
+ slowly, so most of that bought the same vectors again. The manifest pins
181
+ the commit each shard was built from, so "has this one moved?" is one
182
+ comparison, and a registry that has not keeps last week's row.
183
+
184
+ Same rule that makes a shard importable at all: reuse only for the EXACT
185
+ commit the row describes. An empty local commit is a tap whose clone
186
+ failed, not a match — that registry is embedded, never skipped. The
187
+ embedding-space check is the caller's (:func:`incompatible`), because a
188
+ manifest from another space reuses nothing however fresh its commits.
189
+ """
190
+ index = rows(manifest)
191
+ out: dict[str, dict] = {}
192
+ for tap, commit in commits.items():
193
+ row = index.get(tap)
194
+ if row is None or not commit:
195
+ continue
196
+ if str(row.get("commit")) == commit:
197
+ out[tap] = row
198
+ return out
199
+
200
+
174
201
  def _same_origin(a: str, b: str) -> bool:
175
202
  """True when two URLs share scheme+host+port.
176
203
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.53
3
+ Version: 1.2.54
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License-Expression: Apache-2.0
@@ -439,6 +439,7 @@ docs/roadmap/items/self-update-claims-up-to-date-without-asking.md
439
439
  docs/roadmap/items/serve-404-reflected-the-request.md
440
440
  docs/roadmap/items/serve-is-a-searchable-catalogue.md
441
441
  docs/roadmap/items/serve-py-traversal-guards-untested.md
442
+ docs/roadmap/items/shard-runs-reembed-everything-weekly.md
442
443
  docs/roadmap/items/shards-pipeline-never-produced-a-shard.md
443
444
  docs/roadmap/items/shareable-catalogue-bundle.md
444
445
  docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md
@@ -783,6 +784,7 @@ tests/unit/test_serve.py
783
784
  tests/unit/test_serve_docs.py
784
785
  tests/unit/test_shard_plan.py
785
786
  tests/unit/test_shards.py
787
+ tests/unit/test_shards_incremental.py
786
788
  tests/unit/test_shards_matrix.py
787
789
  tests/unit/test_smoke_covers_every_command.py
788
790
  tests/unit/test_spdx_headers.py
@@ -0,0 +1,48 @@
1
+ ---
2
+ id: shard-runs-reembed-everything-weekly
3
+ board: code
4
+ section: pipeline
5
+ status: shipped
6
+ category: Retrieval · CI
7
+ complexity: M
8
+ impact: High
9
+ wow: 4
10
+ note: the manifest already knew which registries had not moved
11
+ order: 2
12
+ owner: loop/shards-incremental
13
+ pr:
14
+ title: Every weekly shard run re-embedded the whole catalogue
15
+ ---
16
+ The catalogue shard run is <b>60 packed jobs over 463 registries, ~9 job-hours a week</b> at the
17
+ measured 0.22&nbsp;s/chunk &mdash; and every one of those hours was spent on ephemeral runners with
18
+ no memory of the week before. Registries move slowly. Most weeks most of the catalogue is at the
19
+ same commit it was published at, and the run bought the same vectors again, byte for byte.
20
+
21
+ <b>The manifest already held the answer.</b> Each row pins the registry commit its shard was
22
+ built from, because <code>dense.import_shard</code> refuses a shard for any other commit. That
23
+ same pin answers "has this registry moved since we published?" in one comparison, and
24
+ <code>shards.unchanged(manifest, commits)</code> makes it: a tap is unchanged only for the
25
+ <em>exact</em> commit its row describes, an empty local commit (a clone that failed) never
26
+ counts, and a manifest in another embedding space reuses nothing however fresh its commits
27
+ &mdash; none of its rows would be importable by the consumer this run publishes for.
28
+
29
+ <b>Carry forward, not re-export.</b> The build job taps its chunk, asks
30
+ <code>publish_shards.py unchanged</code>, untaps every registry it lists, and embeds only what
31
+ is left &mdash; a chunk with nothing left skips the pass rather than failing on "no taps
32
+ configured". The publish job fetches last week's manifest from the release and carries those
33
+ rows forward verbatim: the assets are still there, since <code>gh release upload --clobber</code>
34
+ replaces but never deletes. The cheaper-looking alternative, import last week's shard and
35
+ re-export it, would re-upload ~300&nbsp;MB of identical vectors a week for nothing.
36
+
37
+ <b>What the row set means now.</b> Fresh beats carried for the same tap. A registry that is
38
+ neither fresh nor unchanged &mdash; removed from the catalogue, or failed to tap this week
39
+ &mdash; drops out of the manifest rather than accumulating forever; its asset stays on the
40
+ release, harmless, and its row returns the week the registry does. A row is carried only when
41
+ the job's commit and the manifest's agree: two sources disagreeing means someone is wrong, and
42
+ the honest outcome is a re-embed next run, not a row that may describe a tree the registry has
43
+ left.
44
+
45
+ <b>Cost after.</b> The first run is unchanged. Every run after it costs the registries that
46
+ moved plus one comparison each for the rest, so a quiet week is a manifest upload and little
47
+ else, and wall clock is bounded by the largest registry that actually changed rather than by
48
+ the largest registry.
@@ -133,7 +133,7 @@
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
135
  <div class="stat"><b>7</b><span>Planned</span></div>
136
- <div class="stat"><b>288</b><span>Loop finds</span></div>
136
+ <div class="stat"><b>289</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -5704,6 +5704,51 @@ header claims rows only a Voyage key can read.</p></details>
5704
5704
  </div>
5705
5705
  </article>
5706
5706
 
5707
+ <article class="cap rcard" id="shard-runs-reembed-everything-weekly">
5708
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Retrieval · CI</span></div>
5709
+ <h3>Every weekly shard run re-embedded the whole catalogue</h3>
5710
+ <details class="cardbody"><summary>Write-up</summary>
5711
+ <p>The catalogue shard run is <b>60 packed jobs over 463 registries, ~9 job-hours a week</b> at the
5712
+ measured 0.22&nbsp;s/chunk &mdash; and every one of those hours was spent on ephemeral runners with
5713
+ no memory of the week before. Registries move slowly. Most weeks most of the catalogue is at the
5714
+ same commit it was published at, and the run bought the same vectors again, byte for byte.
5715
+
5716
+ <b>The manifest already held the answer.</b> Each row pins the registry commit its shard was
5717
+ built from, because <code>dense.import_shard</code> refuses a shard for any other commit. That
5718
+ same pin answers "has this registry moved since we published?" in one comparison, and
5719
+ <code>shards.unchanged(manifest, commits)</code> makes it: a tap is unchanged only for the
5720
+ <em>exact</em> commit its row describes, an empty local commit (a clone that failed) never
5721
+ counts, and a manifest in another embedding space reuses nothing however fresh its commits
5722
+ &mdash; none of its rows would be importable by the consumer this run publishes for.
5723
+
5724
+ <b>Carry forward, not re-export.</b> The build job taps its chunk, asks
5725
+ <code>publish_shards.py unchanged</code>, untaps every registry it lists, and embeds only what
5726
+ is left &mdash; a chunk with nothing left skips the pass rather than failing on "no taps
5727
+ configured". The publish job fetches last week's manifest from the release and carries those
5728
+ rows forward verbatim: the assets are still there, since <code>gh release upload --clobber</code>
5729
+ replaces but never deletes. The cheaper-looking alternative, import last week's shard and
5730
+ re-export it, would re-upload ~300&nbsp;MB of identical vectors a week for nothing.
5731
+
5732
+ <b>What the row set means now.</b> Fresh beats carried for the same tap. A registry that is
5733
+ neither fresh nor unchanged &mdash; removed from the catalogue, or failed to tap this week
5734
+ &mdash; drops out of the manifest rather than accumulating forever; its asset stays on the
5735
+ release, harmless, and its row returns the week the registry does. A row is carried only when
5736
+ the job's commit and the manifest's agree: two sources disagreeing means someone is wrong, and
5737
+ the honest outcome is a re-embed next run, not a row that may describe a tree the registry has
5738
+ left.
5739
+
5740
+ <b>Cost after.</b> The first run is unchanged. Every run after it costs the registries that
5741
+ moved plus one comparison each for the rest, so a quiet week is a manifest upload and little
5742
+ else, and wall clock is bounded by the largest registry that actually changed rather than by
5743
+ the largest registry.</p></details>
5744
+ <div class="meta">
5745
+ <span class="m">Complexity <b>M</b></span>
5746
+ <span class="m hi">Impact <b>High</b></span>
5747
+ <span class="m">Wow <b class="wow">★★★★</b></span>
5748
+ <span class="m">the manifest already knew which registries had not moved</span>
5749
+ </div>
5750
+ </article>
5751
+
5707
5752
  <article class="cap rcard" id="workflow-linting-actionlint">
5708
5753
  <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · CI/CD</span></div>
5709
5754
  <h3>Workflow linting — <code>actionlint</code></h3>
@@ -0,0 +1,303 @@
1
+ #!/usr/bin/env python3
2
+ # Copyright the boost contributors.
3
+ # SPDX-License-Identifier: Apache-2.0
4
+ """Turn exported vector shards into something a stranger can download.
5
+
6
+ Three subcommands, matching the three halves of publishing:
7
+
8
+ publish_shards.py export --out DIR [--tap owner/repo ...]
9
+ Export every tapped registry's vectors from THIS machine's store.
10
+ Run it where the embeddings already exist — that is the whole point of
11
+ a shard, and re-embedding to publish would defeat it.
12
+
13
+ publish_shards.py unchanged --manifest-url URL --out FILE
14
+ Which tapped registries are already published at the commit they are
15
+ at now. Run it after tapping and BEFORE embedding: every registry it
16
+ lists can be untapped, and the embed pass costs only what moved.
17
+
18
+ publish_shards.py manifest --shard-dir DIR --repo owner/repo [--tag TAG]
19
+ [--carry-forward PREV.json --unchanged FILE...]
20
+ Digest the shards in DIR and write the manifest that `core.shards`
21
+ reads: schema version, the embedding space they all share, and one row
22
+ per shard with its registry commit, size, sha256 and download URL. With
23
+ `--carry-forward`, rows from the previous manifest survive for the
24
+ registries the build jobs reported unchanged — their assets are still
25
+ on the release, byte for byte, so the old row is the right row.
26
+
27
+ WHY THE MANIFEST IS GENERATED AND NOT WRITTEN BY HAND. Three of its fields are
28
+ load-bearing at import time and unguessable: `sha256` is what makes a download
29
+ verifiable, `commit` is what stops a stale shard being merged, and
30
+ `provider`/`model`/`dim` are what stop vectors from two different embedding
31
+ spaces being mixed into one store — a failure that does not raise, it just
32
+ returns nonsense rankings.
33
+
34
+ WHY CARRY FORWARD RATHER THAN RE-EXPORT. Every weekly run used to embed every
35
+ registry from scratch (~9 job-hours for the catalogue) although most registries
36
+ had not moved. The cheap alternative — import last week's shard and re-export
37
+ it — re-uploads ~300 MB of identical vectors a week. Carrying the row forward
38
+ uploads nothing: the asset is already on the release, and `--clobber` never
39
+ deletes what it does not replace.
40
+
41
+ WHICH EMBEDDING SPACE TO PUBLISH. The keyless one. `embed` resolves Voyage, then
42
+ OpenAI, then the local ONNX `BAAI/bge-small-en-v1.5` that ships with the `rag`
43
+ extra, so a shard built on a machine holding `VOYAGE_API_KEY` is 1024-d
44
+ `voyage-4` and can only be imported — and queried — by someone else holding that
45
+ key. Export refuses to mix spaces for that reason, and says which one it found.
46
+ """
47
+ from __future__ import annotations
48
+
49
+ import argparse
50
+ import hashlib
51
+ import json
52
+ import sys
53
+ from datetime import UTC, datetime
54
+ from pathlib import Path
55
+
56
+ sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
57
+
58
+ from boost_cli.core import dense, gitutil, registry, shards
59
+ from boost_cli.errors import BoostError
60
+
61
+ DEFAULT_TAG = "shards-latest"
62
+
63
+
64
+ def _safe(tap: str) -> str:
65
+ return tap.replace("/", "__")
66
+
67
+
68
+ def _space(d: dict) -> dict:
69
+ """The (provider, model, dim) triple, normalised so JSON and shard agree."""
70
+ return {"provider": str(d.get("provider") or ""),
71
+ "model": str(d.get("model") or ""),
72
+ "dim": int(d.get("dim") or 0)}
73
+
74
+
75
+ def _fmt_space(space: dict) -> str:
76
+ return "%s/%s/%sd" % (space["provider"], space["model"], space["dim"])
77
+
78
+
79
+ def cmd_export(args: argparse.Namespace) -> int:
80
+ """Write one `<tap>.shard.json` per tap into `--out`."""
81
+ taps = args.tap or [t.name for t in registry.list_taps()]
82
+ if not taps:
83
+ print("no taps configured on this machine", file=sys.stderr)
84
+ return 1
85
+ out_dir = Path(args.out)
86
+ out_dir.mkdir(parents=True, exist_ok=True)
87
+ written = 0
88
+ for tap in taps:
89
+ try:
90
+ shard = dense.export_shard(tap)
91
+ except BoostError as exc:
92
+ print("skip %s: %s" % (tap, exc.message), file=sys.stderr)
93
+ continue
94
+ if not shard.get("chunks"):
95
+ print("skip %s: no vectors" % tap, file=sys.stderr)
96
+ continue
97
+ dest = out_dir / (_safe(tap) + ".shard.json")
98
+ dest.write_text(json.dumps(shard), encoding="utf-8")
99
+ written += 1
100
+ print("%s: %d chunks, %s @ %s"
101
+ % (tap, len(shard["chunks"]), shard.get("model"),
102
+ str(shard.get("commit"))[:8]))
103
+ print("wrote %d shard(s) to %s" % (written, out_dir))
104
+ return 0 if written else 1
105
+
106
+
107
+ def cmd_unchanged(args: argparse.Namespace) -> int:
108
+ """Write `tap commit` for every tap whose published shard is current.
109
+
110
+ Exit 0 whatever happens: an empty list means "embed everything", which is
111
+ the right outcome for a first run, an unreachable release, or a manifest in
112
+ another embedding space — and a workflow that aborted on any of those would
113
+ never publish the first shard.
114
+ """
115
+ lines: list[str] = []
116
+ try:
117
+ manifest = shards.fetch_manifest(args.manifest_url)
118
+ except BoostError as exc:
119
+ print("no usable manifest (%s) — embedding everything" % exc.message,
120
+ file=sys.stderr)
121
+ manifest = None
122
+ if manifest is not None:
123
+ why = shards.incompatible(manifest)
124
+ if why:
125
+ print("published shards are not in this run's space (%s) — "
126
+ "embedding everything" % why, file=sys.stderr)
127
+ else:
128
+ commits = {t.name: (gitutil.head_commit(t.path) if t.is_cloned
129
+ else "")
130
+ for t in registry.list_taps()}
131
+ for tap, row in shards.unchanged(manifest, commits).items():
132
+ lines.append("%s %s" % (tap, row["commit"]))
133
+ text = "".join(line + "\n" for line in lines)
134
+ if args.out:
135
+ Path(args.out).write_text(text, encoding="utf-8")
136
+ else:
137
+ sys.stdout.write(text)
138
+ print("%d registr%s unchanged since the last publish"
139
+ % (len(lines), "y" if len(lines) == 1 else "ies"), file=sys.stderr)
140
+ return 0
141
+
142
+
143
+ def _fresh_row(path: Path, repo: str, tag: str) -> tuple[dict, dict]:
144
+ """One manifest row plus the embedding space its shard was built in."""
145
+ raw = path.read_bytes()
146
+ shard = json.loads(raw.decode("utf-8"))
147
+ missing = [k for k in ("tap", "commit", "provider", "model", "dim")
148
+ if not shard.get(k)]
149
+ if missing:
150
+ raise SystemExit("%s is missing %s" % (path.name, ", ".join(missing)))
151
+ row = {
152
+ "tap": shard["tap"],
153
+ "commit": shard["commit"],
154
+ "chunks": len(shard.get("chunks") or []),
155
+ "bytes": len(raw),
156
+ "sha256": hashlib.sha256(raw).hexdigest(),
157
+ "url": "https://github.com/%s/releases/download/%s/%s"
158
+ % (repo, tag, path.name),
159
+ }
160
+ return row, _space(shard)
161
+
162
+
163
+ def _carried_rows(prev_path: str, unchanged_files: list[str],
164
+ fresh_taps: set[str], space: dict | None
165
+ ) -> tuple[list[dict], dict | None]:
166
+ """Rows from the previous manifest for registries reported unchanged.
167
+
168
+ Returns ``(rows, previous_space)``. Every guard here refuses rather than
169
+ degrades: a row is carried only for the exact commit the job saw, only
170
+ when the previous manifest is in this run's embedding space, and never
171
+ for a registry a fresh shard already describes.
172
+ """
173
+ try:
174
+ prev = json.loads(Path(prev_path).read_text(encoding="utf-8"))
175
+ except (OSError, json.JSONDecodeError) as exc:
176
+ print("previous manifest unreadable (%s) — carrying nothing forward"
177
+ % exc, file=sys.stderr)
178
+ return [], None
179
+ prev_space = _space(prev)
180
+ if space is not None and prev_space != space:
181
+ print("previous manifest is %s, this run is %s — carrying nothing "
182
+ "forward" % (_fmt_space(prev_space), _fmt_space(space)),
183
+ file=sys.stderr)
184
+ return [], prev_space
185
+ wanted: dict[str, str] = {}
186
+ for name in unchanged_files:
187
+ try:
188
+ text = Path(name).read_text(encoding="utf-8")
189
+ except OSError as exc:
190
+ print("cannot read %s (%s) — its registries will be re-embedded "
191
+ "next run" % (name, exc), file=sys.stderr)
192
+ continue
193
+ for line in text.splitlines():
194
+ parts = line.split()
195
+ if len(parts) == 2:
196
+ wanted[parts[0]] = parts[1]
197
+ index = shards.rows(prev)
198
+ out: list[dict] = []
199
+ for tap, commit in sorted(wanted.items()):
200
+ if tap in fresh_taps:
201
+ continue
202
+ row = index.get(tap)
203
+ if row is None or str(row.get("commit")) != commit:
204
+ # The job says one commit, the manifest another: someone is wrong,
205
+ # and a row carried under those conditions could describe a tree
206
+ # the registry is no longer at. Re-embedded next run.
207
+ continue
208
+ out.append(dict(row))
209
+ return out, prev_space
210
+
211
+
212
+ def cmd_manifest(args: argparse.Namespace) -> int:
213
+ """Digest a directory of shards (plus carried rows) into one manifest."""
214
+ shard_dir = Path(args.shard_dir)
215
+ files = sorted(shard_dir.glob("*.shard.json"))
216
+ rows: list[dict] = []
217
+ spaces: list[dict] = []
218
+ for path in files:
219
+ row, space = _fresh_row(path, args.repo, args.tag)
220
+ rows.append(row)
221
+ spaces.append(space)
222
+ first = spaces[0] if spaces else None
223
+ for path, space in zip(files, spaces, strict=True):
224
+ if space != first:
225
+ # Refuse rather than publish a manifest whose top-level space is a
226
+ # lie for some of its rows: `core.shards.incompatible` reads that
227
+ # one header to decide whether to download anything at all.
228
+ raise SystemExit(
229
+ "%s is %s but the others are %s — publish one embedding space "
230
+ "per manifest" % (path.name, _fmt_space(space),
231
+ _fmt_space(first or {})))
232
+ carried = 0
233
+ if args.carry_forward:
234
+ old, prev_space = _carried_rows(args.carry_forward, args.unchanged,
235
+ {r["tap"] for r in rows}, first)
236
+ rows.extend(old)
237
+ carried = len(old)
238
+ if first is None and old:
239
+ # A quiet week: nothing moved, nothing fresh, and the manifest is
240
+ # still due. Its space is the previous manifest's.
241
+ first = prev_space
242
+ if not rows or first is None:
243
+ print("nothing to publish: no *.shard.json under %s and nothing "
244
+ "carried forward" % shard_dir, file=sys.stderr)
245
+ return 1
246
+ manifest = {
247
+ "version": 1,
248
+ "generated": datetime.now(UTC).strftime("%Y-%m-%dT%H:%M:%SZ"),
249
+ "provider": first["provider"],
250
+ "model": first["model"],
251
+ "dim": first["dim"],
252
+ "shards": sorted(rows, key=lambda r: r["tap"]),
253
+ }
254
+ dest = Path(args.out)
255
+ dest.write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")
256
+ total = sum(int(r.get("chunks") or 0) for r in rows)
257
+ print("manifest: %d shard(s) (%d fresh, %d carried forward), %s chunks, "
258
+ "%s -> %s" % (len(rows), len(rows) - carried, carried,
259
+ format(total, ","), _fmt_space(first), dest))
260
+ return 0
261
+
262
+
263
+ def main(argv: list[str] | None = None) -> int:
264
+ p = argparse.ArgumentParser(description=__doc__,
265
+ formatter_class=argparse.RawDescriptionHelpFormatter)
266
+ sub = p.add_subparsers(dest="cmd", required=True)
267
+
268
+ ex = sub.add_parser("export", help="export this machine's vectors")
269
+ ex.add_argument("--out", required=True, metavar="DIR")
270
+ ex.add_argument("--tap", action="append", metavar="OWNER/REPO",
271
+ help="only this tap (repeatable); default is every tap")
272
+ ex.set_defaults(func=cmd_export)
273
+
274
+ un = sub.add_parser("unchanged",
275
+ help="list tapped registries already published at "
276
+ "their current commit")
277
+ un.add_argument("--manifest-url", metavar="URL",
278
+ help="the published manifest (default: boost's own)")
279
+ un.add_argument("--out", metavar="FILE",
280
+ help="write `tap commit` lines here instead of stdout")
281
+ un.set_defaults(func=cmd_unchanged)
282
+
283
+ mf = sub.add_parser("manifest", help="write manifest.json for a shard dir")
284
+ mf.add_argument("--shard-dir", required=True, metavar="DIR")
285
+ mf.add_argument("--repo", required=True, metavar="OWNER/REPO",
286
+ help="repo whose release hosts the assets")
287
+ mf.add_argument("--tag", default=DEFAULT_TAG,
288
+ help="release tag hosting the assets (default: %(default)s)")
289
+ mf.add_argument("--out", default="manifest.json", metavar="FILE")
290
+ mf.add_argument("--carry-forward", metavar="PREV.json",
291
+ help="the previous manifest; its rows survive for "
292
+ "registries listed in --unchanged files")
293
+ mf.add_argument("--unchanged", nargs="*", default=[], metavar="FILE",
294
+ help="`tap commit` files written by "
295
+ "`publish_shards.py unchanged` in the build jobs")
296
+ mf.set_defaults(func=cmd_manifest)
297
+
298
+ args = p.parse_args(argv)
299
+ return int(args.func(args))
300
+
301
+
302
+ if __name__ == "__main__":
303
+ raise SystemExit(main())