boost-skill-cli 1.0.444__tar.gz → 1.0.446__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 (691) hide show
  1. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/CLAUDE.md +8 -6
  2. {boost_skill_cli-1.0.444/boost_skill_cli.egg-info → boost_skill_cli-1.0.446}/PKG-INFO +2 -2
  3. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/README.md +1 -1
  4. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/_version.py +2 -2
  5. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/store.py +13 -1
  6. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446/boost_skill_cli.egg-info}/PKG-INFO +2 -2
  7. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  8. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/index.html +2 -2
  9. boost_skill_cli-1.0.446/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +53 -0
  10. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap.html +51 -1
  11. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/pyproject.toml +5 -1
  12. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/smoke.sh +5 -0
  13. boost_skill_cli-1.0.446/tests/unit/test_smoke_covers_every_command.py +73 -0
  14. boost_skill_cli-1.0.446/tests/unit/test_sync_repairs_gutted_skill.py +96 -0
  15. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.gitattributes +0 -0
  16. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.gitignore +0 -0
  17. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.gitleaks.toml +0 -0
  18. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.htmlvalidate.json +0 -0
  19. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.lighthouserc.json +0 -0
  20. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.lycheeignore +0 -0
  21. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.markdownlint-cli2.jsonc +0 -0
  22. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.pre-commit-config.yaml +0 -0
  23. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.stylelintrc.json +0 -0
  24. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.vale/styles/boost/Terminology.yml +0 -0
  25. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  26. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/.vale.ini +0 -0
  27. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/CODE_OF_CONDUCT.md +0 -0
  28. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/CONTRIBUTING.md +0 -0
  29. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/LICENSE +0 -0
  30. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/MANIFEST.in +0 -0
  31. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/Makefile +0 -0
  32. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/SECURITY.md +0 -0
  33. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost +0 -0
  34. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/__init__.py +0 -0
  35. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/__main__.py +0 -0
  36. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/cli.py +0 -0
  37. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/cliparse.py +0 -0
  38. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/__init__.py +0 -0
  39. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/_common.py +0 -0
  40. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/bmad.py +0 -0
  41. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/configuration.py +0 -0
  42. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/discovery.py +0 -0
  43. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/hooks.py +0 -0
  44. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/info.py +0 -0
  45. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/intelligence.py +0 -0
  46. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/pkg.py +0 -0
  47. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/quality.py +0 -0
  48. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/run.py +0 -0
  49. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/safety.py +0 -0
  50. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/taps.py +0 -0
  51. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/commands/team.py +0 -0
  52. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/__init__.py +0 -0
  53. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/adapters.py +0 -0
  54. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/agents.py +0 -0
  55. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/ai.py +0 -0
  56. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/bmad.py +0 -0
  57. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/bootstrap.py +0 -0
  58. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/builtin.py +0 -0
  59. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/capabilities.py +0 -0
  60. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/catalog.py +0 -0
  61. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/chat.py +0 -0
  62. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/claude_settings.py +0 -0
  63. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/complete.py +0 -0
  64. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/config.py +0 -0
  65. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/dense.py +0 -0
  66. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/ed25519.py +0 -0
  67. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/embed.py +0 -0
  68. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/faithfulness.py +0 -0
  69. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/frontmatter.py +0 -0
  70. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/gitutil.py +0 -0
  71. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/imperative.py +0 -0
  72. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/injectscan.py +0 -0
  73. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/installscan.py +0 -0
  74. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/integrity.py +0 -0
  75. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/journal.py +0 -0
  76. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/localembed.py +0 -0
  77. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/lockfile.py +0 -0
  78. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/logs.py +0 -0
  79. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/mcp.py +0 -0
  80. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/mcpdecl.py +0 -0
  81. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/mcphost.py +0 -0
  82. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/minisign.py +0 -0
  83. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/nethttp.py +0 -0
  84. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/output.py +0 -0
  85. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/paths.py +0 -0
  86. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/policy.py +0 -0
  87. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/projectlock.py +0 -0
  88. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/provenance.py +0 -0
  89. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/rag.py +0 -0
  90. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/registry.py +0 -0
  91. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/resolve.py +0 -0
  92. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/rules.py +0 -0
  93. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/scopes.py +0 -0
  94. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/secretscan.py +0 -0
  95. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/selfupdate.py +0 -0
  96. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/serve.py +0 -0
  97. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/stackprobe.py +0 -0
  98. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/staleness.py +0 -0
  99. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/trustaudit.py +0 -0
  100. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/typosquat.py +0 -0
  101. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/updatediff.py +0 -0
  102. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/util.py +0 -0
  103. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/core/workflows.py +0 -0
  104. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/data/registries.json +0 -0
  105. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/data/rules/boost-first.mdc +0 -0
  106. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/errors.py +0 -0
  107. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_cli/spin.py +0 -0
  108. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_langchain/__init__.py +0 -0
  109. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_langchain/_compat.py +0 -0
  110. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_langchain/graph.py +0 -0
  111. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_langchain/loader.py +0 -0
  112. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_langchain/py.typed +0 -0
  113. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_langchain/retriever.py +0 -0
  114. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  115. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  116. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_skill_cli.egg-info/requires.txt +0 -0
  117. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/boost_skill_cli.egg-info/top_level.txt +0 -0
  118. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/codecov.yml +0 -0
  119. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/.claude/settings.local.json +0 -0
  120. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/DEBUGGING.md +0 -0
  121. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/adapters.html +0 -0
  122. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/architecture/README.md +0 -0
  123. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/architecture/c4-components-core.md +0 -0
  124. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/architecture/c4-containers.md +0 -0
  125. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/architecture/c4-context.md +0 -0
  126. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/architecture/c4-dynamic-install.md +0 -0
  127. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/gifs/distill.gif +0 -0
  128. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/gifs/doctor.gif +0 -0
  129. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/gifs/explain.gif +0 -0
  130. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/gifs/hooks.gif +0 -0
  131. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/gifs/install.gif +0 -0
  132. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/gifs/pulse.gif +0 -0
  133. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/gifs/search.gif +0 -0
  134. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/gifs/tap.gif +0 -0
  135. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/tapes/distill.tape +0 -0
  136. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/tapes/doctor.tape +0 -0
  137. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/tapes/explain.tape +0 -0
  138. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/tapes/hooks.tape +0 -0
  139. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/tapes/install.tape +0 -0
  140. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/tapes/pulse.tape +0 -0
  141. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/tapes/search.tape +0 -0
  142. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel/tapes/tap.tape +0 -0
  143. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/carousel.html +0 -0
  144. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/chat.html +0 -0
  145. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/commands.html +0 -0
  146. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/demo-index.json +0 -0
  147. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/demo.gif +0 -0
  148. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/demo.html +0 -0
  149. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/demo.tape +0 -0
  150. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/design-roadmap.html +0 -0
  151. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/eval-latest.json +0 -0
  152. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/eval.html +0 -0
  153. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/langchain.html +0 -0
  154. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/mcp-hub.html +0 -0
  155. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/rag-architecture.md +0 -0
  156. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D01.md +0 -0
  157. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D02.md +0 -0
  158. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D03.md +0 -0
  159. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D04.md +0 -0
  160. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D05.md +0 -0
  161. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D06.md +0 -0
  162. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D07.md +0 -0
  163. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D08.md +0 -0
  164. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D09.md +0 -0
  165. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D10.md +0 -0
  166. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D11.md +0 -0
  167. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D12.md +0 -0
  168. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D13.md +0 -0
  169. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D14.md +0 -0
  170. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D15.md +0 -0
  171. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D16.md +0 -0
  172. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D17.md +0 -0
  173. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D18.md +0 -0
  174. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D19.md +0 -0
  175. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D20.md +0 -0
  176. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D21.md +0 -0
  177. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D22.md +0 -0
  178. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D23.md +0 -0
  179. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D24.md +0 -0
  180. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D25.md +0 -0
  181. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/BOOST-D26.md +0 -0
  182. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  183. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  184. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  185. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  186. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  187. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  188. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  189. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  190. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  191. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  192. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  193. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  194. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  195. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/boost-first-rule.md +0 -0
  196. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  197. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  198. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  199. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  200. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  201. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  202. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  203. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  204. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  205. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  206. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  207. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  208. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  209. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  210. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  211. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  212. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/command-carousel-page.md +0 -0
  213. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  214. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  215. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  216. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  217. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  218. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  219. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  220. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  221. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  222. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  223. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  224. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  225. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  226. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  227. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  228. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  229. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  230. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  231. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  232. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  233. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  234. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  235. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  236. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  237. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  238. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  239. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  240. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  241. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  242. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  243. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  244. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  245. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  246. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  247. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  248. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  249. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  250. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  251. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  252. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  253. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  254. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  255. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  256. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  257. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/github-community-health-files.md +0 -0
  258. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  259. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  260. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  261. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  262. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  263. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  264. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  265. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  266. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  267. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  268. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  269. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  270. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  271. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  272. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  273. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  274. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  275. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  276. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  277. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  278. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  279. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  280. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  281. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  282. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  283. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  284. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  285. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  286. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  287. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  288. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  289. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  290. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  291. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  292. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  293. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  294. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  295. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  296. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  297. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  298. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  299. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  300. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  301. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  302. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  303. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  304. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  305. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  306. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  307. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  308. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  309. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  310. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  311. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  312. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  313. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  314. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  315. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  316. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  317. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  318. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  319. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  320. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  321. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  322. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  323. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  324. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  325. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  326. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  327. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  328. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  329. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  330. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  331. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  332. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  333. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  334. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  335. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  336. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  337. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  338. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  339. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  340. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  341. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  342. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  343. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  344. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  345. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  346. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  347. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  348. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  349. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  350. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  351. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  352. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  353. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  354. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  355. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  356. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  357. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  358. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  359. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  360. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  361. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  362. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  363. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  364. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  365. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  366. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  367. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  368. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  369. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  370. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  371. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  372. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  373. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  374. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  375. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  376. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  377. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  378. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  379. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  380. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  381. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  382. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  383. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  384. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  385. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  386. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  387. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  388. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  389. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  390. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  391. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  392. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  393. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  394. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  395. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  396. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  397. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  398. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  399. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  400. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  401. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  402. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  403. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  404. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  405. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  406. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  407. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  408. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  409. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  410. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  411. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  412. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  413. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  414. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  415. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  416. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  417. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  418. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  419. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  420. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/workspace-scope-install.md +0 -0
  421. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/zip-strict-audit.md +0 -0
  422. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  423. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  424. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/eslint.config.mjs +0 -0
  425. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/README.md +0 -0
  426. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/__init__.py +0 -0
  427. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/baseline.json +0 -0
  428. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/faithfulness.py +0 -0
  429. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/golden_set.json +0 -0
  430. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/make_corpus.py +0 -0
  431. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/make_golden.py +0 -0
  432. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/metrics.py +0 -0
  433. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/publish_golden_dataset.py +0 -0
  434. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/evals/run_evals.py +0 -0
  435. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/examples/README.md +0 -0
  436. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/examples/adapt-demo.sh +0 -0
  437. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/examples/boost-run-prototype.sh +0 -0
  438. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/index.html +0 -0
  439. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/noxfile.py +0 -0
  440. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/coverage-tools.in +0 -0
  441. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/coverage-tools.txt +0 -0
  442. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/lint-tools.in +0 -0
  443. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/lint-tools.txt +0 -0
  444. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/mutation-tools.in +0 -0
  445. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/mutation-tools.txt +0 -0
  446. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/platform-pins.lock +0 -0
  447. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/release-tools.in +0 -0
  448. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/release-tools.txt +0 -0
  449. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/test-tools.in +0 -0
  450. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/requirements/test-tools.txt +0 -0
  451. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/a11y_check.py +0 -0
  452. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/bench_cli.sh +0 -0
  453. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/build_command_reference.py +0 -0
  454. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/build_demo_index.py +0 -0
  455. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/build_registries.py +0 -0
  456. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/build_roadmap.py +0 -0
  457. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/build_scale_corpus.py +0 -0
  458. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/check_anchors.py +0 -0
  459. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/check_licenses.py +0 -0
  460. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/check_required_checks.py +0 -0
  461. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/ensure_eval_corpus.sh +0 -0
  462. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/eval_corpus.py +0 -0
  463. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/eval_explain.py +0 -0
  464. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/eval_gate.py +0 -0
  465. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/eval_recommend.py +0 -0
  466. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/eval_retrieval.py +0 -0
  467. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/eval_stats_summary.py +0 -0
  468. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/import_budget.py +0 -0
  469. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/lock_toolchain.py +0 -0
  470. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/measure_registry.py +0 -0
  471. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/mutation_gate.py +0 -0
  472. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/mutation_shards.py +0 -0
  473. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/mutation_weights.json +0 -0
  474. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/page_budget.py +0 -0
  475. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/perf_gate.py +0 -0
  476. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/post_deploy_smoke.py +0 -0
  477. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/publish_eval_json.py +0 -0
  478. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/release_guard.py +0 -0
  479. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/release_preflight.py +0 -0
  480. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/scripts/serve_docs.py +0 -0
  481. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/setup.cfg +0 -0
  482. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/sonar-project.properties +0 -0
  483. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/style/README.md +0 -0
  484. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/style/boost.css +0 -0
  485. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/style/boost.js +0 -0
  486. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/style/demo.html +0 -0
  487. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/adapt.feature +0 -0
  488. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/browse.feature +0 -0
  489. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/count.feature +0 -0
  490. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/discover.feature +0 -0
  491. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/doctor.feature +0 -0
  492. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/environment.py +0 -0
  493. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/explain.feature +0 -0
  494. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/index.feature +0 -0
  495. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/install.feature +0 -0
  496. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/list.feature +0 -0
  497. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/mcp.feature +0 -0
  498. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/search.feature +0 -0
  499. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/steps/cli_steps.py +0 -0
  500. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/steps/discovery_steps.py +0 -0
  501. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/steps/mcp_steps.py +0 -0
  502. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/bdd/features/steps/quality_steps.py +0 -0
  503. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/conftest.py +0 -0
  504. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/eval/baseline.json +0 -0
  505. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/eval/explain.jsonl +0 -0
  506. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/eval/golden-natural.jsonl +0 -0
  507. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/eval/golden.jsonl +0 -0
  508. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/eval/recommend.jsonl +0 -0
  509. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/eval/taps-scale.txt +0 -0
  510. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/eval/taps.txt +0 -0
  511. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_capabilities_policy.py +0 -0
  512. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_adapt.py +0 -0
  513. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_bmad.py +0 -0
  514. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_chat.py +0 -0
  515. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_configuration.py +0 -0
  516. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_discovery.py +0 -0
  517. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_hooks.py +0 -0
  518. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_info.py +0 -0
  519. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_intelligence.py +0 -0
  520. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_pkg.py +0 -0
  521. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_quality.py +0 -0
  522. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_taps.py +0 -0
  523. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_cli_team.py +0 -0
  524. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_everyday_loop.py +0 -0
  525. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_integrity_enforce.py +0 -0
  526. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_kind_conformance.py +0 -0
  527. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_property_parsers.py +0 -0
  528. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_run.py +0 -0
  529. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_tap_signing.py +0 -0
  530. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/functional/test_workspace_scope.py +0 -0
  531. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/README.md +0 -0
  532. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  533. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  534. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  535. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  536. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  537. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  538. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  539. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  540. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  541. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  542. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  543. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  544. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  545. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  546. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  547. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  548. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  549. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  550. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  551. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  552. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/fuzz_frontmatter.py +0 -0
  553. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/fuzz/fuzz_registry.py +0 -0
  554. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/langchain/conftest.py +0 -0
  555. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/langchain/test_graph.py +0 -0
  556. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/langchain/test_loader.py +0 -0
  557. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/langchain/test_retriever.py +0 -0
  558. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/make_fixture.py +0 -0
  559. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/perf/test_benchmarks.py +0 -0
  560. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_a11y_check.py +0 -0
  561. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_action_pin_lockstep.py +0 -0
  562. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_adapters.py +0 -0
  563. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_adapters_multi.py +0 -0
  564. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_adapters_runner.py +0 -0
  565. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_agents.py +0 -0
  566. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_ai.py +0 -0
  567. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_bmad_core.py +0 -0
  568. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_boost_first_offer.py +0 -0
  569. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_bootstrap.py +0 -0
  570. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_builtin.py +0 -0
  571. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_capabilities.py +0 -0
  572. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_catalog.py +0 -0
  573. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_chat.py +0 -0
  574. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_check_anchors.py +0 -0
  575. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_check_licenses.py +0 -0
  576. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_claude_settings.py +0 -0
  577. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_cliparse.py +0 -0
  578. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_codeql_analysis_key.py +0 -0
  579. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_command_reference_fresh.py +0 -0
  580. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_community_health_files.py +0 -0
  581. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_complete.py +0 -0
  582. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_config.py +0 -0
  583. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_content_dedupe.py +0 -0
  584. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_dedup_trust.py +0 -0
  585. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_demo_index.py +0 -0
  586. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_dense.py +0 -0
  587. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_dense_fallback.py +0 -0
  588. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_dense_fix_hint.py +0 -0
  589. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_dense_shards.py +0 -0
  590. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_dense_status.py +0 -0
  591. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_dependabot_config.py +0 -0
  592. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_docs_pages_linked.py +0 -0
  593. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_docsite_chrome.py +0 -0
  594. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_ed25519.py +0 -0
  595. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_embed.py +0 -0
  596. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_embed_local.py +0 -0
  597. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_entry_key.py +0 -0
  598. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_errors_and_cli_table.py +0 -0
  599. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_eval_baseline.py +0 -0
  600. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_eval_corpus.py +0 -0
  601. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_eval_faithfulness.py +0 -0
  602. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_eval_gate.py +0 -0
  603. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_eval_grading.py +0 -0
  604. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_eval_metrics.py +0 -0
  605. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_eval_stats_summary.py +0 -0
  606. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  607. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_faithfulness.py +0 -0
  608. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_frontmatter.py +0 -0
  609. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_fuzz_targets.py +0 -0
  610. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  611. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_gitleaks_config.py +0 -0
  612. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_gitutil.py +0 -0
  613. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_gitutil_lfs.py +0 -0
  614. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_imperative.py +0 -0
  615. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_import_budget.py +0 -0
  616. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_injectscan.py +0 -0
  617. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_installscan.py +0 -0
  618. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_integrity.py +0 -0
  619. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_journal.py +0 -0
  620. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_langchain_packaging.py +0 -0
  621. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_link_ownership.py +0 -0
  622. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_localembed.py +0 -0
  623. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_localembed_e2e.py +0 -0
  624. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_lockfile.py +0 -0
  625. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_logs.py +0 -0
  626. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_marketing_counts.py +0 -0
  627. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_mcp.py +0 -0
  628. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_mcp_install_scan.py +0 -0
  629. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_mcpdecl.py +0 -0
  630. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_mcphost.py +0 -0
  631. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_measure_registry.py +0 -0
  632. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_minisign.py +0 -0
  633. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_mutation_hardening.py +0 -0
  634. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_mutation_shards.py +0 -0
  635. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_mutation_subfile_shards.py +0 -0
  636. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_mutmut_source_paths.py +0 -0
  637. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_nethttp.py +0 -0
  638. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_output.py +0 -0
  639. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_page_budget.py +0 -0
  640. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_paths.py +0 -0
  641. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_perf_gate.py +0 -0
  642. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_pkg_confusions.py +0 -0
  643. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_pkg_injection.py +0 -0
  644. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_pkg_secrets.py +0 -0
  645. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_platform_pins.py +0 -0
  646. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_policy.py +0 -0
  647. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_post_deploy_smoke.py +0 -0
  648. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_project_mcp_sidecar.py +0 -0
  649. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_projectlock.py +0 -0
  650. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_provenance.py +0 -0
  651. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_publish_golden_dataset.py +0 -0
  652. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_rag.py +0 -0
  653. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_rag_fusion.py +0 -0
  654. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_registries_fresh.py +0 -0
  655. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_registry.py +0 -0
  656. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_registry_categories.py +0 -0
  657. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_registry_control_chars.py +0 -0
  658. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_release_guard.py +0 -0
  659. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_release_preflight.py +0 -0
  660. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_required_checks.py +0 -0
  661. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_resolve.py +0 -0
  662. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_roadmap_fresh.py +0 -0
  663. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_rules.py +0 -0
  664. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_scale_corpus.py +0 -0
  665. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_scopes.py +0 -0
  666. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_secretscan.py +0 -0
  667. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_selfupdate.py +0 -0
  668. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_serve.py +0 -0
  669. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_serve_docs.py +0 -0
  670. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_spin.py +0 -0
  671. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_stackprobe.py +0 -0
  672. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_staleness.py +0 -0
  673. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_store.py +0 -0
  674. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_token_parity.py +0 -0
  675. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_toolchain_lock.py +0 -0
  676. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_trustaudit.py +0 -0
  677. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_typosquat.py +0 -0
  678. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_updatediff.py +0 -0
  679. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_util.py +0 -0
  680. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_version.py +0 -0
  681. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_workflow_concurrency.py +0 -0
  682. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  683. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  684. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_workflow_timeouts.py +0 -0
  685. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_workflows.py +0 -0
  686. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  687. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/visual/a11y_check.mjs +0 -0
  688. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/visual/console_check.mjs +0 -0
  689. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/visual/package-lock.json +0 -0
  690. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/visual/package.json +0 -0
  691. {boost_skill_cli-1.0.444 → boost_skill_cli-1.0.446}/tests/visual/visual_check.mjs +0 -0
