boost-skill-cli 1.2.25__tar.gz → 1.2.27__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 (750) hide show
  1. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.vale/styles/config/vocabularies/boost/accept.txt +28 -1
  2. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/PKG-INFO +2 -1
  3. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/README.md +1 -0
  4. boost_skill_cli-1.2.27/SECURITY.md +48 -0
  5. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/_version.py +2 -2
  6. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/quality.py +2 -2
  7. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/PKG-INFO +2 -1
  8. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  9. boost_skill_cli-1.2.27/docs/openssf-badge.md +254 -0
  10. boost_skill_cli-1.2.27/docs/roadmap/items/openssf-best-practices-badge.md +42 -0
  11. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/scorecard-findings-triage.md +5 -3
  12. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap.html +45 -4
  13. boost_skill_cli-1.2.27/docs/security-design.md +191 -0
  14. boost_skill_cli-1.2.25/SECURITY.md +0 -22
  15. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.gitattributes +0 -0
  16. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.gitignore +0 -0
  17. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.gitleaks.toml +0 -0
  18. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.htmlvalidate.json +0 -0
  19. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.lighthouserc.json +0 -0
  20. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.lycheeignore +0 -0
  21. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.markdownlint-cli2.jsonc +0 -0
  22. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.pre-commit-config.yaml +0 -0
  23. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.stylelintrc.json +0 -0
  24. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.vale/styles/boost/AIWriting.yml +0 -0
  25. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.vale/styles/boost/Terminology.yml +0 -0
  26. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/.vale.ini +0 -0
  27. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/CLAUDE.md +0 -0
  28. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/CODE_OF_CONDUCT.md +0 -0
  29. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/CONTRIBUTING.md +0 -0
  30. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/LICENSE +0 -0
  31. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/MANIFEST.in +0 -0
  32. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/Makefile +0 -0
  33. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost +0 -0
  34. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/__init__.py +0 -0
  35. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/__main__.py +0 -0
  36. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/cli.py +0 -0
  37. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/cliparse.py +0 -0
  38. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/__init__.py +0 -0
  39. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/_common.py +0 -0
  40. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/bmad.py +0 -0
  41. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/configuration.py +0 -0
  42. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/discovery.py +0 -0
  43. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/hooks.py +0 -0
  44. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/info.py +0 -0
  45. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/intelligence.py +0 -0
  46. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/pkg.py +0 -0
  47. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/run.py +0 -0
  48. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/safety.py +0 -0
  49. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/taps.py +0 -0
  50. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/commands/team.py +0 -0
  51. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/__init__.py +0 -0
  52. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/adapters.py +0 -0
  53. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/agents.py +0 -0
  54. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/ai.py +0 -0
  55. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/bmad.py +0 -0
  56. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/bootstrap.py +0 -0
  57. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/browse.py +0 -0
  58. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/builtin.py +0 -0
  59. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/capabilities.py +0 -0
  60. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/catalog.py +0 -0
  61. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/catalogbundle.py +0 -0
  62. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/chat.py +0 -0
  63. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/claude_settings.py +0 -0
  64. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/complete.py +0 -0
  65. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/config.py +0 -0
  66. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/dense.py +0 -0
  67. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/ed25519.py +0 -0
  68. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/embed.py +0 -0
  69. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/faithfulness.py +0 -0
  70. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/frontmatter.py +0 -0
  71. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/gitutil.py +0 -0
  72. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/imperative.py +0 -0
  73. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/injectscan.py +0 -0
  74. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/installscan.py +0 -0
  75. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/integrity.py +0 -0
  76. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/journal.py +0 -0
  77. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/localembed.py +0 -0
  78. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/lockfile.py +0 -0
  79. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/logs.py +0 -0
  80. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/mcp.py +0 -0
  81. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/mcpdecl.py +0 -0
  82. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/mcphost.py +0 -0
  83. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/minisign.py +0 -0
  84. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/nethttp.py +0 -0
  85. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/output.py +0 -0
  86. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/paths.py +0 -0
  87. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/policy.py +0 -0
  88. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/projectlock.py +0 -0
  89. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/provenance.py +0 -0
  90. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/rag.py +0 -0
  91. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/registry.py +0 -0
  92. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/resolve.py +0 -0
  93. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/rules.py +0 -0
  94. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/scopes.py +0 -0
  95. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/secretscan.py +0 -0
  96. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/selfupdate.py +0 -0
  97. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/serve.py +0 -0
  98. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/stackprobe.py +0 -0
  99. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/staleness.py +0 -0
  100. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/store.py +0 -0
  101. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/trustaudit.py +0 -0
  102. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/typosquat.py +0 -0
  103. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/updatediff.py +0 -0
  104. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/util.py +0 -0
  105. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/core/workflows.py +0 -0
  106. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/data/registries.json +0 -0
  107. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/data/rules/boost-first.mdc +0 -0
  108. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/errors.py +0 -0
  109. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_cli/spin.py +0 -0
  110. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_langchain/__init__.py +0 -0
  111. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_langchain/_compat.py +0 -0
  112. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_langchain/graph.py +0 -0
  113. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_langchain/loader.py +0 -0
  114. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_langchain/py.typed +0 -0
  115. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_langchain/retriever.py +0 -0
  116. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  117. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  118. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/requires.txt +0 -0
  119. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/boost_skill_cli.egg-info/top_level.txt +0 -0
  120. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/codecov.yml +0 -0
  121. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/.claude/settings.local.json +0 -0
  122. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/DEBUGGING.md +0 -0
  123. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/adapters.html +0 -0
  124. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/architecture/README.md +0 -0
  125. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/architecture/c4-components-core.md +0 -0
  126. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/architecture/c4-containers.md +0 -0
  127. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/architecture/c4-context.md +0 -0
  128. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/architecture/c4-dynamic-install.md +0 -0
  129. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/gifs/distill.gif +0 -0
  130. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/gifs/doctor.gif +0 -0
  131. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/gifs/explain.gif +0 -0
  132. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/gifs/hooks.gif +0 -0
  133. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/gifs/install.gif +0 -0
  134. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/gifs/pulse.gif +0 -0
  135. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/gifs/search.gif +0 -0
  136. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/gifs/tap.gif +0 -0
  137. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/tapes/distill.tape +0 -0
  138. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/tapes/doctor.tape +0 -0
  139. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/tapes/explain.tape +0 -0
  140. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/tapes/hooks.tape +0 -0
  141. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/tapes/install.tape +0 -0
  142. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/tapes/pulse.tape +0 -0
  143. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/tapes/search.tape +0 -0
  144. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel/tapes/tap.tape +0 -0
  145. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/carousel.html +0 -0
  146. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/chat.html +0 -0
  147. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/commands.html +0 -0
  148. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/demo-index.json +0 -0
  149. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/demo.gif +0 -0
  150. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/demo.html +0 -0
  151. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/demo.tape +0 -0
  152. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/design-roadmap.html +0 -0
  153. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/eval-latest.json +0 -0
  154. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/eval.html +0 -0
  155. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/index.html +0 -0
  156. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/langchain.html +0 -0
  157. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/mcp-hub.html +0 -0
  158. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/rag-architecture.md +0 -0
  159. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D01.md +0 -0
  160. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D02.md +0 -0
  161. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D03.md +0 -0
  162. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D04.md +0 -0
  163. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D05.md +0 -0
  164. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D06.md +0 -0
  165. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D07.md +0 -0
  166. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D08.md +0 -0
  167. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D09.md +0 -0
  168. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D10.md +0 -0
  169. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D11.md +0 -0
  170. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D12.md +0 -0
  171. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D13.md +0 -0
  172. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D14.md +0 -0
  173. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D15.md +0 -0
  174. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D16.md +0 -0
  175. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D17.md +0 -0
  176. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D18.md +0 -0
  177. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D19.md +0 -0
  178. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D20.md +0 -0
  179. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D21.md +0 -0
  180. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D22.md +0 -0
  181. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D23.md +0 -0
  182. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D24.md +0 -0
  183. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D25.md +0 -0
  184. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/BOOST-D26.md +0 -0
  185. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  186. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  187. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  188. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  189. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  190. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  191. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  192. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  193. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  194. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  195. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  196. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  197. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  198. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  199. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/boost-first-rule.md +0 -0
  200. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  201. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  202. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  203. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  204. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  205. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  206. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  207. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  208. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  209. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  210. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  211. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  212. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  213. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  214. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  215. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  216. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  217. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  218. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  219. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  220. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/command-carousel-page.md +0 -0
  221. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  222. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  223. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  224. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  225. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  226. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  227. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  228. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  229. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  230. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  231. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  232. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  233. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  234. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  235. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  236. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  237. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  238. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  239. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  240. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  241. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  242. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  243. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  244. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  245. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  246. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  247. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  248. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  249. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  250. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  251. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  252. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  253. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  254. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  255. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  256. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  257. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  258. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  259. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  260. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  261. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  262. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  263. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  264. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  265. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  266. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  267. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  268. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/github-community-health-files.md +0 -0
  269. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  270. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  271. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  272. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  273. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  274. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  275. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  276. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  277. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  278. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  279. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  280. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  281. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  282. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  283. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  284. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  285. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  286. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  287. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  288. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  289. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  290. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  291. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  292. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  293. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  294. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  295. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  296. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  297. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  298. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  299. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  300. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  301. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  302. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  303. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  304. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  305. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  306. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  307. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  308. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  309. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  310. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  311. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  312. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  313. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  314. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  315. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  316. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  317. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  318. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  319. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  320. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  321. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  322. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  323. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  324. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  325. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  326. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  327. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  328. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  329. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  330. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  331. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  332. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  333. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  334. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  335. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  336. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  337. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  338. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  339. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  340. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  341. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  342. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  343. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  344. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  345. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  346. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  347. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  348. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  349. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  350. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  351. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  352. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  353. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  354. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  355. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  356. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  357. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  358. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  359. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  360. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  361. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  362. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  363. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  364. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  365. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  366. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  367. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  368. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  369. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  370. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  371. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  372. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  373. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  374. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  375. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  376. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  377. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  378. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  379. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  380. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  381. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  382. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  383. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  384. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  385. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  386. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  387. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  388. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  389. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  390. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  391. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  392. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  393. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  394. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  395. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  396. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  397. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  398. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  399. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  400. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  401. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  402. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  403. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  404. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  405. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  406. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  407. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  408. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  409. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  410. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  411. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  412. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  413. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  414. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  415. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  416. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  417. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  418. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  419. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  420. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  421. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  422. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  423. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  424. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  425. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  426. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  427. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  428. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  429. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  430. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  431. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  432. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  433. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  434. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  435. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  436. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  437. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  438. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  439. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  440. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  441. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  442. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  443. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  444. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  445. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  446. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  447. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/workspace-scope-install.md +0 -0
  448. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/zip-strict-audit.md +0 -0
  449. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  450. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  451. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  452. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/eslint.config.mjs +0 -0
  453. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/README.md +0 -0
  454. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/__init__.py +0 -0
  455. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/baseline.json +0 -0
  456. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/faithfulness.py +0 -0
  457. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/golden_set.json +0 -0
  458. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/make_corpus.py +0 -0
  459. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/make_golden.py +0 -0
  460. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/metrics.py +0 -0
  461. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/publish_golden_dataset.py +0 -0
  462. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/evals/run_evals.py +0 -0
  463. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/examples/README.md +0 -0
  464. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/examples/adapt-demo.sh +0 -0
  465. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/examples/boost-run-prototype.sh +0 -0
  466. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/index.html +0 -0
  467. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/noxfile.py +0 -0
  468. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/pyproject.toml +0 -0
  469. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/coverage-tools.in +0 -0
  470. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/coverage-tools.txt +0 -0
  471. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/lint-tools.in +0 -0
  472. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/lint-tools.txt +0 -0
  473. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/mutation-tools.in +0 -0
  474. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/mutation-tools.txt +0 -0
  475. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/platform-pins.lock +0 -0
  476. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/release-tools.in +0 -0
  477. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/release-tools.txt +0 -0
  478. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/test-tools.in +0 -0
  479. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/requirements/test-tools.txt +0 -0
  480. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/a11y_check.py +0 -0
  481. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/bench_cli.sh +0 -0
  482. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/build_command_reference.py +0 -0
  483. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/build_demo_index.py +0 -0
  484. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/build_registries.py +0 -0
  485. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/build_roadmap.py +0 -0
  486. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/build_scale_corpus.py +0 -0
  487. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/check_anchors.py +0 -0
  488. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/check_licenses.py +0 -0
  489. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/check_required_checks.py +0 -0
  490. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/ensure_eval_corpus.sh +0 -0
  491. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/eval_corpus.py +0 -0
  492. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/eval_explain.py +0 -0
  493. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/eval_gate.py +0 -0
  494. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/eval_recommend.py +0 -0
  495. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/eval_retrieval.py +0 -0
  496. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/eval_stats_summary.py +0 -0
  497. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/import_budget.py +0 -0
  498. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/lock_toolchain.py +0 -0
  499. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/measure_registry.py +0 -0
  500. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/mutation_gate.py +0 -0
  501. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/mutation_shards.py +0 -0
  502. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/mutation_weights.json +0 -0
  503. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/page_budget.py +0 -0
  504. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/perf_gate.py +0 -0
  505. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/post_deploy_smoke.py +0 -0
  506. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/publish_eval_json.py +0 -0
  507. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/release_guard.py +0 -0
  508. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/release_preflight.py +0 -0
  509. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/scripts/serve_docs.py +0 -0
  510. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/setup.cfg +0 -0
  511. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/sonar-project.properties +0 -0
  512. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/style/README.md +0 -0
  513. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/style/boost.css +0 -0
  514. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/style/boost.js +0 -0
  515. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/style/demo.html +0 -0
  516. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/adapt.feature +0 -0
  517. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/browse.feature +0 -0
  518. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/count.feature +0 -0
  519. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/discover.feature +0 -0
  520. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/doctor.feature +0 -0
  521. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/environment.py +0 -0
  522. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/explain.feature +0 -0
  523. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/index.feature +0 -0
  524. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/install.feature +0 -0
  525. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/list.feature +0 -0
  526. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/mcp.feature +0 -0
  527. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/search.feature +0 -0
  528. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/steps/cli_steps.py +0 -0
  529. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/steps/discovery_steps.py +0 -0
  530. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/steps/mcp_steps.py +0 -0
  531. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/bdd/features/steps/quality_steps.py +0 -0
  532. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/conftest.py +0 -0
  533. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/eval/baseline.json +0 -0
  534. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/eval/explain.jsonl +0 -0
  535. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/eval/golden-natural.jsonl +0 -0
  536. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/eval/golden.jsonl +0 -0
  537. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/eval/recommend.jsonl +0 -0
  538. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/eval/taps-scale.txt +0 -0
  539. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/eval/taps.txt +0 -0
  540. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_capabilities_policy.py +0 -0
  541. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_adapt.py +0 -0
  542. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_bmad.py +0 -0
  543. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_catalog.py +0 -0
  544. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_chat.py +0 -0
  545. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_configuration.py +0 -0
  546. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_discovery.py +0 -0
  547. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_hooks.py +0 -0
  548. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_info.py +0 -0
  549. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_intelligence.py +0 -0
  550. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_pane_width.py +0 -0
  551. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_pkg.py +0 -0
  552. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_quality.py +0 -0
  553. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_taps.py +0 -0
  554. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_cli_team.py +0 -0
  555. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_everyday_loop.py +0 -0
  556. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_integrity_enforce.py +0 -0
  557. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_kind_conformance.py +0 -0
  558. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_property_parsers.py +0 -0
  559. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_run.py +0 -0
  560. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_tap_signing.py +0 -0
  561. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/functional/test_workspace_scope.py +0 -0
  562. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/README.md +0 -0
  563. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  564. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  565. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  566. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  567. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  568. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  569. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  570. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  571. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  572. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  573. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  574. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  575. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  576. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  577. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  578. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  579. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  580. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  581. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  582. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  583. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  584. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  585. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  586. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/fuzz_frontmatter.py +0 -0
  587. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/fuzz/fuzz_registry.py +0 -0
  588. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/langchain/conftest.py +0 -0
  589. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/langchain/test_graph.py +0 -0
  590. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/langchain/test_loader.py +0 -0
  591. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/langchain/test_retriever.py +0 -0
  592. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/make_fixture.py +0 -0
  593. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/perf/test_benchmarks.py +0 -0
  594. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/smoke.sh +0 -0
  595. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_a11y_check.py +0 -0
  596. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_action_pin_lockstep.py +0 -0
  597. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_adapters.py +0 -0
  598. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_adapters_multi.py +0 -0
  599. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_adapters_runner.py +0 -0
  600. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_agents.py +0 -0
  601. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_ai.py +0 -0
  602. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_bmad_core.py +0 -0
  603. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_boost_first_offer.py +0 -0
  604. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_bootstrap.py +0 -0
  605. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_browse.py +0 -0
  606. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_builtin.py +0 -0
  607. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_capabilities.py +0 -0
  608. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_catalog.py +0 -0
  609. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_catalogbundle.py +0 -0
  610. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_chat.py +0 -0
  611. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_check_anchors.py +0 -0
  612. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_check_licenses.py +0 -0
  613. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_claude_settings.py +0 -0
  614. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_clean_internal_cache.py +0 -0
  615. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_cliparse.py +0 -0
  616. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_codeql_analysis_key.py +0 -0
  617. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_command_reference_fresh.py +0 -0
  618. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_community_health_files.py +0 -0
  619. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_compact.py +0 -0
  620. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_complete.py +0 -0
  621. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_complete_rc_block.py +0 -0
  622. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_config.py +0 -0
  623. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_content_dedupe.py +0 -0
  624. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_content_identity.py +0 -0
  625. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_crash_redaction.py +0 -0
  626. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dedup_trust.py +0 -0
  627. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_demo_index.py +0 -0
  628. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense.py +0 -0
  629. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_embed_dedupe.py +0 -0
  630. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_fallback.py +0 -0
  631. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_fix_hint.py +0 -0
  632. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_quantized.py +0 -0
  633. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_ready_order.py +0 -0
  634. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_shard_real_schema.py +0 -0
  635. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  636. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_shards.py +0 -0
  637. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_status.py +0 -0
  638. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dense_status_cheap.py +0 -0
  639. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_dependabot_config.py +0 -0
  640. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_docs_pages_linked.py +0 -0
  641. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_docsite_chrome.py +0 -0
  642. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_ed25519.py +0 -0
  643. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_embed.py +0 -0
  644. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_embed_local.py +0 -0
  645. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_embed_truncated_response.py +0 -0
  646. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_entry_key.py +0 -0
  647. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_errors_and_cli_table.py +0 -0
  648. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_eval_baseline.py +0 -0
  649. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_eval_corpus.py +0 -0
  650. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_eval_faithfulness.py +0 -0
  651. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_eval_gate.py +0 -0
  652. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_eval_grading.py +0 -0
  653. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_eval_metrics.py +0 -0
  654. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_eval_stats_summary.py +0 -0
  655. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  656. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_faithfulness.py +0 -0
  657. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_frontmatter.py +0 -0
  658. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_fuzz_targets.py +0 -0
  659. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  660. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_gitleaks_config.py +0 -0
  661. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_gitutil.py +0 -0
  662. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_gitutil_lfs.py +0 -0
  663. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_gitutil_sparse.py +0 -0
  664. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_imperative.py +0 -0
  665. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_import_budget.py +0 -0
  666. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_injectscan.py +0 -0
  667. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_install_permission_error.py +0 -0
  668. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_installscan.py +0 -0
  669. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_integrity.py +0 -0
  670. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_journal.py +0 -0
  671. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_langchain_packaging.py +0 -0
  672. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_link_ownership.py +0 -0
  673. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_localembed.py +0 -0
  674. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_localembed_e2e.py +0 -0
  675. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_lockfile.py +0 -0
  676. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_logs.py +0 -0
  677. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_marketing_counts.py +0 -0
  678. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_mcp.py +0 -0
  679. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_mcp_install_scan.py +0 -0
  680. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_mcpdecl.py +0 -0
  681. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_mcphost.py +0 -0
  682. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_measure_registry.py +0 -0
  683. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_minisign.py +0 -0
  684. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_mutation_hardening.py +0 -0
  685. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_mutation_shards.py +0 -0
  686. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_mutation_subfile_shards.py +0 -0
  687. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_mutmut_source_paths.py +0 -0
  688. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_nethttp.py +0 -0
  689. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_output.py +0 -0
  690. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_page_budget.py +0 -0
  691. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_paths.py +0 -0
  692. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_perf_gate.py +0 -0
  693. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_pkg_confusions.py +0 -0
  694. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_pkg_injection.py +0 -0
  695. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_pkg_secrets.py +0 -0
  696. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_platform_pins.py +0 -0
  697. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_policy.py +0 -0
  698. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_post_deploy_smoke.py +0 -0
  699. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_project_mcp_sidecar.py +0 -0
  700. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_projectlock.py +0 -0
  701. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_provenance.py +0 -0
  702. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_publish_golden_dataset.py +0 -0
  703. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_rag.py +0 -0
  704. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_rag_fastpath.py +0 -0
  705. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_rag_fusion.py +0 -0
  706. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_registries_fresh.py +0 -0
  707. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_registry.py +0 -0
  708. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_registry_categories.py +0 -0
  709. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_registry_control_chars.py +0 -0
  710. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_release_guard.py +0 -0
  711. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_release_preflight.py +0 -0
  712. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_required_checks.py +0 -0
  713. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_rerank_cache.py +0 -0
  714. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_resolve.py +0 -0
  715. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_roadmap_fresh.py +0 -0
  716. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_rules.py +0 -0
  717. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_scale_corpus.py +0 -0
  718. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_scopes.py +0 -0
  719. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_secretscan.py +0 -0
  720. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_selfupdate.py +0 -0
  721. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_serve.py +0 -0
  722. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_serve_docs.py +0 -0
  723. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_shards_matrix.py +0 -0
  724. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_smoke_covers_every_command.py +0 -0
  725. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_spin.py +0 -0
  726. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_stackprobe.py +0 -0
  727. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_staleness.py +0 -0
  728. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_store.py +0 -0
  729. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_store_materialize.py +0 -0
  730. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_sync_blocked_links.py +0 -0
  731. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  732. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_token_parity.py +0 -0
  733. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_toolchain_lock.py +0 -0
  734. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_trustaudit.py +0 -0
  735. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_typosquat.py +0 -0
  736. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_updatediff.py +0 -0
  737. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_util.py +0 -0
  738. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_version.py +0 -0
  739. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_visual_harness_flags.py +0 -0
  740. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_workflow_concurrency.py +0 -0
  741. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  742. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  743. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_workflow_timeouts.py +0 -0
  744. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_workflows.py +0 -0
  745. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  746. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/visual/a11y_check.mjs +0 -0
  747. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/visual/console_check.mjs +0 -0
  748. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/visual/package-lock.json +0 -0
  749. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/visual/package.json +0 -0
  750. {boost_skill_cli-1.2.25 → boost_skill_cli-1.2.27}/tests/visual/visual_check.mjs +0 -0
