boost-skill-cli 1.2.28__tar.gz → 1.2.29__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 (760) hide show
  1. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.vale/styles/config/vocabularies/boost/accept.txt +3 -0
  2. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  5. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  6. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/openssf-badge.md +7 -0
  7. boost_skill_cli-1.2.29/docs/openssf-playbook.md +238 -0
  8. boost_skill_cli-1.2.29/docs/roadmap/items/openssf-playbook.md +33 -0
  9. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap.html +31 -1
  10. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.gitattributes +0 -0
  11. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.gitignore +0 -0
  12. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.gitleaks.toml +0 -0
  13. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.htmlvalidate.json +0 -0
  14. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.lighthouserc.json +0 -0
  15. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.lycheeignore +0 -0
  16. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.markdownlint-cli2.jsonc +0 -0
  17. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.pre-commit-config.yaml +0 -0
  18. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.stylelintrc.json +0 -0
  19. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.vale/styles/boost/AIWriting.yml +0 -0
  20. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.vale/styles/boost/Terminology.yml +0 -0
  21. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/.vale.ini +0 -0
  22. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/CLAUDE.md +0 -0
  23. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/CODE_OF_CONDUCT.md +0 -0
  24. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/CONTRIBUTING.md +0 -0
  25. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/DCO +0 -0
  26. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/LICENSE +0 -0
  27. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/MAINTAINERS.md +0 -0
  28. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/MANIFEST.in +0 -0
  29. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/Makefile +0 -0
  30. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/README.md +0 -0
  31. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/SECURITY.md +0 -0
  32. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/SUPPORT.md +0 -0
  33. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost +0 -0
  34. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/__init__.py +0 -0
  35. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/__main__.py +0 -0
  36. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/cli.py +0 -0
  37. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/cliparse.py +0 -0
  38. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/__init__.py +0 -0
  39. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/_common.py +0 -0
  40. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/bmad.py +0 -0
  41. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/configuration.py +0 -0
  42. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/discovery.py +0 -0
  43. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/hooks.py +0 -0
  44. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/info.py +0 -0
  45. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/intelligence.py +0 -0
  46. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/pkg.py +0 -0
  47. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/quality.py +0 -0
  48. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/run.py +0 -0
  49. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/safety.py +0 -0
  50. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/taps.py +0 -0
  51. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/commands/team.py +0 -0
  52. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/__init__.py +0 -0
  53. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/adapters.py +0 -0
  54. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/agents.py +0 -0
  55. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/ai.py +0 -0
  56. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/bmad.py +0 -0
  57. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/bootstrap.py +0 -0
  58. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/browse.py +0 -0
  59. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/builtin.py +0 -0
  60. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/capabilities.py +0 -0
  61. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/catalog.py +0 -0
  62. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/catalogbundle.py +0 -0
  63. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/chat.py +0 -0
  64. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/claude_settings.py +0 -0
  65. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/complete.py +0 -0
  66. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/config.py +0 -0
  67. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/dense.py +0 -0
  68. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/ed25519.py +0 -0
  69. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/embed.py +0 -0
  70. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/faithfulness.py +0 -0
  71. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/frontmatter.py +0 -0
  72. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/gitutil.py +0 -0
  73. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/imperative.py +0 -0
  74. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/injectscan.py +0 -0
  75. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/installscan.py +0 -0
  76. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/integrity.py +0 -0
  77. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/journal.py +0 -0
  78. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/localembed.py +0 -0
  79. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/lockfile.py +0 -0
  80. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/logs.py +0 -0
  81. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/mcp.py +0 -0
  82. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/mcpdecl.py +0 -0
  83. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/mcphost.py +0 -0
  84. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/minisign.py +0 -0
  85. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/nethttp.py +0 -0
  86. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/output.py +0 -0
  87. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/paths.py +0 -0
  88. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/policy.py +0 -0
  89. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/projectlock.py +0 -0
  90. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/provenance.py +0 -0
  91. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/rag.py +0 -0
  92. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/registry.py +0 -0
  93. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/resolve.py +0 -0
  94. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/rules.py +0 -0
  95. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/scopes.py +0 -0
  96. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/secretscan.py +0 -0
  97. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/selfupdate.py +0 -0
  98. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/serve.py +0 -0
  99. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/stackprobe.py +0 -0
  100. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/staleness.py +0 -0
  101. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/store.py +0 -0
  102. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/trustaudit.py +0 -0
  103. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/typosquat.py +0 -0
  104. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/updatediff.py +0 -0
  105. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/util.py +0 -0
  106. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/core/workflows.py +0 -0
  107. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/data/registries.json +0 -0
  108. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/data/rules/boost-first.mdc +0 -0
  109. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/errors.py +0 -0
  110. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_cli/spin.py +0 -0
  111. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/__init__.py +0 -0
  112. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/_compat.py +0 -0
  113. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/graph.py +0 -0
  114. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/loader.py +0 -0
  115. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/py.typed +0 -0
  116. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_langchain/retriever.py +0 -0
  117. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  118. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  119. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/requires.txt +0 -0
  120. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/boost_skill_cli.egg-info/top_level.txt +0 -0
  121. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/codecov.yml +0 -0
  122. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/.claude/settings.local.json +0 -0
  123. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/DEBUGGING.md +0 -0
  124. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/adapters.html +0 -0
  125. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/README.md +0 -0
  126. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/c4-components-core.md +0 -0
  127. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/c4-containers.md +0 -0
  128. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/c4-context.md +0 -0
  129. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/architecture/c4-dynamic-install.md +0 -0
  130. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/distill.gif +0 -0
  131. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/doctor.gif +0 -0
  132. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/explain.gif +0 -0
  133. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/hooks.gif +0 -0
  134. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/install.gif +0 -0
  135. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/pulse.gif +0 -0
  136. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/search.gif +0 -0
  137. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/gifs/tap.gif +0 -0
  138. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/distill.tape +0 -0
  139. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/doctor.tape +0 -0
  140. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/explain.tape +0 -0
  141. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/hooks.tape +0 -0
  142. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/install.tape +0 -0
  143. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/pulse.tape +0 -0
  144. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/search.tape +0 -0
  145. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel/tapes/tap.tape +0 -0
  146. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/carousel.html +0 -0
  147. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/chat.html +0 -0
  148. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/commands.html +0 -0
  149. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/commit-audit.md +0 -0
  150. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/demo-index.json +0 -0
  151. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/demo.gif +0 -0
  152. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/demo.html +0 -0
  153. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/demo.tape +0 -0
  154. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/dependencies.md +0 -0
  155. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/design-roadmap.html +0 -0
  156. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/eval-latest.json +0 -0
  157. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/eval.html +0 -0
  158. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/index.html +0 -0
  159. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/langchain.html +0 -0
  160. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/mcp-hub.html +0 -0
  161. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/rag-architecture.md +0 -0
  162. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D01.md +0 -0
  163. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D02.md +0 -0
  164. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D03.md +0 -0
  165. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D04.md +0 -0
  166. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D05.md +0 -0
  167. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D06.md +0 -0
  168. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D07.md +0 -0
  169. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D08.md +0 -0
  170. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D09.md +0 -0
  171. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D10.md +0 -0
  172. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D11.md +0 -0
  173. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D12.md +0 -0
  174. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D13.md +0 -0
  175. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D14.md +0 -0
  176. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D15.md +0 -0
  177. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D16.md +0 -0
  178. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D17.md +0 -0
  179. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D18.md +0 -0
  180. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D19.md +0 -0
  181. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D20.md +0 -0
  182. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D21.md +0 -0
  183. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D22.md +0 -0
  184. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D23.md +0 -0
  185. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D24.md +0 -0
  186. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D25.md +0 -0
  187. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/BOOST-D26.md +0 -0
  188. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  189. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  190. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  191. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  192. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  193. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  194. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  195. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  196. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  197. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  198. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  199. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  200. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  201. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  202. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/boost-first-rule.md +0 -0
  203. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  204. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  205. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  206. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  207. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  208. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  209. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  210. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  211. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  212. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  213. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  214. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  215. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  216. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  217. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  218. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  219. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  220. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  221. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  222. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  223. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/command-carousel-page.md +0 -0
  224. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  225. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  226. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  227. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  228. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  229. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  230. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  231. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  232. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  233. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  234. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  235. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  236. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  237. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  238. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  239. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  240. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  241. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  242. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  243. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  244. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  245. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  246. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  247. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  248. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  249. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  250. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  251. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  252. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  253. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  254. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  255. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  256. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  257. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  258. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  259. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  260. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  261. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  262. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  263. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  264. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  265. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  266. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  267. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  268. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  269. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  270. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  271. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/github-community-health-files.md +0 -0
  272. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  273. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  274. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  275. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  276. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  277. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  278. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  279. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  280. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  281. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  282. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  283. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  284. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  285. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  286. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  287. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  288. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  289. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  290. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  291. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  292. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  293. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  294. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  295. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  296. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  297. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  298. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  299. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  300. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  301. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  302. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  303. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  304. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  305. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  306. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  307. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  308. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  309. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  310. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  311. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  312. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  313. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  314. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  315. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  316. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  317. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  318. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  319. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  320. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  321. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  322. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  323. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  324. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  325. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  326. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  327. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  328. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  329. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  330. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  331. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  332. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  333. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  334. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  335. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  336. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  337. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  338. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  339. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  340. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  341. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  342. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  343. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  344. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  345. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  346. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  347. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  348. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  349. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  350. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  351. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  352. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  353. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  354. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  355. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  356. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  357. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  358. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  359. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  360. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  361. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  362. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  363. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  364. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  365. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  366. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  367. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  368. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  369. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  370. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  371. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  372. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  373. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  374. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  375. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  376. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  377. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  378. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  379. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  380. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  381. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  382. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  383. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  384. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  385. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  386. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  387. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  388. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  389. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  390. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  391. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  392. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  393. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  394. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  395. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  396. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  397. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  398. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  399. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  400. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  401. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  402. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  403. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  404. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  405. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  406. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  407. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  408. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  409. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  410. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  411. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  412. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  413. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  414. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  415. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  416. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  417. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  418. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  419. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  420. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  421. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  422. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  423. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  424. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  425. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  426. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  427. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  428. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  429. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  430. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  431. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  432. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  433. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  434. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  435. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  436. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  437. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  438. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  439. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  440. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  441. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  442. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  443. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  444. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  445. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  446. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  447. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  448. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  449. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  450. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  451. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  452. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  453. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/workspace-scope-install.md +0 -0
  454. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/zip-strict-audit.md +0 -0
  455. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  456. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  457. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/security-design.md +0 -0
  458. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  459. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/docs/verifying-releases.md +0 -0
  460. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/eslint.config.mjs +0 -0
  461. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/README.md +0 -0
  462. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/__init__.py +0 -0
  463. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/baseline.json +0 -0
  464. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/faithfulness.py +0 -0
  465. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/golden_set.json +0 -0
  466. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/make_corpus.py +0 -0
  467. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/make_golden.py +0 -0
  468. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/metrics.py +0 -0
  469. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/publish_golden_dataset.py +0 -0
  470. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/evals/run_evals.py +0 -0
  471. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/examples/README.md +0 -0
  472. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/examples/adapt-demo.sh +0 -0
  473. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/examples/boost-run-prototype.sh +0 -0
  474. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/index.html +0 -0
  475. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/noxfile.py +0 -0
  476. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/pyproject.toml +0 -0
  477. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/coverage-tools.in +0 -0
  478. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/coverage-tools.txt +0 -0
  479. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/lint-tools.in +0 -0
  480. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/lint-tools.txt +0 -0
  481. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/mutation-tools.in +0 -0
  482. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/mutation-tools.txt +0 -0
  483. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/platform-pins.lock +0 -0
  484. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/release-tools.in +0 -0
  485. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/release-tools.txt +0 -0
  486. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/test-tools.in +0 -0
  487. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/requirements/test-tools.txt +0 -0
  488. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/a11y_check.py +0 -0
  489. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/bench_cli.sh +0 -0
  490. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_command_reference.py +0 -0
  491. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_demo_index.py +0 -0
  492. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_registries.py +0 -0
  493. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_roadmap.py +0 -0
  494. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/build_scale_corpus.py +0 -0
  495. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/check_anchors.py +0 -0
  496. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/check_dco.py +0 -0
  497. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/check_licenses.py +0 -0
  498. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/check_required_checks.py +0 -0
  499. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/ensure_eval_corpus.sh +0 -0
  500. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_corpus.py +0 -0
  501. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_explain.py +0 -0
  502. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_gate.py +0 -0
  503. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_recommend.py +0 -0
  504. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_retrieval.py +0 -0
  505. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/eval_stats_summary.py +0 -0
  506. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/import_budget.py +0 -0
  507. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/lock_toolchain.py +0 -0
  508. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/measure_registry.py +0 -0
  509. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/mutation_gate.py +0 -0
  510. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/mutation_shards.py +0 -0
  511. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/mutation_weights.json +0 -0
  512. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/page_budget.py +0 -0
  513. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/perf_gate.py +0 -0
  514. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/post_deploy_smoke.py +0 -0
  515. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/publish_eval_json.py +0 -0
  516. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/release_guard.py +0 -0
  517. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/release_preflight.py +0 -0
  518. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/scripts/serve_docs.py +0 -0
  519. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/setup.cfg +0 -0
  520. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/sonar-project.properties +0 -0
  521. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/style/README.md +0 -0
  522. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/style/boost.css +0 -0
  523. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/style/boost.js +0 -0
  524. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/style/demo.html +0 -0
  525. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/adapt.feature +0 -0
  526. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/browse.feature +0 -0
  527. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/count.feature +0 -0
  528. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/discover.feature +0 -0
  529. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/doctor.feature +0 -0
  530. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/environment.py +0 -0
  531. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/explain.feature +0 -0
  532. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/index.feature +0 -0
  533. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/install.feature +0 -0
  534. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/list.feature +0 -0
  535. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/mcp.feature +0 -0
  536. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/search.feature +0 -0
  537. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/steps/cli_steps.py +0 -0
  538. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/steps/discovery_steps.py +0 -0
  539. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/steps/mcp_steps.py +0 -0
  540. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/bdd/features/steps/quality_steps.py +0 -0
  541. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/conftest.py +0 -0
  542. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/baseline.json +0 -0
  543. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/explain.jsonl +0 -0
  544. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/golden-natural.jsonl +0 -0
  545. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/golden.jsonl +0 -0
  546. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/recommend.jsonl +0 -0
  547. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/taps-scale.txt +0 -0
  548. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/eval/taps.txt +0 -0
  549. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_capabilities_policy.py +0 -0
  550. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_adapt.py +0 -0
  551. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_bmad.py +0 -0
  552. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_catalog.py +0 -0
  553. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_chat.py +0 -0
  554. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_configuration.py +0 -0
  555. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_discovery.py +0 -0
  556. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_hooks.py +0 -0
  557. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_info.py +0 -0
  558. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_intelligence.py +0 -0
  559. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_pane_width.py +0 -0
  560. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_pkg.py +0 -0
  561. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_quality.py +0 -0
  562. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_taps.py +0 -0
  563. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_cli_team.py +0 -0
  564. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_everyday_loop.py +0 -0
  565. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_integrity_enforce.py +0 -0
  566. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_kind_conformance.py +0 -0
  567. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_property_parsers.py +0 -0
  568. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_run.py +0 -0
  569. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_tap_signing.py +0 -0
  570. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/functional/test_workspace_scope.py +0 -0
  571. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/README.md +0 -0
  572. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  573. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  574. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  575. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  576. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  577. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  578. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  579. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  580. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  581. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  582. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  583. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  584. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  585. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  586. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  587. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  588. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  589. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  590. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  591. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  592. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  593. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  594. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  595. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/fuzz_frontmatter.py +0 -0
  596. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/fuzz/fuzz_registry.py +0 -0
  597. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/langchain/conftest.py +0 -0
  598. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/langchain/test_graph.py +0 -0
  599. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/langchain/test_loader.py +0 -0
  600. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/langchain/test_retriever.py +0 -0
  601. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/make_fixture.py +0 -0
  602. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/perf/test_benchmarks.py +0 -0
  603. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/smoke.sh +0 -0
  604. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_a11y_check.py +0 -0
  605. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_action_pin_lockstep.py +0 -0
  606. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_adapters.py +0 -0
  607. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_adapters_multi.py +0 -0
  608. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_adapters_runner.py +0 -0
  609. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_agents.py +0 -0
  610. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_ai.py +0 -0
  611. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_bmad_core.py +0 -0
  612. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_boost_first_offer.py +0 -0
  613. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_bootstrap.py +0 -0
  614. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_browse.py +0 -0
  615. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_builtin.py +0 -0
  616. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_capabilities.py +0 -0
  617. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_catalog.py +0 -0
  618. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_catalogbundle.py +0 -0
  619. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_chat.py +0 -0
  620. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_check_anchors.py +0 -0
  621. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_check_dco.py +0 -0
  622. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_check_licenses.py +0 -0
  623. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_claude_settings.py +0 -0
  624. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_clean_internal_cache.py +0 -0
  625. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_cliparse.py +0 -0
  626. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_codeql_analysis_key.py +0 -0
  627. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_command_reference_fresh.py +0 -0
  628. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_community_health_files.py +0 -0
  629. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_compact.py +0 -0
  630. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_complete.py +0 -0
  631. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_complete_rc_block.py +0 -0
  632. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_config.py +0 -0
  633. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_content_dedupe.py +0 -0
  634. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_content_identity.py +0 -0
  635. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_crash_redaction.py +0 -0
  636. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dedup_trust.py +0 -0
  637. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_demo_index.py +0 -0
  638. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense.py +0 -0
  639. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_embed_dedupe.py +0 -0
  640. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_fallback.py +0 -0
  641. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_fix_hint.py +0 -0
  642. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_quantized.py +0 -0
  643. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_ready_order.py +0 -0
  644. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_shard_real_schema.py +0 -0
  645. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  646. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_shards.py +0 -0
  647. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_status.py +0 -0
  648. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dense_status_cheap.py +0 -0
  649. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_dependabot_config.py +0 -0
  650. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_docs_pages_linked.py +0 -0
  651. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_docsite_chrome.py +0 -0
  652. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_ed25519.py +0 -0
  653. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_embed.py +0 -0
  654. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_embed_local.py +0 -0
  655. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_embed_truncated_response.py +0 -0
  656. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_entry_key.py +0 -0
  657. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_errors_and_cli_table.py +0 -0
  658. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_baseline.py +0 -0
  659. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_corpus.py +0 -0
  660. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_faithfulness.py +0 -0
  661. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_gate.py +0 -0
  662. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_grading.py +0 -0
  663. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_metrics.py +0 -0
  664. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_eval_stats_summary.py +0 -0
  665. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  666. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_faithfulness.py +0 -0
  667. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_frontmatter.py +0 -0
  668. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_fuzz_targets.py +0 -0
  669. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  670. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gitleaks_config.py +0 -0
  671. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gitutil.py +0 -0
  672. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gitutil_lfs.py +0 -0
  673. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_gitutil_sparse.py +0 -0
  674. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_imperative.py +0 -0
  675. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_import_budget.py +0 -0
  676. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_injectscan.py +0 -0
  677. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_install_permission_error.py +0 -0
  678. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_installscan.py +0 -0
  679. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_integrity.py +0 -0
  680. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_journal.py +0 -0
  681. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_langchain_packaging.py +0 -0
  682. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_link_ownership.py +0 -0
  683. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_localembed.py +0 -0
  684. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_localembed_e2e.py +0 -0
  685. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_lockfile.py +0 -0
  686. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_logs.py +0 -0
  687. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_marketing_counts.py +0 -0
  688. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mcp.py +0 -0
  689. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mcp_install_scan.py +0 -0
  690. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mcpdecl.py +0 -0
  691. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mcphost.py +0 -0
  692. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_measure_registry.py +0 -0
  693. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_minisign.py +0 -0
  694. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mutation_hardening.py +0 -0
  695. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mutation_shards.py +0 -0
  696. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mutation_subfile_shards.py +0 -0
  697. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_mutmut_source_paths.py +0 -0
  698. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_nethttp.py +0 -0
  699. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_output.py +0 -0
  700. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_page_budget.py +0 -0
  701. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_paths.py +0 -0
  702. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_perf_gate.py +0 -0
  703. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_pkg_confusions.py +0 -0
  704. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_pkg_injection.py +0 -0
  705. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_pkg_secrets.py +0 -0
  706. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_platform_pins.py +0 -0
  707. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_policy.py +0 -0
  708. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_post_deploy_smoke.py +0 -0
  709. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_project_mcp_sidecar.py +0 -0
  710. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_projectlock.py +0 -0
  711. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_provenance.py +0 -0
  712. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_publish_golden_dataset.py +0 -0
  713. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rag.py +0 -0
  714. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rag_fastpath.py +0 -0
  715. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rag_fusion.py +0 -0
  716. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_registries_fresh.py +0 -0
  717. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_registry.py +0 -0
  718. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_registry_categories.py +0 -0
  719. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_registry_control_chars.py +0 -0
  720. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_release_guard.py +0 -0
  721. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_release_preflight.py +0 -0
  722. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_required_checks.py +0 -0
  723. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rerank_cache.py +0 -0
  724. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_resolve.py +0 -0
  725. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_roadmap_fresh.py +0 -0
  726. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_rules.py +0 -0
  727. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_scale_corpus.py +0 -0
  728. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_scopes.py +0 -0
  729. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_secretscan.py +0 -0
  730. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_selfupdate.py +0 -0
  731. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_serve.py +0 -0
  732. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_serve_docs.py +0 -0
  733. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_shards_matrix.py +0 -0
  734. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_smoke_covers_every_command.py +0 -0
  735. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_spin.py +0 -0
  736. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_stackprobe.py +0 -0
  737. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_staleness.py +0 -0
  738. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_store.py +0 -0
  739. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_store_materialize.py +0 -0
  740. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_sync_blocked_links.py +0 -0
  741. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  742. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_token_parity.py +0 -0
  743. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_toolchain_lock.py +0 -0
  744. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_trustaudit.py +0 -0
  745. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_typosquat.py +0 -0
  746. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_updatediff.py +0 -0
  747. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_util.py +0 -0
  748. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_version.py +0 -0
  749. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_visual_harness_flags.py +0 -0
  750. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflow_concurrency.py +0 -0
  751. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  752. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  753. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflow_timeouts.py +0 -0
  754. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_workflows.py +0 -0
  755. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  756. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/a11y_check.mjs +0 -0
  757. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/console_check.mjs +0 -0
  758. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/package-lock.json +0 -0
  759. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/package.json +0 -0
  760. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.29}/tests/visual/visual_check.mjs +0 -0