@@ -150,11 +150,13 @@ line coverage. Target `boost_cli/core` behavior with assertions, not just import
150
150
  publish workflow filename must stay `publish.yml` (PyPI Trusted Publisher
151
151
  matches on it).
152
152
  - **Target Python ≥ 3.12** (`requires-python = ">=3.12"`). Structural pattern
153
- matching and runtime `X | Y` unions are now legal. The `typing.List` →
154
- `list` sweep is deliberately *not* done yet: ruff's UP006/UP035/UP045 stay in
155
- the ignore list until their own PR, because rewriting annotations across ~60
156
- modules obliterates blame and conflicts with every branch in flight. Write new
157
- code in the modern style; don't bulk-rewrite old code in an unrelated PR.
153
+ matching and runtime `X | Y` unions are now legal. The `typing.List` → `list`
154
+ sweep is **done**: UP006/UP035/UP045 are selected, not ignored, and report zero
155
+ violations. (This entry described the sweep as deferred long after it landed —
156
+ measure before trusting a "not done yet" note.) `UP031` printf-formatting *is*
157
+ still ignored, and deliberately: it is an unsafe fix over ~1,000 call sites in
158
+ `boost_cli` alone. Write new code in the modern style; don't bulk-rewrite old
159
+ code in an unrelated PR.
158
160
  - **Three item kinds, one scanner.** `core/catalog.scan_dir` indexes `skill`