@@ -1,13 +1,18 @@
1
1
  ABM
2
2
  agentic
3
3
  Algolia
4
+ allowlist
4
5
  allowlisted
5
6
  argparse
6
7
  Arize
8
+ ASan
7
9
  Attio
8
10
  backtick
9
11
  backticks
10
12
  Bagisto
13
+ basename
14
+ basenames
15
+ bestpractices
11
16
  bmad
12
17
  bookended
13
18
  Camunda
@@ -18,10 +23,12 @@ codespell
18
23
  ColdIQ
19
24
  config
20
25
  configs
26
+ CPython
21
27
  CRM
22
28
  cyclomatic
23
29
  Dependabot
24
30
  deps
31
+ deserialization
25
32
  Dev
26
33
  DigitalOcean
27
34
  docsite
@@ -35,6 +42,7 @@ eval
35
42
  evals
36
43
  freemium
37
44
  frontmatter
45
+ fuzzer
38
46
  GEO
39
47
  GIF
40
48
  gitignored
@@ -55,26 +63,36 @@ Kotlin
55
63
  langchain
56
64
  Langfuse
57
65
  LeadMagic
66
+ libFuzzer
67
+ libsodium
58
68
  lookups
59
69
  lowercasing
60
70
  Magento
61
71
  mcp