@@ -52,6 +52,7 @@ fuzzer
52
52
  GEO
53
53
  GIF
54
54
  gitignored
55
+ gitleaks
55
56
  GitOps
56
57
  glassmorphic
57
58
  Grafana
@@ -100,6 +101,7 @@ Quarkus
100
101
  rebased
101
102
  reimplement
102
103
  reimplemented
104
+ reimplements
103
105
  reindex
104
106
  repo
105
107
  repo's
@@ -138,6 +140,7 @@ subprocess
138
140
  tappable
139
141
  teardown
140
142
  tempdir
143
+ textarea
141
144
  toggleable
142
145
  Tokenization
143
146
  tokenization
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.28
3
+ Version: 1.2.29
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -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.28'
22
- __version_tuple__ = version_tuple = (1, 2, 28)
21
+ __version__ = version = '1.2.29'
22
+ __version_tuple__ = version_tuple = (1, 2, 29)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.28
3
+ Version: 1.2.29
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -138,6 +138,7 @@ docs/index.html
138
138
  docs/langchain.html
139
139
  docs/mcp-hub.html
140
140
  docs/openssf-badge.md
141
+ docs/openssf-playbook.md
141
142
  docs/rag-architecture.md
142
143
  docs/roadmap.html
143
144
  docs/security-design.md