159
161
  (SKILL.md), `rule` (.mdc/.cursorrules/.windsurfrules/.clinerules), and
160
162
  `workflow` (commands/agents/workflows Markdown). **All three install**, and
@@ -294,7 +296,7 @@ each agent's skills dir, and updating the lock file.
294
296
 
295
297
  **Search has two engines**, both in `core/`: `rag.py` is the always-on,
296
298
  zero-dependency BM25 engine (full-content index, auto-builds on first
297
- search — this is what the required `eval` gate floors at recall@k ≥ 0.85).
299
+ search — this is what the required `eval` gate floors at recall@k ≥ 0.78).
298
300
  `dense.py` is optional dense/vector retrieval behind the `[rag]` extra —
299
301
  **no API key required**: `embed.py` tries Voyage, then OpenAI, then a local
300
302
  `BAAI/bge-small-en-v1.5` that ships with the extra, so a key is a quality
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.444
3
+ Version: 1.0.446
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -1161,7 +1161,7 @@ Four layers, all enforced (`make check` runs the full set; CI runs the same thin
1161
1161
  | Layer | What it does | Gate |
1162
1162
  |---|---|---|
1163
1163
  | `make test` | pytest across `tests/unit/` (every core module) and `tests/functional/` (drives all 78 commands in-process against sandboxed homes) | **≥80% line coverage** of `boost_cli` (`fail_under` in pyproject.toml) |
1164
- | `make smoke` | `tests/smoke.sh` — 170 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
1164
+ | `make smoke` | `tests/smoke.sh` — 174 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
1165
1165
  | `make mutation` | [mutmut] mutates `boost_cli/core` (~9,900 mutants) and reruns the unit suite against each one | **≥80% killed** (`scripts/mutation_gate.py`) |
1166
1166
  | `make evals` | scores the search ranker on a graded golden set — recall@5/@10, MRR, nDCG@5/@10 | **metric floors + no statistically significant regression** (`scripts/eval_gate.py`) |
1167
1167
 
@@ -443,7 +443,7 @@ Four layers, all enforced (`make check` runs the full set; CI runs the same thin
443
443
  | Layer | What it does | Gate |
444
444
  |---|---|---|
445
445
  | `make test` | pytest across `tests/unit/` (every core module) and `tests/functional/` (drives all 78 commands in-process against sandboxed homes) | **≥80% line coverage** of `boost_cli` (`fail_under` in pyproject.toml) |
446
- | `make smoke` | `tests/smoke.sh` — 170 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
446
+ | `make smoke` | `tests/smoke.sh` — 174 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
447
447
  | `make mutation` | [mutmut] mutates `boost_cli/core` (~9,900 mutants) and reruns the unit suite against each one | **≥80% killed** (`scripts/mutation_gate.py`) |
448
448
  | `make evals` | scores the search ranker on a graded golden set — recall@5/@10, MRR, nDCG@5/@10 | **metric floors + no statistically significant regression** (`scripts/eval_gate.py`) |
449
449
 
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.0.444'
22
- __version_tuple__ = version_tuple = (1, 0, 444)
21
+ __version__ = version = '1.0.446'
22
+ __version_tuple__ = version_tuple = (1, 0, 446)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1269,7 +1269,19 @@ def sync_plan() -> dict[str, list]:
1269
1269
  "missing_materializations": [], "out_of_scope_links": []}
1270
1270
  for name, entry in lock.items():
1271
1271
  sdir = skill_store_dir(name)
1272
- if not sdir.is_dir():
1272
+ # A directory with no SKILL.md counts as missing, not as healthy. The
1273
+ # check used to be `is_dir()` alone, and the gap was reachable: an
1274
+ # interrupted copy, a partial rsync or a user deleting the file leaves
1275
+ # the directory behind. `boost edit` and `boost evolve` both refuse such
1276
+ # a skill with the hint "repair the store with `boost sync`" — and sync
1277
+ # would answer "everything in sync", change nothing, and send the reader
1278
+ # back to the same error. The remedy named the step they had just run.
1279
+ #
1280
+ # `missing_store` is the right bucket rather than a new one: its repair
1281
+ # is already "reinstall this skill from its tap", which is exactly what
1282
+ # a gutted directory needs, and reusing it means sync_apply needs no
1283
+ # change at all.
1284
+ if not sdir.is_dir() or not (sdir / "SKILL.md").is_file():
1273
1285
  plan["missing_store"].append(name)
1274
1286
  continue
1275
1287
  if entry.get("quarantined"):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.444
3
+ Version: 1.0.446
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -1161,7 +1161,7 @@ Four layers, all enforced (`make check` runs the full set; CI runs the same thin
1161
1161
  | Layer | What it does | Gate |
1162
1162
  |---|---|---|
1163
1163
  | `make test` | pytest across `tests/unit/` (every core module) and `tests/functional/` (drives all 78 commands in-process against sandboxed homes) | **≥80% line coverage** of `boost_cli` (`fail_under` in pyproject.toml) |
1164
- | `make smoke` | `tests/smoke.sh` — 170 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
1164
+ | `make smoke` | `tests/smoke.sh` — 174 checks run through the actual `./boost` shim (`--online` also hits real registries) | all pass |
1165
1165
  | `make mutation` | [mutmut] mutates `boost_cli/core` (~9,900 mutants) and reruns the unit suite against each one | **≥80% killed** (`scripts/mutation_gate.py`) |
1166
1166
  | `make evals` | scores the search ranker on a graded golden set — recall@5/@10, MRR, nDCG@5/@10 | **metric floors + no statistically significant regression** (`scripts/eval_gate.py`) |
1167
1167
 
@@ -394,6 +394,7 @@ docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md
394
394
  docs/roadmap/items/structured-json-log-output-mode.md
395
395
  docs/roadmap/items/supply-chain-posture-openssf-scorecard.md
396
396
  docs/roadmap/items/surface-every-docs-page-from-the-guide.md
397
+ docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md
397
398
  docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md
398
399
  docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md
399
400
  docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md
@@ -663,10 +664,12 @@ tests/unit/test_secretscan.py
663
664
  tests/unit/test_selfupdate.py
664
665
  tests/unit/test_serve.py
665
666
  tests/unit/test_serve_docs.py
667
+ tests/unit/test_smoke_covers_every_command.py
666
668
  tests/unit/test_spin.py
667
669
  tests/unit/test_stackprobe.py
668
670
  tests/unit/test_staleness.py
669
671
  tests/unit/test_store.py
672
+ tests/unit/test_sync_repairs_gutted_skill.py
670
673
  tests/unit/test_token_parity.py
671
674
  tests/unit/test_toolchain_lock.py
672
675
  tests/unit/test_trustaudit.py
@@ -570,7 +570,7 @@
570
570
  <div class="stats">
571
571
  <div class="stat reveal"><b>70,000+</b><span>Discoverable assets</span></div>
572
572
  <div class="stat reveal"><b>78</b><span>Commands · 8 groups</span></div>
573
- <div class="stat reveal"><b>5</b><span>Pre-tapped registries</span></div>
573
+ <div class="stat reveal"><b>7</b><span>Pre-tapped registries</span></div>
574
574
  <div class="stat reveal"><b>4</b><span>AI agents supported</span></div>
575
575
  </div>
576
576
 
@@ -648,7 +648,7 @@ facilitate structured divergent thinking:
648
648
  <div class="node src">
649
649
  <span class="tag">Source</span>
650
650
  <h3>GitHub registries</h3>
651
- <p>5 pre-tapped registries + a 10,000-skill discovery index</p>
651
+ <p>7 pre-tapped registries + a 10,000-skill discovery index</p>
652
652
  </div>
653
653
  </div>
654
654
  <div class="flow-arrow reveal">
@@ -0,0 +1,53 @@
1
+ ---
2
+ id: sync-could-not-repair-a-gutted-skill
3
+ board: code
4
+ section: internals
5
+ status: shipped
6
+ category: Bug
7
+ complexity: S
8
+ impact: Med
9
+ wow: 4
10
+ note: two commands named `boost sync` as the repair; sync answered "everything in sync" and changed nothing
11
+ order: 111
12
+ owner: fix/sync-repairs-gutted-skill
13
+ pr:
14
+ title: The repair command could not repair the thing two commands sent you to it for
15
+ ---
16
+ <code>boost edit</code> and <code>boost evolve</code> both refuse a skill whose <code>SKILL.md</code>
17
+ is gone, and both name the same remedy:
18
+
19
+ <code>Error: SKILL.md missing from ~/.agents/skills/brainstorming</code><br>
20
+ <code>&nbsp;&nbsp;hint: repair the store with <b>boost sync</b></code>
21
+
22
+ It could not. <code>sync_plan</code> classified a skill as <code>missing_store</code> only when its
23
+ <b>directory</b> was absent (<code>if not sdir.is_dir()</code>), so a directory that still existed
24
+ but had been emptied read as perfectly healthy. Running the named remedy printed
25
+ <b><code>✓ everything in sync</code></b>, changed nothing, and the next <code>boost edit</code>
26
+ produced the identical error. <code>boost heal</code> said <code>nothing to heal</code>.
27
+ <code>boost update</code> said <code>everything up to date</code>. The one command that did repair
28
+ it — <code>boost reinstall</code> — was named by neither hint.
29
+
30
+ <b>That is a loop, not a bad message.</b> The reader runs the suggested fix, observes no change,
31
+ and has no next move — every diagnostic in the tool agrees the store is fine while the command in
32
+ front of them insists it is not. It is the same defect as the shard exporter fixed earlier this
33
+ session, which answered "no vectors — build them first with <code>reindex --dense</code>" inside a
34
+ CI job where <code>reindex --dense</code> had just succeeded on the line above.
35
+
36
+ <b>The state is ordinary, not exotic.</b> An interrupted copy, a partial rsync, a half-finished disk
37
+ cleanup, or a user deleting the file to "start fresh" all leave the directory standing.
38
+
39
+ <b>Why the suite could not see it.</b> One test pins that hint, in
40
+ <code>tests/functional/test_cli_pkg.py</code>, and it removes the <i>whole directory</i> with
41
+ <code>shutil.rmtree</code> — the case <code>sync</code> already handled. Nothing ever deleted just
42
+ the file, so the <i>file-level</i> check in the two commands and the <i>directory-level</i> check in
43
+ <code>sync</code> were never compared with each other. Both were individually correct; the defect
44
+ lived only in the gap between them, which is where three of this session's other bugs also lived.
45
+
46
+ <b>Fixed in the detection, not the repair.</b> <code>sync_apply</code> already knows how to restore a
47
+ <code>missing_store</code> entry — it reinstalls from the recorded tap — so the change is one
48
+ condition, and <code>missing_store</code> is the right bucket precisely because its existing repair
49
+ is what a gutted directory needs. Seven tests pin both directions: the gutted case is now reported
50
+ <i>and</i> actually restored, the wholly-missing directory still is, a healthy skill still is not
51
+ (or <code>sync</code> would reinstall everything on every run), and the restored file is
52
+ byte-identical to the original — restoring an <i>empty</i> SKILL.md would satisfy every other
53
+ assertion and leave <code>boost edit</code> opening a blank document.
@@ -133,7 +133,7 @@
133
133
  <div class="stat"><b>16</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>242</b><span>Loop finds</span></div>
136
+ <div class="stat"><b>243</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -3790,6 +3790,56 @@ looking is worse than no guard, because the green tick still appears.</p></detai
3790
3790
  <span class="m">one codeql-action release arrived as 3 PRs, 2 red — and the green one was the misleading part</span>
3791
3791
  </div>
3792
3792
  </article>
3793
+
3794
+ <article class="cap rcard" id="sync-could-not-repair-a-gutted-skill">
3795
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Bug</span></div>
3796
+ <h3>The repair command could not repair the thing two commands sent you to it for</h3>
3797
+ <details class="cardbody"><summary>Write-up</summary>
3798
+ <p><code>boost edit</code> and <code>boost evolve</code> both refuse a skill whose <code>SKILL.md</code>
3799
+ is gone, and both name the same remedy:
3800
+
3801
+ <code>Error: SKILL.md missing from ~/.agents/skills/brainstorming</code><br>
3802
+ <code>&nbsp;&nbsp;hint: repair the store with <b>boost sync</b></code>
3803
+
3804
+ It could not. <code>sync_plan</code> classified a skill as <code>missing_store</code> only when its
3805
+ <b>directory</b> was absent (<code>if not sdir.is_dir()</code>), so a directory that still existed
3806
+ but had been emptied read as perfectly healthy. Running the named remedy printed
3807
+ <b><code>✓ everything in sync</code></b>, changed nothing, and the next <code>boost edit</code>
3808
+ produced the identical error. <code>boost heal</code> said <code>nothing to heal</code>.
3809
+ <code>boost update</code> said <code>everything up to date</code>. The one command that did repair
3810
+ it — <code>boost reinstall</code> — was named by neither hint.
3811
+
3812
+ <b>That is a loop, not a bad message.</b> The reader runs the suggested fix, observes no change,
3813
+ and has no next move — every diagnostic in the tool agrees the store is fine while the command in
3814
+ front of them insists it is not. It is the same defect as the shard exporter fixed earlier this
3815
+ session, which answered "no vectors — build them first with <code>reindex --dense</code>" inside a
3816
+ CI job where <code>reindex --dense</code> had just succeeded on the line above.
3817
+
3818
+ <b>The state is ordinary, not exotic.</b> An interrupted copy, a partial rsync, a half-finished disk
3819
+ cleanup, or a user deleting the file to "start fresh" all leave the directory standing.
3820
+
3821
+ <b>Why the suite could not see it.</b> One test pins that hint, in
3822
+ <code>tests/functional/test_cli_pkg.py</code>, and it removes the <i>whole directory</i> with
3823
+ <code>shutil.rmtree</code> — the case <code>sync</code> already handled. Nothing ever deleted just
3824
+ the file, so the <i>file-level</i> check in the two commands and the <i>directory-level</i> check in
3825
+ <code>sync</code> were never compared with each other. Both were individually correct; the defect
3826
+ lived only in the gap between them, which is where three of this session's other bugs also lived.
3827
+
3828
+ <b>Fixed in the detection, not the repair.</b> <code>sync_apply</code> already knows how to restore a
3829
+ <code>missing_store</code> entry — it reinstalls from the recorded tap — so the change is one
3830
+ condition, and <code>missing_store</code> is the right bucket precisely because its existing repair
3831
+ is what a gutted directory needs. Seven tests pin both directions: the gutted case is now reported
3832
+ <i>and</i> actually restored, the wholly-missing directory still is, a healthy skill still is not
3833
+ (or <code>sync</code> would reinstall everything on every run), and the restored file is
3834
+ byte-identical to the original — restoring an <i>empty</i> SKILL.md would satisfy every other
3835
+ assertion and leave <code>boost edit</code> opening a blank document.</p></details>
3836
+ <div class="meta">
3837
+ <span class="m">Complexity <b>S</b></span>
3838
+ <span class="m">Impact <b>Med</b></span>
3839
+ <span class="m">Wow <b class="wow">★★★★</b></span>
3840
+ <span class="m">two commands named `boost sync` as the repair; sync answered "everything in sync" and changed nothing</span>
3841
+ </div>
3842
+ </article>
3793
3843
  <!-- /ROADMAP:cards -->
3794
3844
 
3795
3845
  </div>
@@ -176,7 +176,11 @@ ignore = [
176
176
  # batch. Hoisting the handler out of the loop would trade that resilience
177
177
  # for a negligible per-iteration saving.
178
178
  "PERF203", # try-except-in-loop
179
- # printf-formatting is this codebase's house style across ~860 call sites.
179
+ # printf-formatting is this codebase's house style. Measured with
180
+ # `ruff check --select UP031 --statistics`: 1,005 call sites in boost_cli,
181
+ # 1,800 across the whole lint scope. (The figure here read "~860" for a
182
+ # long time — a rationale whose central number has drifted is a rationale
183
+ # nobody re-checked, so it is stated with the command that reproduces it.)
180
184
  # The rewrite is an unsafe fix (`%` and `format` differ on tuples and on
181
185
  # types with a custom `__format__`), it would rewrite nearly every file —
182
186
  # obliterating blame and conflicting with every branch in flight — and it
@@ -239,6 +239,11 @@ protocol
239
239
  pulse
240
240
  replay
241
241
  who
242
+ bmad
243
+ chat
244
+ hooks
245
+ run
246
+ trust
242
247
  CMDS
243
248
 
244
249
  if [ "${1:-}" = "--online" ]; then
@@ -0,0 +1,73 @@
1
+ """Unit tests: the smoke suite's `--help` sweep covers every command.
2
+
3
+ ``tests/smoke.sh`` ends with a loop asserting that every command answers
4
+ ``--help`` without crashing. It is the only tier that runs the real ``./boost``
5
+ shim end to end, so it is the only place a command whose module fails to import,
6
+ or whose parser is malformed, is caught at all.
7
+
8
+ The list is a hand-maintained heredoc, and it had fallen **five commands
9
+ behind** ``cli.COMMANDS`` — ``bmad``, ``chat``, ``hooks``, ``run`` and
10
+ ``trust``. All five happened to answer ``--help`` fine, so nothing was broken;
11
+ what was broken is the guarantee. The suite reported "every command answers
12
+ --help" while asking 73 of 78, and the gap grows silently every time someone
13
+ adds a row to ``COMMANDS`` — which this repo does often, since that is the
14
+ documented way to add a command.
15
+
16
+ A hand-maintained mirror of a generated list is drift waiting to happen, so
17
+ mirror it from the source instead of trusting it to be updated. This is the
18
+ same treatment ``docs/commands.html`` already gets from
19
+ ``build_command_reference.py --check``: the artifact may be written by hand, but
20
+ it may not disagree with ``COMMANDS``.
21
+ """
22
+ from __future__ import annotations
23
+
24
+ import re
25
+ from pathlib import Path
26
+
27
+ import pytest
28
+
29
+ from boost_cli import cli
30
+
31
+ SMOKE = Path(__file__).resolve().parents[2] / "tests" / "smoke.sh"
32
+
33
+ pytestmark = pytest.mark.skipif(
34
+ not SMOKE.exists(), reason="tests/smoke.sh not reachable")
35
+
36
+
37
+ def listed_commands() -> list[str]:
38
+ """The commands smoke.sh feeds to its `--help` loop."""
39
+ text = SMOKE.read_text(encoding="utf-8")
40
+ m = re.search(r"<<'CMDS'\n(.*?)\nCMDS\n", text, re.S)
41
+ assert m, "could not find the CMDS heredoc in smoke.sh"
42
+ return [line.strip() for line in m.group(1).splitlines() if line.strip()]
43
+
44
+
45
+ class TestTheGuardCanActuallySee:
46
+ def test_the_heredoc_is_found_and_populated(self):
47
+ # Without this the comparison below passes vacuously the moment the
48
+ # heredoc is renamed or reformatted.
49
+ assert len(listed_commands()) > 50, listed_commands()
50
+
51
+ def test_a_known_command_is_present(self):
52
+ assert "install" in listed_commands()
53
+
54
+
55
+ class TestEveryCommandIsSmokeTested:
56
+ def test_no_command_is_missing_from_the_sweep(self):
57
+ missing = sorted({name for name, *_ in cli.COMMANDS}
58
+ - set(listed_commands()))
59
+ assert not missing, (
60
+ "smoke.sh claims 'every command answers --help' but never asks "
61
+ "these: %s. Add them to the CMDS heredoc." % ", ".join(missing))
62
+
63
+ def test_the_sweep_lists_no_command_that_no_longer_exists(self):
64
+ # A stale entry fails the suite with an unhelpful "unknown command"
65
+ # rather than pointing at this list.
66
+ stale = sorted(set(listed_commands())
67
+ - {name for name, *_ in cli.COMMANDS})
68
+ assert not stale, stale
69
+
70
+ def test_no_command_is_listed_twice(self):
71
+ listed = listed_commands()
72
+ dupes = sorted({c for c in listed if listed.count(c) > 1})
73
+ assert not dupes, dupes
@@ -0,0 +1,96 @@
1
+ """Unit tests: `boost sync` repairs a skill whose SKILL.md is gone, not just a missing dir.
2
+
3
+ Two commands tell the user that `boost sync` is the repair for a missing
4
+ ``SKILL.md``::
5
+
6
+ $ boost edit brainstorming
7
+ Error: SKILL.md missing from ~/.agents/skills/brainstorming
8
+ hint: repair the store with `boost sync`
9
+
10
+ $ boost evolve brainstorming --feedback ...
11
+ Error: brainstorming has no SKILL.md in the store
12
+ hint: repair with `boost sync`
13
+
14
+ It was not. ``sync_plan`` classified a skill as ``missing_store`` only when its
15
+ **directory** was absent (``if not sdir.is_dir()``), so a directory that still
16
+ existed but had been emptied read as healthy. ``boost sync`` printed
17
+ ``✓ everything in sync``, changed nothing, and the next ``boost edit`` produced
18
+ the identical error — advice that sends the reader round a loop they have
19
+ already completed. ``boost heal`` said ``nothing to heal`` too, and the only
20
+ command that actually repaired it, ``boost reinstall``, was named by neither
21
+ hint.
22
+
23
+ This is not a hypothetical state. An interrupted copy, a partial rsync, a
24
+ half-finished disk cleanup, or a user deleting the file to "start fresh" all
25
+ leave the directory in place.
26
+
27
+ The existing suite could not see it: the one test pinning that hint
28
+ (``tests/functional/test_cli_pkg.py``) removes the whole directory with
29
+ ``shutil.rmtree``, which is the case ``sync`` already handled. Nothing deleted
30
+ only the file, so the file-level check in the two commands and the
31
+ directory-level check in ``sync`` were never compared.
32
+
33
+ Same shape as the `export_shard` bug fixed earlier this session: a remedy that
34
+ names the step the user has already taken.
35
+ """
36
+ from __future__ import annotations
37
+
38
+ from boost_cli.core import store
39
+
40
+
41
+ def _gut(name: str) -> None:
42
+ """Delete a skill's SKILL.md, leaving its store directory in place."""
43
+ path = store.skill_store_dir(name) / "SKILL.md"
44
+ assert path.exists(), "fixture did not install %s" % name
45
+ path.unlink()
46
+
47
+
48
+ class TestSyncPlanSeesAGuttedSkill:
49
+ def test_a_skill_with_no_skill_md_is_reported_as_missing(
50
+ self, installed):
51
+ _gut(installed)
52
+ assert installed in store.sync_plan()["missing_store"]
53
+
54
+ def test_the_directory_still_exists(self, installed):
55
+ # The whole point: this is NOT the rmtree case the old check caught.
56
+ _gut(installed)
57
+ assert store.skill_store_dir(installed).is_dir()
58
+
59
+ def test_a_healthy_skill_is_still_not_reported(self, installed):
60
+ # The rejection must not widen — a working install stays absent from
61
+ # the plan, or `sync` would reinstall everything on every run.
62
+ assert installed not in store.sync_plan()["missing_store"]
63
+
64
+ def test_a_wholly_missing_directory_is_still_reported(self, installed):
65
+ # The case that already worked, kept so the fix cannot regress it.
66
+ import shutil
67
+ shutil.rmtree(store.skill_store_dir(installed))
68
+ assert installed in store.sync_plan()["missing_store"]
69
+
70
+
71
+ class TestSyncActuallyRepairsIt:
72
+ """A plan that names the problem but does not fix it is the same bug."""
73
+
74
+ def test_sync_restores_the_file(self, installed):
75
+ _gut(installed)
76
+
77
+ store.sync_apply(store.sync_plan())
78
+
79
+ assert (store.skill_store_dir(installed) / "SKILL.md").exists()
80
+
81
+ def test_the_repaired_skill_leaves_the_plan_clean(self, installed):
82
+ # The loop the user was stuck in: run the remedy, re-check, still broken.
83
+ _gut(installed)
84
+ store.sync_apply(store.sync_plan())
85
+ assert installed not in store.sync_plan()["missing_store"]
86
+
87
+ def test_the_restored_content_is_the_real_skill(self, installed):
88
+ # Restoring an empty file would satisfy every assertion above and help
89
+ # nobody — `boost edit` would open a blank document.
90
+ before = (store.skill_store_dir(installed)
91
+ / "SKILL.md").read_text(encoding="utf-8")
92
+ _gut(installed)
93
+ store.sync_apply(store.sync_plan())
94
+ after = (store.skill_store_dir(installed)
95
+ / "SKILL.md").read_text(encoding="utf-8")
96
+ assert after.strip() and after == before