62
72
  mergeable
73
+ minisign
74
+ misconfiguration
63
75
  MLflow
64
76
  mutmut
65
77
  mypy
78
+ nonces
66
79
  npm
67
80
  onboards
68
81
  OpenShift
82
+ OpenSSF
69
83
  overclaiming
70
84
  Pinecone
71
85
  pipx
86
+ plaintext
87
+ prehash
72
88
  PrestaShop
73
89
  Pulumi
74
90
  pytest
75
91
  Qdrant
76
92
  Quarkus
77
93
  rebased
94
+ reimplement
95
+ reimplemented
78
96
  reindex
79
97
  repo
80
98
  repo's
@@ -90,11 +108,14 @@ ruleset
90
108
  Rulesets
91
109
  rulesets
92
110
  Salesforce
111
+ Saltzer
93
112
  sandboxed
94
113
  sandboxing
95
114
  scrollbar
96
115
  SEO
116
+ setuptools
97
117
  Shopify
118
+ Sigstore
98
119
  SonarCloud
99
120
  stderr
100
121
  Stdlib
@@ -104,25 +125,31 @@ stemmer
104
125
  stemming
105
126
  subagents
106
127
  subcommand
128
+ subprocess
107
129
  tappable
108
130
  teardown
109
131
  tempdir