@@ -348,6 +349,7 @@ docs/roadmap/items/one-commit-can-cut-two-releases.md
348
349
  docs/roadmap/items/one-dead-tap-broke-every-update.md
349
350
  docs/roadmap/items/one-shared-atomic-write-helper.md
350
351
  docs/roadmap/items/openssf-best-practices-badge.md
352
+ docs/roadmap/items/openssf-playbook.md
351
353
  docs/roadmap/items/osps-baseline-levels.md
352
354
  docs/roadmap/items/package-metadata-validation-twine-check-friends.md
353
355
  docs/roadmap/items/patch-coverage-gate-diff-cover.md
@@ -248,6 +248,13 @@ or a repository setting, so they cannot be landed as a commit.
248
248
  silently a second time. The missing test was the real defect; the alert was
249
249
  only the trigger.
250
250
 
251
+ ## Doing this on another project
252
+
253
+ [`openssf-playbook.md`](openssf-playbook.md) is the repeatable method behind
254
+ this document: where the authoritative criteria actually live, how to audit a
255
+ repository against them rather than assuming, the three buckets every criterion
256
+ sorts into, and the four documents Baseline Level 2 asks for.
257
+
251
258
  ## Keeping this document honest
252
259
 
253
260
  Re-check it when any of these change, since each one moves an answer:
@@ -0,0 +1,238 @@
1
+ # Earning the OpenSSF badges: a playbook
2
+
3
+ boost went from unregistered to three badges — **passing**, **Baseline Level 1**
4
+ and **Baseline Level 2** — in one working session. This is the method, written
5
+ so another project can follow it, including the parts that cost time to
6
+ discover and the parts where the honest answer is "no".
7
+
8
+ It is not a checklist of criteria. The criteria live upstream and change; what
9
+ transfers is how to find them, how to decide an answer, and which kinds of
10
+ criterion are worth attacking in which order.
11
+
12
+ ## What you are actually applying for
13
+
14
+ bestpractices.dev issues **four independent badges**, not one with tiers. This
15
+ is the first thing most people get wrong, including this project's own earlier
16
+ notes.
17
+
18
+ | Badge | Criteria | Nature |
19
+ |---|---|---|
20
+ | **Passing** | 67 | The classic CII set — process, quality, security basics |
21
+ | **Baseline Level 1** | 24 | OSPS Baseline: repository hygiene and CI safety |
22
+ | **Baseline Level 2** | 19 | OSPS Baseline: governance, supply chain, documented policy |
23
+ | **Baseline Level 3** | 21 | OSPS Baseline: review, VEX, SCA policy |
24
+
25
+ Passing also has **silver** (55 more criteria) and **gold** (20 more) above it,
26
+ which *are* tiers — silver requires passing, gold requires silver.
27
+
28
+ Each badge is a separate form at
29
+ `bestpractices.dev/en/projects/<id>/<level>/edit`, where `<level>` is `passing`,
30
+ `baseline-1`, `baseline-2`, `baseline-3`, `silver` or `gold`. They share a
31
+ project id and nothing else. Register once, then work them independently.
32
+
33
+ ## Step 1 — get the real criteria, not a summary
34
+
35
+ Do not work from a blog post, and do not work from what an LLM recalls. Both
36
+ will be plausible and subtly wrong about which criteria allow N/A, which demand
37
+ a URL, and which are MUST versus SHOULD — and those three facts decide most of
38
+ your answers.
39
+
40
+ The authoritative source is the badge application's own repository, and it takes
41
+ **two files**, because they are split:
42
+
43
+ ```bash
44
+ # Metadata: category (MUST/SHOULD/SUGGESTED), na_allowed, met_url_required,
45
+ # met_justification_required. Carries NO descriptions.
46
+ curl -sL https://raw.githubusercontent.com/coreinfrastructure/best-practices-badge/main/criteria/criteria.yml
47
+
48
+ # The actual description: and details: prose for each criterion.
49
+ curl -sL https://raw.githubusercontent.com/coreinfrastructure/best-practices-badge/main/config/locales/en.yml
50
+ ```
51
+
52
+ `https://www.bestpractices.dev/criteria/0.json` looks like the obvious endpoint
53
+ and returns **HTTP 406**. Skip it.
54
+
55
+ `criteria.yml` is an ordered map keyed by level — `- '0':` is passing, `'1'` is
56
+ silver, `'2'` is gold. Indentation is 2 / 4 / 6 / 10 spaces for major group,
57
+ minor group, criterion name, and keys. A parser that does not stop at `- '1':`
58
+ will silently fold silver criteria into your passing set; passing is **exactly
59
+ 67**, so check your count before trusting your parse.
60
+
61
+ The OSPS Baseline criteria are not in that file at all. The fastest way to read
62
+ them, and the one that guarantees you are looking at what the form will actually
63
+ ask, is to open the form and scrape it — each criterion's full text sits in an
64
+ element whose `id` is the criterion name (`osps_qa_05_02`). Collapsed panels
65
+ return empty `innerText`, so read `textContent`.
66
+
67
+ ## Step 2 — audit, do not assume
68
+
69
+ **The single highest-value finding: most unanswered criteria are already
70
+ satisfied and merely unrecorded.**
71
+
72
+ Nine of Baseline Level 1's 24 criteria were open when boost started. Every one
73
+ was already true. Branch protection plus a ruleset already refused direct
74
+ commits to `main`. No workflow used `pull_request_target`, so a fork's code
75
+ already could not reach a secret. An audit of every tracked file for binary
76
+ content turned up three zero-byte marker files and a 10-byte fuzz seed. The work
77
+ was proving it, not building it — and the badge went from 63% to 100% without a
78
+ line of code.
79
+
80
+ So audit before you plan. Concretely, for each open criterion, find the evidence
81
+ or establish that it is missing:
82
+
83
+ ```bash
84
+ # Branch protection and rulesets (rulesets are separate from classic protection,
85
+ # and a repo can have both — checking only one will mislead you)
86
+ curl -s https://api.github.com/repos/OWNER/REPO/branches/main
87
+ curl -s https://api.github.com/repos/OWNER/REPO/rules/branches/main
88
+
89
+ # Private vulnerability reporting — a yes/no you should never guess
90
+ curl -s https://api.github.com/repos/OWNER/REPO/private-vulnerability-reporting
91
+
92
+ # Untrusted code reaching secrets
93
+ grep -rl pull_request_target .github/workflows/
94
+
95
+ # Binary and executable artifacts in version control
96
+ git ls-files | while read -r f; do
97
+ [ -x "$f" ] && echo "EXEC: $f"
98
+ file -b --mime "$f" | grep -q charset=binary && echo "BINARY: $f"
99
+ done
100
+ ```
101
+
102
+ Two traps in that last one. Files carrying the executable bit are usually
103
+ *source scripts*, not the "generated executable artifacts" the criterion means.
104
+ And `file` reports zero-byte files as binary, so `__init__.py` and `py.typed`
105
+ will show up; check sizes before you believe them.
106
+
107
+ ## Step 3 — sort every criterion into three buckets
108
+
109
+ This is the whole planning step, and it is what stops the work sprawling.
110
+
111
+ **Bucket 1 — documentation you can write.** By far the largest, and the one an
112
+ agent can close. Nothing about the software changes; you are recording what is
113
+ already true. Attack these first.
114
+
115
+ **Bucket 2 — a repository setting.** A checkbox or a field. Fast, but you cannot
116
+ do it from a branch, so collect them into one list and hand it over. For boost:
117
+ the empty `homepage` field, a CodeQL alert dismissal, enabling private
118
+ vulnerability reporting.
119
+
120
+ **Bucket 3 — structurally blocked.** Requires something you do not have, usually
121
+ another person. **Say so and move on.** Do not stretch an answer to make a
122
+ number go up; a badge that misrepresents your posture is worse than a missing
123
+ one, and the criteria are written by people who have seen every stretch.
124
+
125
+ For boost, bucket 3 was one thing wearing four hats: `OSPS-QA-07.01` (Level 3),
126
+ `two_person_review`, `bus_factor` and `contributors_unassociated` (gold) all
127
+ require a **non-author human reviewer**. A single-maintainer project cannot
128
+ satisfy them, and no commit changes that.
129
+
130
+ ## Step 4 — write the four documents Level 2 asks for
131
+
132
+ Every project that reaches Baseline Level 2 writes approximately these four.
133
+ They are worth having irrespective of any badge, which is the test of whether a
134
+ compliance exercise was worth doing.
135
+
136
+ | Document | The question it answers | Where it usually goes wrong |
137
+ |---|---|---|
138
+ | `MAINTAINERS.md` | Who holds which credential, what each role may do, how someone gets more access, what happens if you vanish | Listing people but not *credentials*. The criterion asks about access to sensitive resources. If you publish with OIDC/Trusted Publishing, the honest entry is "nobody holds it — there is no token", which is a stronger answer than a name |
139
+ | `SUPPORT.md` | What is supported, on what platforms, for how long, and when a version stops getting security fixes | Implying a supported older line you do not actually maintain. If you only support latest, say only latest |
140
+ | `docs/dependencies.md` | How a dependency is chosen, obtained, tracked — and **the severity threshold at which a finding blocks a release** | Describing your scanners and calling it a policy. "We run osv-scanner" is not a policy; "critical and high block the merge, medium blocks if reachable, suppression requires a written argument" is |
141
+ | `docs/verifying-releases.md` | The exact commands a consumer runs to verify an artifact came from you | Omitting the identity check. `gh attestation verify FILE --repo O/R` proves *someone* built it; adding `--signer-workflow O/R/.github/workflows/publish.yml` proves **which workflow** did |
142
+
143
+ And a threat model — `docs/security-design.md` — which passing needs for
144
+ `know_secure_design` and `know_common_errors`, and Baseline Level 2 reuses for
145
+ `osps_sa_01_01` and `osps_sa_03_01`. One document, four criteria. Write it early.
146
+
147
+ Make it specific or it satisfies nobody. Work through Saltzer and Schroeder's
148
+ eight principles as **claims about your code**, each pointing at the file that
149
+ implements it. Table your CWE classes with the mitigation that counters each,
150
+ and **omit the ones that do not apply** rather than padding — a threat model
151
+ listing SQL injection for a project with no database advertises that nobody
152
+ thought about it.
153
+
154
+ ## Step 5 — answer honestly, including when the answer is "no"
155
+
156
+ A `SHOULD` may be answered **Unmet with a justification** and the badge still
157
+ passes. Use that. It is there precisely so you do not have to lie.
158
+
159
+ boost answered `crypto_call` Unmet: it reimplements Ed25519 verification in pure
160
+ Python because its stdlib-only rule leaves no alternative. The justification
161
+ states the trade, bounds the exposure (verify-only, public keys, no secret for a
162
+ timing channel), and cites the RFC test vectors that pin correctness. That is a
163
+ better answer than a stretched "Met", and it is the kind of thing a reviewer
164
+ reads and trusts the rest of your form because of.
165
+
166
+ Three specific honesty traps worth naming, all of which caught this project:
167
+
168
+ - **Do not claim a setting you cannot read.** `no_leaked_credentials` was
169
+ drafted asserting "GitHub secret scanning is on". That setting needs
170
+ repo-admin credentials to read. The answer became what *was* checkable —
171
+ gitleaks failing the build, OIDC publishing leaving no stored token — plus a
172
+ note asking the registrant to confirm the setting themselves.
173
+ - **Do not restate a claim your own repo refuses to make.** A draft said `main`
174
+ "takes changes only through reviewed pull requests". The ruleset deliberately
175
+ requires status checks and *not* human approval, and this repo's Scorecard
176
+ triage keeps that finding open rather than dismissing it, because the score is
177
+ accurate. The badge form nearly contradicted the repo's own honesty.
178
+ - **Re-verify anything you inherited.** A note said the licence was MIT. It is
179
+ GPL-3.0. That single check changed three answers.
180
+
181
+ ## Step 6 — filling the forms
182
+
183
+ Each form is one radio group per criterion (`project[<name>_status]`, values
184
+ `Met` / `Unmet` / `N/A` / `?`) and one textarea
185
+ (`project[<name>_justification]`). Filling 67 by hand is a bad use of a
186
+ session; drive it, then audit that nothing is left at `?` before submitting:
187
+
188
+ ```javascript
189
+ // Set a status + justification, dispatching the events the app listens for
190
+ const r = document.querySelector(
191
+ `input[type=radio][name="project[${key}_status]"][value="${status}"]`);
192
+ r.click();
193
+ const ta = document.querySelector(`textarea[name="project[${key}_justification]"]`);
194
+ ta.value = justification;
195
+ ta.dispatchEvent(new Event('input', {bubbles: true}));
196
+ ta.dispatchEvent(new Event('change', {bubbles: true}));
197
+ ```
198
+
199
+ Two operational notes. Prefer the **"Submit (and exit)"** button over "Save (and
200
+ continue) 🤖" — the latter runs automation that fills unknown values, which you
201
+ do not want once you have answered everything deliberately. And the form's
202
+ progress percentage is the fastest correctness check you have: if you answered
203
+ every criterion and it does not read 100%, something did not take.
204
+
205
+ ## Step 7 — keep the answer sheet in the repository
206
+
207
+ Write your answers into a tracked document — boost's is
208
+ [`openssf-badge.md`](openssf-badge.md) — with each answer's evidence beside it.
209
+ This matters more than it sounds:
210
+
211
+ - The badge site periodically asks you to reconfirm. Re-reading your own
212
+ reasoning beats re-deriving it.
213
+ - Answers go stale in predictable ways. Note them: a vulnerability being
214
+ reported moves three answers; adding a runtime dependency moves three more; a
215
+ licence change moves three.
216
+ - It makes the claims reviewable by people who do not have a badge account,
217
+ which is most of your users.
218
+
219
+ ## What this cost, and what it found
220
+
221
+ Three badges, six new documents, and — the part worth the whole exercise — a
222
+ **live regression on `main`**. Auditing commits against their messages surfaced
223
+ a merged Copilot autofix that had replaced `boost trust add`'s printed key
224
+ fingerprint with a constant string, deleting the only verification the command
225
+ offered. It passed every gate because no test asserted that line.
226
+
227
+ That is the honest argument for doing this. The badges are a forcing function;
228
+ what you get is the audit.
229
+
230
+ ## Related
231
+
232
+ - [`openssf-badge.md`](openssf-badge.md) — boost's worked answers, all 67
233
+ passing criteria with evidence
234
+ - [`security-design.md`](security-design.md) — the threat model the knowledge
235
+ criteria require
236
+ - [`dependencies.md`](dependencies.md) · [`verifying-releases.md`](verifying-releases.md)
237
+ · [`../MAINTAINERS.md`](../MAINTAINERS.md) · [`../SUPPORT.md`](../SUPPORT.md)
238
+ — the Level 2 four
@@ -0,0 +1,33 @@
1
+ ---
2
+ id: openssf-playbook
3
+ board: code
4
+ section: docsite
5
+ status: shipped
6
+ category: Docs
7
+ complexity: S
8
+ impact: Med
9
+ wow: 3
10
+ note: the method, not the answers — so another repo can repeat it
11
+ order: 6
12
+ owner: loop/openssf-playbook
13
+ pr:
14
+ title: The OpenSSF badge playbook
15
+ ---
16
+ Three badges in one session left two kinds of artifact behind. <a href="roadmap.html#openssf-best-practices-badge">The
17
+ answer sheets</a> record <i>what boost answered</i>, which is worth exactly nothing to
18
+ anybody else. This records <b>the method</b>.
19
+ The parts that cost real time to discover: the badge site issues <b>four independent
20
+ badges</b>, not one with tiers, each at its own <code>/&lt;level&gt;/edit</code> form. The
21
+ authoritative criteria need <b>two</b> upstream files — <code>criteria.yml</code> has the
22
+ MUST/SHOULD and <code>na_allowed</code> flags but no prose, <code>en.yml</code> has the
23
+ prose — and the obvious <code>/criteria/0.json</code> endpoint returns 406. A parser that
24
+ does not stop at <code>- '1':</code> folds silver into passing; passing is exactly 67, so
25
+ the count is the check.
26
+ The part that changes how you plan: <b>most unanswered criteria are already satisfied and
27
+ merely unrecorded</b>. Nine of Baseline Level 1's 24 were open and every one was already
28
+ true — the work was proving it, not building it, and the badge went 63% → 100% with no code.
29
+ So every criterion sorts into three buckets: documentation you can write, a repository
30
+ setting you cannot do from a branch, and <b>structurally blocked — say so and move on</b>.
31
+ Also records the three honesty traps this project walked into and had to back out of:
32
+ claiming a setting that needs credentials to read, restating a claim the repo's own
33
+ Scorecard triage refuses to make, and inheriting "the licence is MIT" when it is GPL-3.0.
@@ -133,7 +133,7 @@
133
133
  <div class="stat"><b>16</b><span>Shipped</span></div>