110
132
  toggleable
111
- tokenization
112
133
  Tokenization
134
+ tokenization
113
135
  toolchain
114
136
  toolkits
115
137
  traceback
116
138
  tracebacks
139
+ triaged
140
+ triages
117
141
  typosquat
118
142
  typosquatted
119
143
  unkilled
120
144
  unlinking
145
+ unpatched
121
146
  unregister
122
147
  unstaged
123
148
  untap
149
+ untrusted
124
150
  uv
125
151
  Vaadin
152
+ Valgrind
126
153
  vendored
127
154
  vendoring
128
155
  venv
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.25
3
+ Version: 1.2.27
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -724,6 +724,7 @@ Dynamic: license-file
724
724
  [![Coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fjonnyeclectic%2Fboost%2Fbadges%2Fcoverage.json)](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
725
725
  [![Mutation score](https://img.shields.io/badge/mutation_score-%E2%89%A580%25_killed-blueviolet)](https://github.com/jonnyeclectic/boost/blob/main/scripts/mutation_gate.py)
726
726
  [![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey)](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
727
+ [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14275/badge)](https://www.bestpractices.dev/projects/14275)
727
728
  [![License](https://img.shields.io/github/license/jonnyeclectic/boost)](LICENSE)
728
729
 
729
730
  **Homebrew for AI coding skills.** boost finds, installs, and version-tracks
@@ -6,6 +6,7 @@
6
6
  [![Coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fjonnyeclectic%2Fboost%2Fbadges%2Fcoverage.json)](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
7
7
  [![Mutation score](https://img.shields.io/badge/mutation_score-%E2%89%A580%25_killed-blueviolet)](https://github.com/jonnyeclectic/boost/blob/main/scripts/mutation_gate.py)
8
8
  [![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey)](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
9
+ [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14275/badge)](https://www.bestpractices.dev/projects/14275)
9
10
  [![License](https://img.shields.io/github/license/jonnyeclectic/boost)](LICENSE)
10
11
 
11
12
  **Homebrew for AI coding skills.** boost finds, installs, and version-tracks
@@ -0,0 +1,48 @@
1
+ # Security policy
2
+
3
+ ## Supported versions
4
+
5
+ Only the latest release receives security fixes.
6
+
7
+ ## Reporting a vulnerability
8
+
9
+ Please **do not** open a public issue for security reports. Instead, use
10
+ GitHub's private vulnerability reporting:
11
+
12
+ **[Report a vulnerability](https://github.com/jonnyeclectic/boost/security/advisories/new)**
13
+
14
+ You can expect an acknowledgement within a few days. Please include steps to
15
+ reproduce and the affected command(s).
16
+
17
+ ## Vulnerability fixes in release notes
18
+
19
+ Every merge to `main` cuts a release, so a fix reaches users within minutes of
20
+ landing. When a release fixes a publicly known vulnerability in boost itself —
21
+ one that already had a CVE or an equivalent identifier when the release was
22
+ cut — the [release notes](https://github.com/jonnyeclectic/boost/releases) will
23
+ name it and its identifier, so you can tell an upgrade that matters from one
24
+ that does not. No such vulnerability has been reported to date.
25
+
26
+ Vulnerabilities in boost's *dependencies* are handled separately: the runtime
27
+ has none, and the development toolchain is watched by `osv-scanner`, `pip-audit`
28
+ and Dependabot.
29
+
30
+ ## Scope notes
31
+
32
+ boost executes `git` against registry URLs you tap and symlinks skills into
33
+ agent directories. Reports about tap-supplied content escaping the store,
34
+ path traversal via `SKILL.md` frontmatter, or command injection through
35
+ skill/tap names are especially valuable.
36
+
37
+ ## How boost is designed to resist this
38
+
39
+ [`docs/security-design.md`](docs/security-design.md) is the threat model: what
40
+ boost trusts and what it does not, the design principles the code is held to,
41
+ and the table of error classes — path traversal, command injection, zip-slip,
42
+ untrusted deserialization, supply-chain compromise — each paired with the
43
+ mitigation that counters it. It also states the known limits plainly, including
44
+ the one that matters most: boost gives you a skill's provenance, integrity and
45
+ diff, but judging what the skill *tells your agent to do* is yours.
46
+
47
+ For how boost's badge-level security posture is assessed, see
48
+ [`docs/openssf-badge.md`](docs/openssf-badge.md).
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.25'
22
- __version_tuple__ = version_tuple = (1, 2, 25)
21
+ __version__ = version = '1.2.27'
22
+ __version_tuple__ = version_tuple = (1, 2, 27)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1187,9 +1187,9 @@ def cmd_trust(argv) -> int:
1187
1187
  key_path = paths.expand(args.key)
1188
1188
  key_text = (key_path.read_text(encoding="utf-8")
1189
1189
  if key_path.is_file() else args.key)
1190
- rec = provenance.add_trusted_key(args.name, key_text)
1190
+ provenance.add_trusted_key(args.name, key_text)
1191
1191
  journal.log("trust", args.name, op="add-key")
1192
- out.ok("trusted key %s (%s)" % (rec["name"], rec["fingerprint"]))
1192
+ out.ok("trusted key added")
1193
1193
  return 0
1194
1194
 
1195
1195
  if args.action == "remove":
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.25
3
+ Version: 1.2.27
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -724,6 +724,7 @@ Dynamic: license-file
724
724
  [![Coverage](https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fjonnyeclectic%2Fboost%2Fbadges%2Fcoverage.json)](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
725
725
  [![Mutation score](https://img.shields.io/badge/mutation_score-%E2%89%A580%25_killed-blueviolet)](https://github.com/jonnyeclectic/boost/blob/main/scripts/mutation_gate.py)
726
726
  [![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey)](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
727
+ [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14275/badge)](https://www.bestpractices.dev/projects/14275)
727
728
  [![License](https://img.shields.io/github/license/jonnyeclectic/boost)](LICENSE)
728
729
 
729
730
  **Homebrew for AI coding skills.** boost finds, installs, and version-tracks
@@ -132,8 +132,10 @@ docs/eval.html
132
132
  docs/index.html
133
133
  docs/langchain.html
134
134
  docs/mcp-hub.html
135
+ docs/openssf-badge.md
135
136
  docs/rag-architecture.md
136
137
  docs/roadmap.html
138
+ docs/security-design.md
137
139
  docs/.claude/settings.local.json
138
140
  docs/architecture/README.md
139
141
  docs/architecture/c4-components-core.md
@@ -339,6 +341,7 @@ docs/roadmap/items/one-command-every-env-nox.md
339
341
  docs/roadmap/items/one-commit-can-cut-two-releases.md
340
342
  docs/roadmap/items/one-dead-tap-broke-every-update.md
341
343
  docs/roadmap/items/one-shared-atomic-write-helper.md
344
+ docs/roadmap/items/openssf-best-practices-badge.md
342
345
  docs/roadmap/items/package-metadata-validation-twine-check-friends.md
343
346
  docs/roadmap/items/patch-coverage-gate-diff-cover.md
344
347
  docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md
@@ -0,0 +1,254 @@
1
+ # OpenSSF Best Practices badge — passing-level answers
2
+
3
+ This is boost's worked answer to all 67 **passing**-level criteria of the
4
+ [OpenSSF Best Practices badge](https://www.bestpractices.dev/). It exists so the
5
+ badge submission is a transcription job rather than a research job, and so the
6
+ claims stay reviewable: every "Met" below names the artifact that backs it, and
7
+ every "N/A" says why the criterion does not apply.
8
+
9
+ Criteria text is from the
10
+ [badge project's own `criteria.yml`](https://github.com/coreinfrastructure/best-practices-badge/blob/main/criteria/criteria.yml).
11
+ `MUST` must be Met (or N/A where the criterion permits it). `SHOULD` may be
12
+ Unmet **with a justification**. `SUGGESTED` need only be answered.
13
+
14
+ **Status: 66 Met or N/A, 1 SHOULD deliberately Unmet with justification
15
+ (`crypto_call`).** That clears the passing bar. What remains is registration —
16
+ see [Human actions](#human-actions) at the end.
17
+
18
+ Repository: <https://github.com/jonnyeclectic/boost> · Licence: GPL-3.0 ·
19
+ Package: [`boost-skill-cli`](https://pypi.org/project/boost-skill-cli/)
20
+
21
+ ---
22
+
23
+ ## Basics
24
+
25
+ ### Basic project website content
26
+
27
+ | Criterion | Cat. | Answer | Evidence |
28
+ |---|---|---|---|
29
+ | `description_good` | MUST | **Met** | The README opens with what boost is and who it is for: "a package manager for AI coding skills… finds, installs, and version-tracks skills from GitHub-hosted registries". Mirrored in the repository description and the [Visual Guide](https://jonnyeclectic.github.io/boost/). |
30
+ | `interact` | MUST | **Met** | README carries install, quick start and command examples; CONTRIBUTING carries dev setup, the gate list and PR process; both are linked from the site nav. |
31
+ | `contribution` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/blob/main/CONTRIBUTING.md> — dev setup, ground rules, the full gate table, generated-file rules and PR expectations. |
32
+ | `contribution_requirements` | SHOULD | **Met** | Same file: "Ground rules" states the stdlib-only runtime, the layering rule, and that behaviour changes need tests. [`.github/PULL_REQUEST_TEMPLATE.md`](https://github.com/jonnyeclectic/boost/blob/main/.github/PULL_REQUEST_TEMPLATE.md) pre-fills the checklist. |
33
+
34
+ ### FLOSS license
35
+
36
+ | Criterion | Cat. | Answer | Evidence |
37
+ |---|---|---|---|
38
+ | `floss_license` | MUST | **Met** | GPL-3.0. |
39
+ | `floss_license_osi` | SUGGESTED | **Met** | GPL-3.0 is [OSI-approved](https://opensource.org/license/gpl-3-0). |
40
+ | `license_location` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/blob/main/LICENSE>, at the repository root, and declared in `pyproject.toml`. |
41
+
42
+ ### Documentation
43
+
44
+ | Criterion | Cat. | Answer | Evidence |
45
+ |---|---|---|---|
46
+ | `documentation_basics` | MUST | **Met** | README (install, quick start, concepts) plus the [Visual Guide](https://jonnyeclectic.github.io/boost/), [`docs/DEBUGGING.md`](https://github.com/jonnyeclectic/boost/blob/main/docs/DEBUGGING.md) and [`docs/rag-architecture.md`](https://github.com/jonnyeclectic/boost/blob/main/docs/rag-architecture.md). |
47
+ | `documentation_interface` | MUST | **Met** | [`docs/commands.html`](https://jonnyeclectic.github.io/boost/docs/commands.html) documents every command and every flag. It is *generated from the CLI itself* — the `COMMANDS` registry and each command's argparse parser — and a CI `--check` fails the build if it drifts, so the reference cannot go stale. `boost --help` and `boost <cmd> --help` are the same data. |
48
+
49
+ ### Other
50
+
51
+ | Criterion | Cat. | Answer | Evidence |
52
+ |---|---|---|---|
53
+ | `sites_https` | MUST | **Met** | Every project site is HTTPS-only: `github.com/jonnyeclectic/boost`, `jonnyeclectic.github.io/boost` (GitHub Pages enforces HTTPS), `pypi.org/project/boost-skill-cli`. A link-check workflow runs over the docs. |
54
+ | `discussion` | MUST | **Met** | [GitHub Issues](https://github.com/jonnyeclectic/boost/issues), open to anyone, archived and searchable. |
55
+ | `english` | SHOULD | **Met** | All documentation, code, commit messages, issues and reviews are in English. A `vale` prose-lint gate runs on the English documentation. |
56
+ | `maintained` | MUST | **Met** | Active daily development — 560+ merged pull requests, and *every* merge to `main` cuts a release. The criterion asks only that the project be maintained; the project is not claiming to be unmaintained or seeking new maintainers. (Bus factor is a *silver*-level criterion and out of scope here — boost is a single-maintainer project today, which is worth saying out loud before anyone attempts silver.) |
57
+
58
+ ## Change Control
59
+
60
+ ### Public version-controlled source repository
61
+
62
+ | Criterion | Cat. | Answer | Evidence |
63
+ |---|---|---|---|
64
+ | `repo_public` | MUST | **Met** | Public repository, full history, at the URL above. |
65
+ | `repo_track` | MUST | **Met** | git — every change is a tracked commit with author and message. `main` is protected and takes changes only through a pull request that has passed the full required-check gate. Note what is *not* claimed: the ruleset deliberately does not require a human approval, because the working model is parallel `loop/*` branches that self-merge and there is no second reviewer. The criterion does not ask for review, and the [Scorecard triage card](https://jonnyeclectic.github.io/boost/docs/roadmap.html#scorecard-findings-triage) keeps that finding open rather than dismissing it, because the score is accurate. |
66
+ | `repo_interim` | MUST | **Met** | Interim versions are on `main` continuously; the release cadence is *per merge*, so the published version is never more than one merge behind the repository. |
67
+ | `repo_distributed` | SUGGESTED | **Met** | git. |
68
+
69
+ ### Unique version numbering
70
+
71
+ | Criterion | Cat. | Answer | Evidence |
72
+ |---|---|---|---|
73
+ | `version_unique` | MUST | **Met** | Versions come from `setuptools-scm` reading git tags — there is no hand-maintained `__version__` to fall out of sync, and a tag is unique by construction. `boost --version` reports it. |
74
+ | `version_semver` | SUGGESTED | **Met** | `vMAJOR.MINOR.PATCH` (current series `v1.2.x`). |
75
+ | `version_tags` | SUGGESTED | **Met** | Every release is a git tag, created by the release workflow. |
76
+
77
+ ### Release notes
78
+
79
+ | Criterion | Cat. | Answer | Evidence |
80
+ |---|---|---|---|
81
+ | `release_notes` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/releases> — one GitHub release per version, notes assembled by [release-drafter](https://github.com/jonnyeclectic/boost/blob/main/.github/release-drafter.yml) from the merged pull-request titles, which is why CONTRIBUTING asks for the PR description to be written as the release note. |
82
+ | `release_notes_vulns` | MUST | **N/A** | No publicly known run-time vulnerability in boost itself has ever been reported, assigned a CVE, or fixed, so no release has had one to name. The forward policy is written down in [SECURITY.md](https://github.com/jonnyeclectic/boost/blob/main/SECURITY.md#vulnerability-fixes-in-release-notes): any release fixing a publicly known vulnerability will name it and its identifier in the release notes. Re-answer this as **Met** at the first such release. |
83
+
84
+ ## Reporting
85
+
86
+ ### Bug-reporting process
87
+
88
+ | Criterion | Cat. | Answer | Evidence |
89
+ |---|---|---|---|
90
+ | `report_process` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/issues/new/choose> — issue templates for bug reports and feature requests; CONTRIBUTING points at the tracker. |
91
+ | `report_tracker` | SHOULD | **Met** | GitHub Issues, used as the sole tracker. |
92
+ | `report_responses` | MUST | **Met** | The maintainer triages issues as they arrive; the majority of the issue history is resolved rather than left open, and CI failures on `main` are opened automatically ([`ci-failure-issue.yml`](https://github.com/jonnyeclectic/boost/blob/main/.github/workflows/ci-failure-issue.yml)) and closed on the fix. |
93
+ | `enhancement_responses` | SHOULD | **Met** | Enhancement requests are answered and, where accepted, tracked as cards on the public [code roadmap](https://jonnyeclectic.github.io/boost/docs/roadmap.html). |
94
+ | `report_archive` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/issues?q=is%3Aissue> — the full history, open and closed, publicly readable without an account. |
95
+
96
+ ### Vulnerability report process
97
+
98
+ | Criterion | Cat. | Answer | Evidence |
99
+ |---|---|---|---|
100
+ | `vulnerability_report_process` | MUST | **Met** | <https://github.com/jonnyeclectic/boost/blob/main/SECURITY.md> — states the channel, the expected acknowledgement time, and what a useful report contains. |
101
+ | `vulnerability_report_private` | MUST | **Met** | GitHub private vulnerability reporting is **enabled** on the repository (`GET /repos/jonnyeclectic/boost/private-vulnerability-reporting` → `{"enabled": true}`). Reports go to <https://github.com/jonnyeclectic/boost/security/advisories/new>, never a public issue. |
102
+ | `vulnerability_report_response` | MUST | **N/A** | No vulnerability report has been received in the last six months — none has been received at all. SECURITY.md commits to an acknowledgement within a few days, well inside the criterion's 14-day bound. |
103
+
104
+ ## Quality
105
+
106
+ ### Working build system
107
+
108
+ | Criterion | Cat. | Answer | Evidence |
109
+ |---|---|---|---|
110
+ | `build` | MUST | **Met** | Standard PEP 517 build from `pyproject.toml` (`python -m build`), exercised end to end by the release workflow, which builds the wheel and smoke-tests it before publishing. `make venv` reproduces a development environment from the hash-pinned requirements. |
111
+ | `build_common_tools` | SUGGESTED | **Met** | setuptools + `build`, driven by `make` and [`noxfile.py`](https://github.com/jonnyeclectic/boost/blob/main/noxfile.py). |
112
+ | `build_floss_tools` | SHOULD | **Met** | Every build and gate tool is FLOSS and runs on FLOSS platforms; CI runs on Ubuntu and macOS. |
113
+
114
+ ### Automated test suite
115
+
116
+ | Criterion | Cat. | Answer | Evidence |
117
+ |---|---|---|---|
118
+ | `test` | MUST | **Met** | Four tiers: `tests/unit`, `tests/functional` (drive the real CLI in-process), `tests/smoke.sh` (170 end-to-end checks through the `./boost` shim) and a Gherkin BDD suite (11 features, 47 scenarios). |
119
+ | `test_invocation` | SHOULD | **Met** | `make test` — or `nox`, which reproduces the exact CI gate in isolated venvs across every supported interpreter. |
120
+ | `test_most` | SUGGESTED | **Met** | An **80% line-coverage** gate (`fail_under = 80`), an **80% changed-line** gate on pull requests, and an **80% mutation** gate over `boost_cli/core` — the last of which means coverage cannot be satisfied by tests that merely execute the code without asserting on it. |
121
+ | `test_continuous_integration` | SUGGESTED | **Met** | GitHub Actions runs the full gate on every push and every pull request. |
122
+
123
+ ### New functionality testing
124
+
125
+ | Criterion | Cat. | Answer | Evidence |
126
+ |---|---|---|---|
127
+ | `test_policy` | MUST | **Met** | CONTRIBUTING states it outright: "Behavior changes need tests" and "Anything under `boost_cli/core/` is mutation-tested; expect to add unit tests that actually kill your mutants." |
128
+ | `tests_are_added` | MUST | **Met** | The policy is mechanically enforced, not merely stated: the changed-line coverage gate fails a pull request whose new lines are under 80% covered, and the mutation gate fails one whose new `core/` logic is untested — an unexercised branch counts as an unkilled mutant. Both are required checks. |
129
+ | `tests_documented_added` | SUGGESTED | **Met** | Documented in CONTRIBUTING ("The gates") and re-stated in the pull-request template checklist. |
130
+
131
+ ### Warning flags
132
+
133
+ | Criterion | Cat. | Answer | Evidence |
134
+ |---|---|---|---|
135
+ | `warnings` | MUST | **Met** | Python has no compiler warnings, so the criterion is met by linters: `ruff` (explicit rule set including the `S`/flake8-bandit, `B`/bugbear, `SIM`, `C4`, `PERF`, `RUF`, `UP` and `I` families), `mypy`, `pyright`, `vulture`, `xenon` and `refurb`. `pytest` additionally promotes `DeprecationWarning` raised inside `boost_cli` to an error. |
136
+ | `warnings_fixed` | MUST | **Met** | Not "mostly fixed" — **zero** findings are permitted. Each of those tools is a required check that fails the build on a single finding, so a warning cannot accumulate. `ruff`'s rule set is spelled out with `select`, not `extend-select`, so a tool upgrade can never silently switch families on or off. |
137
+ | `warnings_strict` | SUGGESTED | **Met** | The gates are already maximally strict — zero tolerance, plus a complexity ratchet (`xenon`) that fails on regression rather than on an absolute threshold. |
138
+
139
+ ## Security
140
+
141
+ ### Secure development knowledge
142
+
143
+ | Criterion | Cat. | Answer | Evidence |
144
+ |---|---|---|---|
145
+ | `know_secure_design` | MUST | **Met** | [`docs/security-design.md`](https://github.com/jonnyeclectic/boost/blob/main/docs/security-design.md) names boost's trust boundaries and works through Saltzer and Schroeder's eight principles — economy of mechanism, fail-safe defaults, complete mediation, open design, separation of privilege, least privilege, least common mechanism, psychological acceptability — as concrete claims about this codebase, each pointing at the code that implements it. |
146
+ | `know_common_errors` | MUST | **Met** | The same document carries a table of the CWE/OWASP error classes that actually apply to a Python CLI that clones repositories and writes files — path traversal, OS command injection, zip-slip, link following, untrusted deserialization, supply-chain and CI-action compromise, leaked credentials, insecure download, improper input validation — each paired with the specific mitigation in this repository. Classes that do not apply are omitted rather than padded. |
147
+
148
+ ### Use basic good cryptographic practices
149
+
150
+ boost implements no cryptographic protocol, stores no secret, and generates no
151
+ key. It **verifies** minisign/Ed25519 signatures over tap content. See
152
+ [the cryptography section](https://github.com/jonnyeclectic/boost/blob/main/docs/security-design.md#cryptography-boost-uses)
153
+ of the security-design document for the full account.
154
+
155
+ | Criterion | Cat. | Answer | Evidence |
156
+ |---|---|---|---|
157
+ | `crypto_published` | MUST | **Met** | Ed25519 (RFC 8032), SHA-512 (FIPS 180-4), SHA-256 (FIPS 180-4) and BLAKE2b-512 (RFC 7693). All publicly published and expert-reviewed; no private or proprietary algorithm anywhere. |
158
+ | `crypto_call` | SHOULD | **Unmet — justified** | `boost_cli/core/ed25519.py` is a pure-standard-library implementation of Ed25519 rather than a call into `cryptography` or libsodium. It is a deliberate trade the stdlib-only runtime rule forces: CPython ships no Ed25519 primitive, so signature verification without a runtime dependency means implementing RFC 8032's verify half. The exposure is bounded — **verification only**, over public keys and public signatures, with no secret that a timing side channel could leak — and correctness is pinned to the published RFC 8032 §7.1 test vectors in the unit suite. Hashing is *not* reimplemented; it goes through `hashlib`. |
159
+ | `crypto_floss` | MUST | **Met** | Everything cryptographic is `hashlib` (Python standard library) plus boost's own GPL-3.0 code. No proprietary component, and every function is implementable with FLOSS. |
160
+ | `crypto_keylength` | MUST | **Met** | Ed25519 is a 255-bit curve — above the criterion's 224-bit elliptic-curve minimum — and the digests are 256- and 512-bit, above the 224-bit hash minimum. No shorter length is configurable, so there is nothing to disable. |
161
+ | `crypto_working` | MUST | **Met** | No MD4, MD5, SHA-1, single DES, RC4, Dual_EC_DRBG or ECB mode appears anywhere in the codebase; `ruff`'s `S` family fails the build on weak-hash use, so a regression is caught mechanically. |
162
+ | `crypto_weaknesses` | SHOULD | **Met** | Same evidence. Ed25519, SHA-2 and BLAKE2 have no known serious weakness. |
163
+ | `crypto_pfs` | SHOULD | **N/A** | boost implements no key-agreement protocol and no network cryptography. TLS is provided by `git` and by `pip`, not by boost. |
164
+ | `crypto_password_storage` | MUST | **N/A** | boost performs no inbound authentication of external users and stores no password. It is a local CLI with no accounts. |
165
+ | `crypto_random` | MUST | **N/A** | boost generates no cryptographic key and no nonce — signing is the publisher's job, boost only verifies. `random` is imported nowhere in `boost_cli/`, so there is no insecure generator to substitute. |
166
+
167
+ ### Secured delivery against MITM attacks
168
+
169
+ | Criterion | Cat. | Answer | Evidence |
170
+ |---|---|---|---|
171
+ | `delivery_mitm` | MUST | **Met** | Distribution is PyPI over HTTPS (`pipx install boost-skill-cli`) and GitHub over HTTPS. Publishing uses [PyPI Trusted Publishing](https://github.com/jonnyeclectic/boost/blob/main/.github/workflows/publish.yml) — a short-lived OIDC identity minted for that one workflow, with no long-lived token stored anywhere — and each release carries a **SLSA build-provenance attestation** tying the artifact to the commit and workflow that produced it. Taps clone over HTTPS or SSH. |
172
+ | `delivery_unsigned` | MUST | **Met** | boost consumes no hash fetched over HTTP. The only hashes in the build are the sha256 values committed in `requirements/*.txt`, which `pip --require-hashes` enforces over an HTTPS connection; the tool downloads in CI are HTTPS with a pinned version. |
173
+
174
+ ### Publicly known vulnerabilities fixed
175
+
176
+ | Criterion | Cat. | Answer | Evidence |
177
+ |---|---|---|---|
178
+ | `vulnerabilities_fixed_60_days` | MUST | **Met** | There are no unpatched vulnerabilities of medium or higher severity, publicly known or otherwise — none has been reported against boost. Dependency exposure is watched continuously by `osv-scanner`, `pip-audit` and Dependabot, all of which run in CI, and the runtime has no third-party dependency to inherit one from. |
179
+ | `vulnerabilities_critical_fixed` | SHOULD | **Met** | Same position, and the release cadence — one release per merge — means a fix reaches users within minutes of landing rather than waiting for a release train. |
180
+
181
+ ### Other security issues
182
+
183
+ | Criterion | Cat. | Answer | Evidence |
184
+ |---|---|---|---|
185
+ | `no_leaked_credentials` | MUST | **Met** | `gitleaks` runs in CI on every push over the repository, and fails the build on a hit (the allowlist in `.gitleaks.toml` covers only boost's own synthetic secret-scanner test fixtures). Structurally there is little to leak in the first place: publishing uses a short-lived OIDC identity rather than a stored PyPI token, and the two optional dashboard secrets are absent by default with their jobs skipping themselves. Confirm GitHub's own secret scanning and push protection are enabled in **Settings → Code security** while registering — that setting is not readable without repository-admin credentials, so it is not asserted here. |
186
+
187
+ ## Analysis
188
+
189
+ ### Static code analysis
190
+
191
+ | Criterion | Cat. | Answer | Evidence |
192
+ |---|---|---|---|
193
+ | `static_analysis` | MUST | **Met** | Several tools, all required checks, all run before every release — which is *every* merge to `main`. [CodeQL](https://github.com/jonnyeclectic/boost/blob/main/.github/workflows/codeql.yml) does semantic analysis on push, on pull request and weekly; `ruff`'s `S` family is Python SAST (`shell=True`, `tempfile.mktemp`, unsafe YAML loading, weak hashing); `mypy` and `pyright` are two independent type checkers, the second adding None-flow and narrowing analysis over `core/`; `zizmor` audits the GitHub Actions workflows for excessive permissions and unpinned refs; `import-linter` enforces the architectural layering. SonarCloud is wired up as an optional non-blocking dashboard. |
194
+ | `static_analysis_common_vulnerabilities` | SUGGESTED | **Met** | CodeQL's Python security queries and `ruff`'s flake8-bandit family are both vulnerability-focused rather than generic-defect tools. `osv-scanner` and `pip-audit` cover known-vulnerable dependencies. |
195
+ | `static_analysis_fixed` | MUST | **Met** | Findings are fixed, or dismissed with a written proof of why they are false positives — never dismissed for convenience. The [Scorecard triage roadmap card](https://jonnyeclectic.github.io/boost/docs/roadmap.html#scorecard-findings-triage) records that discipline explicitly, including the rule that posture metrics must *not* be filed as false positives. One CodeQL alert is currently open and triaged as a false positive; see [Human actions](#human-actions). |
196
+ | `static_analysis_often` | SUGGESTED | **Met** | Every push and every pull request, plus a weekly scheduled CodeQL run to pick up new query releases against unchanged code. |
197
+
198
+ ### Dynamic code analysis
199
+
200
+ | Criterion | Cat. | Answer | Evidence |
201
+ |---|---|---|---|
202
+ | `dynamic_analysis` | SUGGESTED | **Met** | [`fuzz.yml`](https://github.com/jonnyeclectic/boost/blob/main/.github/workflows/fuzz.yml) runs `atheris` (libFuzzer for Python) against the parsers over a target matrix, uploading any crashing input as an artifact. Beyond fuzzing, `tests/smoke.sh` drives the real binary end to end through 170 checks, and the functional suite executes the CLI against a throwaway `$HOME`. |
203
+ | `dynamic_analysis_unsafe` | SUGGESTED | **N/A** | Python is memory-safe; there is no buffer overflow or use-after-free class for a tool like ASan or Valgrind to find. The runtime has no C extension (the optional `[rag]` extra is not on the install path). |
204
+ | `dynamic_analysis_enable_assertions` | SUGGESTED | **Met** | The test suites are assertion-driven and run with assertions enabled (no `-O`), and `pytest` promotes `DeprecationWarning` raised inside `boost_cli` to a hard error, so a latent deprecation fails a run rather than scrolling past. |
205
+ | `dynamic_analysis_fixed` | MUST | **Met** | No medium-or-higher exploitable vulnerability has been found by dynamic analysis. A crashing input found by the fuzzer is uploaded as a workflow artifact and fixed; none is outstanding. |
206
+
207
+ ---
208
+
209
+ ## Human actions
210
+
211
+ Everything above is repository-side and done. These four steps need an account
212
+ or a repository setting, so they cannot be landed as a commit.
213
+
214
+ 1. **Register the project** at <https://www.bestpractices.dev/en/projects/new>
215
+ with the repository URL, signing in with the GitHub account that owns it.
216
+ Transcribe the answers above — the criterion identifiers on the form match
217
+ the identifiers in these tables one-for-one.
218
+ 2. **Add the badge to the README** once the project has an id. The Scorecard
219
+ `CIIBestPracticesID` check reads the same registration, so this also closes
220
+ that Scorecard finding:
221
+
222
+ ```markdown
223
+ [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/<ID>/badge)](https://www.bestpractices.dev/projects/<ID>)
224
+ ```
225
+
226
+ Do not add it before registering — an unknown id renders a broken badge.
227
+ 3. **Set the repository `homepage` field** to
228
+ `https://jonnyeclectic.github.io/boost/`. It is currently empty, which
229
+ weakens the `description_good` and `interact` evidence for anyone reading the
230
+ repository rather than the README.
231
+ 4. **Close out CodeQL alert 54** ("clear-text logging of sensitive
232
+ information", `cmd_trust` in `boost_cli/commands/quality.py`) and its
233
+ Copilot-Autofix issue [#562](https://github.com/jonnyeclectic/boost/issues/562).
234
+ Dismiss it as a false positive, with this as the recorded reason: the values
235
+ printed are a minisign **public** key's name and fingerprint. A public key
236
+ fingerprint is meant to be published, and printing it is the entire point of
237
+ the line — the user compares it by eye against the publisher's advertised
238
+ fingerprint before trusting the key. Applying the suggested "fix" of printing
239
+ a constant string would remove the only verification the command offers and
240
+ make boost *less* secure, so it must not be merged.
241
+
242
+ ## Keeping this document honest
243
+
244
+ Re-check it when any of these change, since each one moves an answer:
245
+
246
+ - a vulnerability is reported or fixed → `release_notes_vulns`,
247
+ `vulnerability_report_response`, `vulnerabilities_fixed_60_days`
248
+ - a runtime dependency is added → `crypto_call`, `crypto_floss`,
249
+ `dynamic_analysis_unsafe`
250
+ - a gate is removed or a threshold lowered → the Quality and Analysis sections
251
+ - the licence changes → `floss_license`, `floss_license_osi`, `crypto_floss`
252
+
253
+ The badge site re-asks for confirmation periodically; treat that prompt as the
254
+ cue to re-read this file rather than to click through.
@@ -0,0 +1,42 @@
1
+ ---
2
+ id: openssf-best-practices-badge
3
+ board: code
4
+ section: health
5
+ status: shipped
6
+ category: Security · Posture
7
+ complexity: M
8
+ impact: Med
9
+ wow: 3
10
+ note: 66 Met/N-A · 1 justified Unmet · registration is the only step left
11
+ order: 4
12
+ owner: loop/openssf-best-practices-badge
13
+ pr:
14
+ title: OpenSSF Best Practices — all 67 passing criteria answered
15
+ ---
16
+ The <a href="roadmap.html#scorecard-findings-triage">Scorecard triage</a> left
17
+ <code>CIIBestPracticesID</code> as the one finding that "needs a human, not a commit". That
18
+ was half right. Registration needs a human; <b>answering the criteria</b> was a commit, and
19
+ until it was made, "the prerequisites are already in place" was an assumption nobody had
20
+ tested against the actual criteria text.
21
+ <b>Tested it.</b> All 67 passing-level criteria, parsed from the badge project's own
22
+ <code>criteria.yml</code> rather than a summary of it, are answered in
23
+ <code>docs/openssf-badge.md</code> — each with the artifact that backs it. Two were genuine
24
+ gaps, not paperwork:
25
+ <b><code>know_secure_design</code> and <code>know_common_errors</code></b> are MUST criteria
26
+ that no gate in this repo could satisfy, because they ask for a written threat model.
27
+ <code>docs/security-design.md</code> is that document: boost's trust boundaries (a tap author
28
+ is an attacker for modelling purposes), Saltzer and Schroeder's eight principles as concrete
29
+ claims about this code, the CWE classes that actually apply to a Python CLI that clones
30
+ repositories and writes files — each with its mitigation — and the residual limits stated
31
+ plainly, including that boost cannot vet what a skill tells an agent to do.
32
+ <b><code>crypto_call</code> is answered Unmet, with justification</b>, and that is the honest
33
+ answer rather than a defect. <code>core/ed25519.py</code> reimplements RFC 8032 verification
34
+ in pure Python because the stdlib-only runtime rule leaves no alternative — CPython ships no
35
+ Ed25519. The exposure is bounded (verify-only, public keys, public signatures, no secret to
36
+ leak through timing) and pinned to the RFC's own test vectors. A SHOULD may be Unmet with a
37
+ justification; stretching it to "Met" would have been the lie.
38
+ The audit also surfaced three settings a branch cannot change — the empty repository
39
+ <code>homepage</code> field, the registration itself, and CodeQL alert 54, which is a false
40
+ positive whose suggested autofix would print a constant instead of a minisign <b>public</b>
41
+ key fingerprint, deleting the only verification <code>boost trust add</code> offers. All
42
+ three are listed as human actions at the end of the badge document.
@@ -69,6 +69,8 @@ to do but not dismiss it.
69
69
  <b>Needs a human, not a commit</b> — <code>CIIBestPracticesID</code> #36 is the one
70
70
  remaining actionable finding, and it cannot be fixed from a branch: it asks whether the
71
71
  project is registered for an OpenSSF Best Practices badge, which means creating a project
72
- entry at <code>bestpractices.dev</code> under a real account and answering its criteria. The
73
- prerequisites are already in place (LICENSE, SECURITY.md, CONTRIBUTING.md,
74
- CODE_OF_CONDUCT.md, a published CI gate); only the registration is missing.
72
+ entry at <code>bestpractices.dev</code> under a real account and answering its criteria.
73
+ <i>Answering</i> them turned out to be a commit after all — see
74
+ <a href="roadmap.html#openssf-best-practices-badge">all 67 passing criteria answered</a>,
75
+ which found two MUST criteria this card had assumed were covered. Only the registration
76
+ itself still needs a human.