134
134
  <div class="stat"><b>1</b><span>Next up</span></div>
135
135
  <div class="stat"><b>7</b><span>Planned</span></div>
136
- <div class="stat"><b>269</b><span>Loop finds</span></div>
136
+ <div class="stat"><b>270</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -9405,6 +9405,36 @@ and the work stays visible.</p></details>
9405
9405
  </div>
9406
9406
  </article>
9407
9407
 
9408
+ <article class="cap rcard" id="openssf-playbook">
9409
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Docs</span></div>
9410
+ <h3>The OpenSSF badge playbook</h3>
9411
+ <details class="cardbody"><summary>Write-up</summary>
9412
+ <p>Three badges in one session left two kinds of artifact behind. <a href="roadmap.html#openssf-best-practices-badge">The
9413
+ answer sheets</a> record <i>what boost answered</i>, which is worth exactly nothing to
9414
+ anybody else. This records <b>the method</b>.
9415
+ The parts that cost real time to discover: the badge site issues <b>four independent
9416
+ badges</b>, not one with tiers, each at its own <code>/&lt;level&gt;/edit</code> form. The
9417
+ authoritative criteria need <b>two</b> upstream files — <code>criteria.yml</code> has the
9418
+ MUST/SHOULD and <code>na_allowed</code> flags but no prose, <code>en.yml</code> has the
9419
+ prose — and the obvious <code>/criteria/0.json</code> endpoint returns 406. A parser that
9420
+ does not stop at <code>- '1':</code> folds silver into passing; passing is exactly 67, so
9421
+ the count is the check.
9422
+ The part that changes how you plan: <b>most unanswered criteria are already satisfied and
9423
+ merely unrecorded</b>. Nine of Baseline Level 1's 24 were open and every one was already
9424
+ true — the work was proving it, not building it, and the badge went 63% → 100% with no code.
9425
+ So every criterion sorts into three buckets: documentation you can write, a repository
9426
+ setting you cannot do from a branch, and <b>structurally blocked — say so and move on</b>.
9427
+ Also records the three honesty traps this project walked into and had to back out of:
9428
+ claiming a setting that needs credentials to read, restating a claim the repo's own
9429
+ Scorecard triage refuses to make, and inheriting "the licence is MIT" when it is GPL-3.0.</p></details>
9430
+ <div class="meta">
9431
+ <span class="m">Complexity <b>S</b></span>
9432
+ <span class="m">Impact <b>Med</b></span>
9433
+ <span class="m">Wow <b class="wow">★★★</b></span>
9434
+ <span class="m">the method, not the answers — so another repo can repeat it</span>
9435
+ </div>
9436
+ </article>
9437
+
9408
9438
  <article class="cap rcard" id="prose-and-terminology-linting-vale">
9409
9439
  <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Content</span></div>
9410
9440
  <h3>Prose &amp; terminology linting — <code>vale</code></h3>
File without changes
File without changes