boost-skill-cli 1.2.28__tar.gz → 1.2.30__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 (762) hide show
  1. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.vale/styles/config/vocabularies/boost/accept.txt +3 -0
  2. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/CONTRIBUTING.md +7 -0
  3. boost_skill_cli-1.2.30/GOVERNANCE.md +103 -0
  4. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/PKG-INFO +2 -1
  5. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/README.md +1 -0
  6. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/_version.py +2 -2
  7. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/PKG-INFO +2 -1
  8. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
  9. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/openssf-badge.md +7 -0
  10. boost_skill_cli-1.2.30/docs/openssf-playbook.md +238 -0
  11. boost_skill_cli-1.2.30/docs/roadmap/items/openssf-playbook.md +33 -0
  12. boost_skill_cli-1.2.30/docs/roadmap/items/openssf-silver.md +39 -0
  13. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap.html +66 -1
  14. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.gitattributes +0 -0
  15. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.gitignore +0 -0
  16. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.gitleaks.toml +0 -0
  17. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.htmlvalidate.json +0 -0
  18. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.lighthouserc.json +0 -0
  19. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.lycheeignore +0 -0
  20. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.markdownlint-cli2.jsonc +0 -0
  21. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.pre-commit-config.yaml +0 -0
  22. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.stylelintrc.json +0 -0
  23. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.vale/styles/boost/AIWriting.yml +0 -0
  24. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.vale/styles/boost/Terminology.yml +0 -0
  25. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/.vale.ini +0 -0
  26. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/CLAUDE.md +0 -0
  27. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/CODE_OF_CONDUCT.md +0 -0
  28. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/DCO +0 -0
  29. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/LICENSE +0 -0
  30. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/MAINTAINERS.md +0 -0
  31. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/MANIFEST.in +0 -0
  32. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/Makefile +0 -0
  33. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/SECURITY.md +0 -0
  34. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/SUPPORT.md +0 -0
  35. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost +0 -0
  36. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/__init__.py +0 -0
  37. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/__main__.py +0 -0
  38. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/cli.py +0 -0
  39. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/cliparse.py +0 -0
  40. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/__init__.py +0 -0
  41. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/_common.py +0 -0
  42. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/bmad.py +0 -0
  43. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/configuration.py +0 -0
  44. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/discovery.py +0 -0
  45. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/hooks.py +0 -0
  46. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/info.py +0 -0
  47. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/intelligence.py +0 -0
  48. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/pkg.py +0 -0
  49. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/quality.py +0 -0
  50. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/run.py +0 -0
  51. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/safety.py +0 -0
  52. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/taps.py +0 -0
  53. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/commands/team.py +0 -0
  54. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/__init__.py +0 -0
  55. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/adapters.py +0 -0
  56. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/agents.py +0 -0
  57. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/ai.py +0 -0
  58. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/bmad.py +0 -0
  59. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/bootstrap.py +0 -0
  60. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/browse.py +0 -0
  61. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/builtin.py +0 -0
  62. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/capabilities.py +0 -0
  63. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/catalog.py +0 -0
  64. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/catalogbundle.py +0 -0
  65. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/chat.py +0 -0
  66. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/claude_settings.py +0 -0
  67. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/complete.py +0 -0
  68. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/config.py +0 -0
  69. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/dense.py +0 -0
  70. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/ed25519.py +0 -0
  71. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/embed.py +0 -0
  72. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/faithfulness.py +0 -0
  73. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/frontmatter.py +0 -0
  74. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/gitutil.py +0 -0
  75. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/imperative.py +0 -0
  76. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/injectscan.py +0 -0
  77. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/installscan.py +0 -0
  78. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/integrity.py +0 -0
  79. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/journal.py +0 -0
  80. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/localembed.py +0 -0
  81. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/lockfile.py +0 -0
  82. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/logs.py +0 -0
  83. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/mcp.py +0 -0
  84. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/mcpdecl.py +0 -0
  85. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/mcphost.py +0 -0
  86. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/minisign.py +0 -0
  87. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/nethttp.py +0 -0
  88. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/output.py +0 -0
  89. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/paths.py +0 -0
  90. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/policy.py +0 -0
  91. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/projectlock.py +0 -0
  92. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/provenance.py +0 -0
  93. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/rag.py +0 -0
  94. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/registry.py +0 -0
  95. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/resolve.py +0 -0
  96. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/rules.py +0 -0
  97. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/scopes.py +0 -0
  98. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/secretscan.py +0 -0
  99. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/selfupdate.py +0 -0
  100. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/serve.py +0 -0
  101. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/stackprobe.py +0 -0
  102. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/staleness.py +0 -0
  103. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/store.py +0 -0
  104. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/trustaudit.py +0 -0
  105. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/typosquat.py +0 -0
  106. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/updatediff.py +0 -0
  107. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/util.py +0 -0
  108. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/core/workflows.py +0 -0
  109. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/data/registries.json +0 -0
  110. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/data/rules/boost-first.mdc +0 -0
  111. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/errors.py +0 -0
  112. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_cli/spin.py +0 -0
  113. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/__init__.py +0 -0
  114. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/_compat.py +0 -0
  115. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/graph.py +0 -0
  116. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/loader.py +0 -0
  117. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/py.typed +0 -0
  118. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_langchain/retriever.py +0 -0
  119. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  120. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  121. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/requires.txt +0 -0
  122. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/boost_skill_cli.egg-info/top_level.txt +0 -0
  123. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/codecov.yml +0 -0
  124. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/.claude/settings.local.json +0 -0
  125. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/DEBUGGING.md +0 -0
  126. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/adapters.html +0 -0
  127. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/README.md +0 -0
  128. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/c4-components-core.md +0 -0
  129. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/c4-containers.md +0 -0
  130. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/c4-context.md +0 -0
  131. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/architecture/c4-dynamic-install.md +0 -0
  132. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/distill.gif +0 -0
  133. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/doctor.gif +0 -0
  134. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/explain.gif +0 -0
  135. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/hooks.gif +0 -0
  136. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/install.gif +0 -0
  137. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/pulse.gif +0 -0
  138. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/search.gif +0 -0
  139. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/gifs/tap.gif +0 -0
  140. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/distill.tape +0 -0
  141. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/doctor.tape +0 -0
  142. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/explain.tape +0 -0
  143. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/hooks.tape +0 -0
  144. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/install.tape +0 -0
  145. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/pulse.tape +0 -0
  146. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/search.tape +0 -0
  147. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel/tapes/tap.tape +0 -0
  148. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/carousel.html +0 -0
  149. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/chat.html +0 -0
  150. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/commands.html +0 -0
  151. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/commit-audit.md +0 -0
  152. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/demo-index.json +0 -0
  153. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/demo.gif +0 -0
  154. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/demo.html +0 -0
  155. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/demo.tape +0 -0
  156. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/dependencies.md +0 -0
  157. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/design-roadmap.html +0 -0
  158. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/eval-latest.json +0 -0
  159. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/eval.html +0 -0
  160. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/index.html +0 -0
  161. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/langchain.html +0 -0
  162. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/mcp-hub.html +0 -0
  163. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/rag-architecture.md +0 -0
  164. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D01.md +0 -0
  165. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D02.md +0 -0
  166. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D03.md +0 -0
  167. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D04.md +0 -0
  168. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D05.md +0 -0
  169. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D06.md +0 -0
  170. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D07.md +0 -0
  171. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D08.md +0 -0
  172. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D09.md +0 -0
  173. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D10.md +0 -0
  174. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D11.md +0 -0
  175. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D12.md +0 -0
  176. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D13.md +0 -0
  177. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D14.md +0 -0
  178. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D15.md +0 -0
  179. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D16.md +0 -0
  180. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D17.md +0 -0
  181. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D18.md +0 -0
  182. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D19.md +0 -0
  183. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D20.md +0 -0
  184. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D21.md +0 -0
  185. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D22.md +0 -0
  186. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D23.md +0 -0
  187. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D24.md +0 -0
  188. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D25.md +0 -0
  189. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/BOOST-D26.md +0 -0
  190. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  191. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  192. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  193. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  194. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  195. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  196. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  197. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  198. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  199. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  200. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/bm25-has-no-stemming.md +0 -0
  201. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  202. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  203. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  204. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/boost-first-rule.md +0 -0
  205. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  206. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  207. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  208. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  209. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  210. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  211. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  212. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  213. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  214. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  215. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  216. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  217. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  218. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  219. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  220. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  221. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/cli-output-ignored-the-terminal.md +0 -0
  222. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  223. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  224. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/cold-search-reads-the-whole-catalogue.md +0 -0
  225. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/command-carousel-page.md +0 -0
  226. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  227. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  228. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  229. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  230. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  231. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  232. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  233. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  234. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  235. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  236. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  237. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  238. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  239. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  240. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dense-search-rescans-every-vector.md +0 -0
  241. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  242. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  243. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  244. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  245. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  246. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  247. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  248. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  249. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  250. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  251. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  252. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  253. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  254. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  255. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  256. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  257. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  258. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  259. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  260. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  261. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  262. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  263. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  264. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  265. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  266. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  267. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  268. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  269. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  270. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  271. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  272. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  273. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/github-community-health-files.md +0 -0
  274. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  275. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  276. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  277. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  278. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  279. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  280. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  281. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  282. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  283. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  284. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  285. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  286. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  287. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  288. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  289. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  290. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  291. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  292. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  293. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  294. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  295. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  296. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  297. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  298. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  299. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  300. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  301. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  302. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  303. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  304. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  305. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  306. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  307. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/long-hints-overflow-narrow-panes.md +0 -0
  308. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  309. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  310. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  311. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  312. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  313. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  314. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  315. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/marketing-crm-domain-had-no-category.md +0 -0
  316. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  317. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  318. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  319. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  320. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  321. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  322. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  323. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  324. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  325. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  326. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  327. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  328. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  329. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  330. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  331. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  332. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  333. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  334. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  335. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  336. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  337. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  338. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  339. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  340. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  341. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  342. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  343. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  344. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  345. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  346. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  347. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/openssf-best-practices-badge.md +0 -0
  348. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/osps-baseline-levels.md +0 -0
  349. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  350. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  351. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  352. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  353. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  354. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  355. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  356. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  357. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  358. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  359. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  360. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  361. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  362. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  363. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  364. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  365. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  366. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  367. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  368. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  369. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  370. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  371. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  372. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  373. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  374. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  375. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  376. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  377. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  378. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  379. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  380. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  381. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  382. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  383. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  384. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  385. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  386. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  387. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  388. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  389. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  390. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  391. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  392. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  393. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  394. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  395. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  396. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  397. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  398. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  399. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  400. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/search-and-browse-visual-refresh.md +0 -0
  401. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  402. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  403. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  404. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  405. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  406. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  407. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  408. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  409. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  410. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  411. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  412. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  413. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  414. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  415. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  416. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/smart-rerank-pays-per-novel-query.md +0 -0
  417. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  418. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  419. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  420. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  421. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  422. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  423. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  424. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  425. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  426. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  427. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  428. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  429. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  430. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  431. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/the-scale-corpus-refreshed-the-wrong-rows.md +0 -0
  432. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/the-shard-job-that-could-not-finish.md +0 -0
  433. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  434. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  435. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/two-ci-controls-that-could-not-act.md +0 -0
  436. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  437. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  438. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  439. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  440. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  441. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  442. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  443. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  444. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  445. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  446. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  447. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  448. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  449. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  450. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  451. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  452. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  453. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  454. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  455. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/workspace-scope-install.md +0 -0
  456. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/zip-strict-audit.md +0 -0
  457. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  458. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  459. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/security-design.md +0 -0
  460. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  461. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/docs/verifying-releases.md +0 -0
  462. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/eslint.config.mjs +0 -0
  463. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/README.md +0 -0
  464. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/__init__.py +0 -0
  465. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/baseline.json +0 -0
  466. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/faithfulness.py +0 -0
  467. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/golden_set.json +0 -0
  468. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/make_corpus.py +0 -0
  469. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/make_golden.py +0 -0
  470. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/metrics.py +0 -0
  471. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/publish_golden_dataset.py +0 -0
  472. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/evals/run_evals.py +0 -0
  473. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/examples/README.md +0 -0
  474. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/examples/adapt-demo.sh +0 -0
  475. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/examples/boost-run-prototype.sh +0 -0
  476. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/index.html +0 -0
  477. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/noxfile.py +0 -0
  478. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/pyproject.toml +0 -0
  479. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/coverage-tools.in +0 -0
  480. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/coverage-tools.txt +0 -0
  481. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/lint-tools.in +0 -0
  482. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/lint-tools.txt +0 -0
  483. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/mutation-tools.in +0 -0
  484. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/mutation-tools.txt +0 -0
  485. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/platform-pins.lock +0 -0
  486. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/release-tools.in +0 -0
  487. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/release-tools.txt +0 -0
  488. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/test-tools.in +0 -0
  489. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/requirements/test-tools.txt +0 -0
  490. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/a11y_check.py +0 -0
  491. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/bench_cli.sh +0 -0
  492. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_command_reference.py +0 -0
  493. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_demo_index.py +0 -0
  494. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_registries.py +0 -0
  495. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_roadmap.py +0 -0
  496. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/build_scale_corpus.py +0 -0
  497. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/check_anchors.py +0 -0
  498. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/check_dco.py +0 -0
  499. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/check_licenses.py +0 -0
  500. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/check_required_checks.py +0 -0
  501. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/ensure_eval_corpus.sh +0 -0
  502. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_corpus.py +0 -0
  503. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_explain.py +0 -0
  504. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_gate.py +0 -0
  505. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_recommend.py +0 -0
  506. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_retrieval.py +0 -0
  507. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/eval_stats_summary.py +0 -0
  508. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/import_budget.py +0 -0
  509. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/lock_toolchain.py +0 -0
  510. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/measure_registry.py +0 -0
  511. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/mutation_gate.py +0 -0
  512. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/mutation_shards.py +0 -0
  513. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/mutation_weights.json +0 -0
  514. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/page_budget.py +0 -0
  515. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/perf_gate.py +0 -0
  516. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/post_deploy_smoke.py +0 -0
  517. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/publish_eval_json.py +0 -0
  518. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/release_guard.py +0 -0
  519. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/release_preflight.py +0 -0
  520. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/scripts/serve_docs.py +0 -0
  521. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/setup.cfg +0 -0
  522. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/sonar-project.properties +0 -0
  523. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/style/README.md +0 -0
  524. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/style/boost.css +0 -0
  525. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/style/boost.js +0 -0
  526. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/style/demo.html +0 -0
  527. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/adapt.feature +0 -0
  528. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/browse.feature +0 -0
  529. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/count.feature +0 -0
  530. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/discover.feature +0 -0
  531. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/doctor.feature +0 -0
  532. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/environment.py +0 -0
  533. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/explain.feature +0 -0
  534. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/index.feature +0 -0
  535. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/install.feature +0 -0
  536. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/list.feature +0 -0
  537. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/mcp.feature +0 -0
  538. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/search.feature +0 -0
  539. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/steps/cli_steps.py +0 -0
  540. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/steps/discovery_steps.py +0 -0
  541. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/steps/mcp_steps.py +0 -0
  542. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/bdd/features/steps/quality_steps.py +0 -0
  543. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/conftest.py +0 -0
  544. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/baseline.json +0 -0
  545. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/explain.jsonl +0 -0
  546. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/golden-natural.jsonl +0 -0
  547. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/golden.jsonl +0 -0
  548. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/recommend.jsonl +0 -0
  549. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/taps-scale.txt +0 -0
  550. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/eval/taps.txt +0 -0
  551. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_capabilities_policy.py +0 -0
  552. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_adapt.py +0 -0
  553. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_bmad.py +0 -0
  554. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_catalog.py +0 -0
  555. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_chat.py +0 -0
  556. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_configuration.py +0 -0
  557. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_discovery.py +0 -0
  558. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_hooks.py +0 -0
  559. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_info.py +0 -0
  560. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_intelligence.py +0 -0
  561. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_pane_width.py +0 -0
  562. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_pkg.py +0 -0
  563. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_quality.py +0 -0
  564. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_taps.py +0 -0
  565. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_cli_team.py +0 -0
  566. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_everyday_loop.py +0 -0
  567. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_integrity_enforce.py +0 -0
  568. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_kind_conformance.py +0 -0
  569. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_property_parsers.py +0 -0
  570. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_run.py +0 -0
  571. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_tap_signing.py +0 -0
  572. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/functional/test_workspace_scope.py +0 -0
  573. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/README.md +0 -0
  574. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  575. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  576. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  577. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  578. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  579. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  580. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  581. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  582. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  583. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  584. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  585. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  586. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  587. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  588. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  589. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  590. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  591. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  592. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  593. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  594. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  595. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  596. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  597. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/fuzz_frontmatter.py +0 -0
  598. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/fuzz/fuzz_registry.py +0 -0
  599. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/langchain/conftest.py +0 -0
  600. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/langchain/test_graph.py +0 -0
  601. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/langchain/test_loader.py +0 -0
  602. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/langchain/test_retriever.py +0 -0
  603. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/make_fixture.py +0 -0
  604. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/perf/test_benchmarks.py +0 -0
  605. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/smoke.sh +0 -0
  606. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_a11y_check.py +0 -0
  607. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_action_pin_lockstep.py +0 -0
  608. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_adapters.py +0 -0
  609. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_adapters_multi.py +0 -0
  610. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_adapters_runner.py +0 -0
  611. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_agents.py +0 -0
  612. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_ai.py +0 -0
  613. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_bmad_core.py +0 -0
  614. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_boost_first_offer.py +0 -0
  615. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_bootstrap.py +0 -0
  616. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_browse.py +0 -0
  617. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_builtin.py +0 -0
  618. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_capabilities.py +0 -0
  619. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_catalog.py +0 -0
  620. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_catalogbundle.py +0 -0
  621. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_chat.py +0 -0
  622. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_check_anchors.py +0 -0
  623. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_check_dco.py +0 -0
  624. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_check_licenses.py +0 -0
  625. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_claude_settings.py +0 -0
  626. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_clean_internal_cache.py +0 -0
  627. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_cliparse.py +0 -0
  628. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_codeql_analysis_key.py +0 -0
  629. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_command_reference_fresh.py +0 -0
  630. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_community_health_files.py +0 -0
  631. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_compact.py +0 -0
  632. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_complete.py +0 -0
  633. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_complete_rc_block.py +0 -0
  634. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_config.py +0 -0
  635. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_content_dedupe.py +0 -0
  636. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_content_identity.py +0 -0
  637. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_crash_redaction.py +0 -0
  638. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dedup_trust.py +0 -0
  639. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_demo_index.py +0 -0
  640. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense.py +0 -0
  641. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_embed_dedupe.py +0 -0
  642. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_fallback.py +0 -0
  643. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_fix_hint.py +0 -0
  644. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_quantized.py +0 -0
  645. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_ready_order.py +0 -0
  646. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_shard_real_schema.py +0 -0
  647. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  648. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_shards.py +0 -0
  649. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_status.py +0 -0
  650. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dense_status_cheap.py +0 -0
  651. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_dependabot_config.py +0 -0
  652. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_docs_pages_linked.py +0 -0
  653. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_docsite_chrome.py +0 -0
  654. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_ed25519.py +0 -0
  655. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_embed.py +0 -0
  656. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_embed_local.py +0 -0
  657. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_embed_truncated_response.py +0 -0
  658. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_entry_key.py +0 -0
  659. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_errors_and_cli_table.py +0 -0
  660. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_baseline.py +0 -0
  661. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_corpus.py +0 -0
  662. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_faithfulness.py +0 -0
  663. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_gate.py +0 -0
  664. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_grading.py +0 -0
  665. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_metrics.py +0 -0
  666. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_eval_stats_summary.py +0 -0
  667. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_failure_alerting_covers_unattended.py +0 -0
  668. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_faithfulness.py +0 -0
  669. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_frontmatter.py +0 -0
  670. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_fuzz_targets.py +0 -0
  671. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  672. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gitleaks_config.py +0 -0
  673. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gitutil.py +0 -0
  674. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gitutil_lfs.py +0 -0
  675. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_gitutil_sparse.py +0 -0
  676. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_imperative.py +0 -0
  677. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_import_budget.py +0 -0
  678. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_injectscan.py +0 -0
  679. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_install_permission_error.py +0 -0
  680. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_installscan.py +0 -0
  681. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_integrity.py +0 -0
  682. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_journal.py +0 -0
  683. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_langchain_packaging.py +0 -0
  684. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_link_ownership.py +0 -0
  685. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_localembed.py +0 -0
  686. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_localembed_e2e.py +0 -0
  687. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_lockfile.py +0 -0
  688. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_logs.py +0 -0
  689. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_marketing_counts.py +0 -0
  690. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mcp.py +0 -0
  691. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mcp_install_scan.py +0 -0
  692. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mcpdecl.py +0 -0
  693. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mcphost.py +0 -0
  694. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_measure_registry.py +0 -0
  695. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_minisign.py +0 -0
  696. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mutation_hardening.py +0 -0
  697. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mutation_shards.py +0 -0
  698. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mutation_subfile_shards.py +0 -0
  699. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_mutmut_source_paths.py +0 -0
  700. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_nethttp.py +0 -0
  701. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_output.py +0 -0
  702. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_page_budget.py +0 -0
  703. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_paths.py +0 -0
  704. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_perf_gate.py +0 -0
  705. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_pkg_confusions.py +0 -0
  706. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_pkg_injection.py +0 -0
  707. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_pkg_secrets.py +0 -0
  708. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_platform_pins.py +0 -0
  709. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_policy.py +0 -0
  710. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_post_deploy_smoke.py +0 -0
  711. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_project_mcp_sidecar.py +0 -0
  712. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_projectlock.py +0 -0
  713. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_provenance.py +0 -0
  714. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_publish_golden_dataset.py +0 -0
  715. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rag.py +0 -0
  716. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rag_fastpath.py +0 -0
  717. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rag_fusion.py +0 -0
  718. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_registries_fresh.py +0 -0
  719. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_registry.py +0 -0
  720. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_registry_categories.py +0 -0
  721. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_registry_control_chars.py +0 -0
  722. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_release_guard.py +0 -0
  723. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_release_preflight.py +0 -0
  724. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_required_checks.py +0 -0
  725. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rerank_cache.py +0 -0
  726. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_resolve.py +0 -0
  727. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_roadmap_fresh.py +0 -0
  728. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_rules.py +0 -0
  729. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_scale_corpus.py +0 -0
  730. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_scopes.py +0 -0
  731. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_secretscan.py +0 -0
  732. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_selfupdate.py +0 -0
  733. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_serve.py +0 -0
  734. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_serve_docs.py +0 -0
  735. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_shards_matrix.py +0 -0
  736. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_smoke_covers_every_command.py +0 -0
  737. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_spin.py +0 -0
  738. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_stackprobe.py +0 -0
  739. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_staleness.py +0 -0
  740. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_store.py +0 -0
  741. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_store_materialize.py +0 -0
  742. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_sync_blocked_links.py +0 -0
  743. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  744. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_token_parity.py +0 -0
  745. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_toolchain_lock.py +0 -0
  746. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_trustaudit.py +0 -0
  747. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_typosquat.py +0 -0
  748. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_updatediff.py +0 -0
  749. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_util.py +0 -0
  750. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_version.py +0 -0
  751. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_visual_harness_flags.py +0 -0
  752. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflow_concurrency.py +0 -0
  753. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  754. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflow_push_has_credentials.py +0 -0
  755. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflow_timeouts.py +0 -0
  756. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_workflows.py +0 -0
  757. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  758. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/visual/a11y_check.mjs +0 -0
  759. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/visual/console_check.mjs +0 -0
  760. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/visual/package-lock.json +0 -0
  761. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/tests/visual/package.json +0 -0
  762. {boost_skill_cli-1.2.28 → boost_skill_cli-1.2.30}/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
@@ -128,6 +128,13 @@ published release, to record an assertion nobody actually made.
128
128
  Bot authors (Dependabot and friends) are exempt — an account cannot agree to a
129
129
  certificate.
130
130
 
131
+ ## Governance
132
+
133
+ Who decides, how a decision gets made, and what happens when people disagree:
134
+ [GOVERNANCE.md](GOVERNANCE.md). Who holds which role and which credential:
135
+ [MAINTAINERS.md](MAINTAINERS.md). Both say plainly that this is a
136
+ single-maintainer project today rather than implying a committee.
137
+
131
138
  ## Code of conduct
132
139
 
133
140
  Participation is governed by the [Code of Conduct](CODE_OF_CONDUCT.md)
@@ -0,0 +1,103 @@
1
+ # Governance
2
+
3
+ How boost makes decisions, who makes them, and what happens when people
4
+ disagree. [MAINTAINERS.md](MAINTAINERS.md) is the companion: it lists who holds
5
+ which role and which credential. This file is about the *process*.
6
+
7
+ ## The short version
8
+
9
+ boost is a **single-maintainer project** run in the open. The lead maintainer
10
+ decides; everything that shapes a decision — the roadmap, the quality gates, the
11
+ reasoning behind a change — is public and arguable before it lands. That is a
12
+ benevolent-dictator model, and naming it plainly is better than implying a
13
+ committee that does not exist.
14
+
15
+ This is stated as the current state, not an aspiration. It changes when a second
16
+ maintainer is appointed under
17
+ [MAINTAINERS.md](MAINTAINERS.md#becoming-a-maintainer), and this file changes
18
+ with it.
19
+
20
+ ## How a decision gets made
21
+
22
+ **1. Anyone may propose.** Open an issue, or open a pull request. There is no
23
+ membership requirement and no form to fill in.
24
+
25
+ **2. The argument happens in public, on the artifact.** Issues, pull requests,
26
+ and the roadmap boards. A decision made in a private channel is not a decision
27
+ this project recognises; if something was settled elsewhere, it gets written
28
+ down in the open before it is acted on.
29
+
30
+ **3. The gates decide what they can.** A large class of decisions is not a
31
+ matter of opinion here — the change either passes the required checks or it does
32
+ not. Coverage, mutation score, retrieval quality, the lint and type gates, the
33
+ generated-file freshness checks: these are stated thresholds, and a maintainer
34
+ does not get to wave one through. Changing a *threshold* is itself a decision
35
+ that goes through this process, in its own pull request, with the measurement
36
+ that justifies it.
37
+
38
+ **4. The lead maintainer decides what the gates cannot.** Scope, design,
39
+ priority, and whether a proposal fits the project at all. The decision is
40
+ recorded where the work is: in the pull request, or as a roadmap card.
41
+
42
+ **5. A "no" is recorded, not dropped.** The roadmap has a `declined` status
43
+ precisely so a rejected proposal stops reading as backlog. Without it the same
44
+ refuted question gets re-opened by the next person — or the next agent — who
45
+ scans the board for work. If your proposal is declined you get the reason in
46
+ writing, and it stays there.
47
+
48
+ ## Disagreements
49
+
50
+ **With a decision.** Say so on the issue or pull request. Bring the thing that
51
+ would change the answer: a measurement, a failing case, a constraint that was
52
+ missed. This project changes its mind on evidence and says so when it does —
53
+ several roadmap cards exist specifically to record that an earlier claim was
54
+ wrong.
55
+
56
+ **With the process, or with a person.** Conduct concerns go through the private
57
+ reporting route in [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md), never a public
58
+ issue.
59
+
60
+ **When you cannot reach agreement.** With a single maintainer there is no appeal
61
+ body, and pretending otherwise would be dishonest. The real backstop is the
62
+ licence: boost is GPL-3.0 with full public history, so anyone who thinks the
63
+ project is being run badly can fork it and prove it. That is a genuine check on
64
+ the maintainer, not a consolation prize.
65
+
66
+ ## What is deliberately not decided by discussion
67
+
68
+ Some things are settled by rule, and a pull request arguing the opposite gets
69
+ declined on sight unless it changes the rule first:
70
+
71
+ - **The runtime imports no third-party package.** Enforced by `import-linter`.
72
+ - **Generated files are never hand-edited.** `registries.json`, both roadmap
73
+ boards, `commands.html`. Edit the source and regenerate.
74
+ - **A suppressed finding needs a written argument**, naming what would have to
75
+ change for the suppression to stop being true. See
76
+ [`docs/dependencies.md`](docs/dependencies.md).
77
+ - **A badge answer or a security claim must be checkable.** If the evidence
78
+ needs credentials nobody reading has, the claim gets softened to what *is*
79
+ checkable rather than asserted.
80
+
81
+ ## Roadmap and priority
82
+
83
+ Priority is public and data-driven. Both boards are generated from one file per
84
+ item under `docs/roadmap/items/`, so proposing work is a pull request adding a
85
+ card, and claiming work is a pull request setting `status` and `owner` on one.
86
+ Two people claiming different items touch different files and merge cleanly; two
87
+ claiming the *same* item conflict on that one small file, which is the intended
88
+ "already claimed" signal — first to merge wins.
89
+
90
+ There is no private backlog. What is on the boards is what is planned.
91
+
92
+ ## Releases
93
+
94
+ Every merge to `main` cuts a release. There is no release manager, no release
95
+ meeting, and no window: the decision to release *is* the decision to merge.
96
+ Consequences of that are set out in [SUPPORT.md](SUPPORT.md) — only the latest
97
+ release is supported — and in
98
+ [`docs/verifying-releases.md`](docs/verifying-releases.md), which is how you
99
+ check that a release came from this repository.
100
+
101
+ ## Changing this document
102
+
103
+ Like anything else: a pull request, argued in public, merged through the gates.
@@ -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.30
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -725,6 +725,7 @@ Dynamic: license-file
725
725
  [![Mutation score](https://img.shields.io/badge/mutation_score-%E2%89%A580%25_killed-blueviolet)](https://github.com/jonnyeclectic/boost/blob/main/scripts/mutation_gate.py)
726
726
  [![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey)](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
727
727
  [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14275/badge)](https://www.bestpractices.dev/projects/14275)
728
+ [![OpenSSF Baseline](https://www.bestpractices.dev/projects/14275/baseline)](https://www.bestpractices.dev/projects/14275/baseline-2)
728
729
  [![License](https://img.shields.io/github/license/jonnyeclectic/boost)](LICENSE)
729
730
 
730
731
  **Homebrew for AI coding skills.** boost finds, installs, and version-tracks
@@ -7,6 +7,7 @@
7
7
  [![Mutation score](https://img.shields.io/badge/mutation_score-%E2%89%A580%25_killed-blueviolet)](https://github.com/jonnyeclectic/boost/blob/main/scripts/mutation_gate.py)
8
8
  [![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey)](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
9
9
  [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14275/badge)](https://www.bestpractices.dev/projects/14275)
10
+ [![OpenSSF Baseline](https://www.bestpractices.dev/projects/14275/baseline)](https://www.bestpractices.dev/projects/14275/baseline-2)
10
11
  [![License](https://img.shields.io/github/license/jonnyeclectic/boost)](LICENSE)
11
12
 
12
13
  **Homebrew for AI coding skills.** boost finds, installs, and version-tracks
@@ -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.30'
22
+ __version_tuple__ = version_tuple = (1, 2, 30)
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.30
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -725,6 +725,7 @@ Dynamic: license-file
725
725
  [![Mutation score](https://img.shields.io/badge/mutation_score-%E2%89%A580%25_killed-blueviolet)](https://github.com/jonnyeclectic/boost/blob/main/scripts/mutation_gate.py)
726
726
  [![Platform](https://img.shields.io/badge/platform-macOS%20%7C%20Linux-lightgrey)](https://github.com/jonnyeclectic/boost/actions/workflows/ci.yml)
727
727
  [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/14275/badge)](https://www.bestpractices.dev/projects/14275)
728
+ [![OpenSSF Baseline](https://www.bestpractices.dev/projects/14275/baseline)](https://www.bestpractices.dev/projects/14275/baseline-2)
728
729
  [![License](https://img.shields.io/github/license/jonnyeclectic/boost)](LICENSE)
729
730
 
730
731
  **Homebrew for AI coding skills.** boost finds, installs, and version-tracks
@@ -12,6 +12,7 @@ CLAUDE.md
12
12
  CODE_OF_CONDUCT.md
13
13
  CONTRIBUTING.md
14
14
  DCO
15
+ GOVERNANCE.md
15
16
  LICENSE
16
17
  MAINTAINERS.md
17
18
  MANIFEST.in
@@ -138,6 +139,7 @@ docs/index.html
138
139
  docs/langchain.html
139
140
  docs/mcp-hub.html
140
141
  docs/openssf-badge.md
142
+ docs/openssf-playbook.md
141
143
  docs/rag-architecture.md
142
144
  docs/roadmap.html
143
145
  docs/security-design.md
@@ -348,6 +350,8 @@ docs/roadmap/items/one-commit-can-cut-two-releases.md
348
350
  docs/roadmap/items/one-dead-tap-broke-every-update.md
349
351
  docs/roadmap/items/one-shared-atomic-write-helper.md
350
352
  docs/roadmap/items/openssf-best-practices-badge.md
353
+ docs/roadmap/items/openssf-playbook.md
354
+ docs/roadmap/items/openssf-silver.md
351
355
  docs/roadmap/items/osps-baseline-levels.md
352
356
  docs/roadmap/items/package-metadata-validation-twine-check-friends.md
353
357
  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.
@@ -0,0 +1,39 @@
1
+ ---
2
+ id: openssf-silver
3
+ board: code
4
+ section: health
5
+ status: inflight
6
+ category: Security · Posture
7
+ complexity: S
8
+ impact: Med
9
+ wow: 3
10
+ note: 55 criteria, 31% → the gap was two documents, not fifty
11
+ order: 7
12
+ owner: loop/openssf-silver
13
+ pr:
14
+ title: OpenSSF silver — reachable solo, and mostly already true
15
+ ---
16
+ Silver reads like a wall — <b>55 criteria</b> on top of passing — and the board showed 31%
17
+ with 37 unanswered. Reading them rather than assuming turned the estimate from "a day" into
18
+ <b>two documents</b>. The same lesson <a href="roadmap.html#osps-baseline-levels">the Baseline
19
+ audit</a> taught: most unanswered criteria are already satisfied and merely unrecorded.
20
+ Eighteen were <b>already answered</b>, because the badge site carries a justification across
21
+ levels wherever a criterion name repeats — so <code>assurance_case</code>,
22
+ <code>signed_releases</code>, <code>dco</code> and <code>roles_responsibilities</code> arrived
23
+ already Met from the passing and Baseline work. Most of the remaining 37 are evidence that
24
+ exists and had never been written into a form: the coverage and mutation gates, the
25
+ hash-pinned toolchain, the C4 architecture docs, the generated command reference with its
26
+ freshness check.
27
+ <b>The two genuine gaps.</b> <code>governance</code> wanted the decision-making model, which
28
+ <code>MAINTAINERS.md</code> did not cover — it lists roles, not how a decision gets made or
29
+ what happens when people disagree. <code>GOVERNANCE.md</code> now says it plainly: a
30
+ benevolent-dictator model, the gates decide what they can, a "no" is recorded rather than
31
+ dropped, and the real backstop on a single maintainer is the GPL and a public history —
32
+ anyone who thinks it is run badly can fork and prove it. <code>documentation_achievements</code>
33
+ wanted the badges hyperlinked from the front page.
34
+ <b>What stays honestly Unmet</b>, all SHOULD or SUGGESTED, so the badge still passes:
35
+ <code>bus_factor</code> (one maintainer), <code>version_tags_signed</code> (tags are
36
+ unsigned; releases carry SLSA provenance instead), <code>crypto_algorithm_agility</code>
37
+ (minisign is Ed25519-only by format) and <code>internationalization</code> (the CLI is
38
+ English-only). Gold remains out of reach for the reason it always was — it needs a second
39
+ human, not a commit.
@@ -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>271</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -4759,6 +4759,41 @@ improvement is real (or isn't)."</p></details>
4759
4759
  </div>
4760
4760
  </article>
4761
4761
 
4762
+ <article class="cap rcard" id="openssf-silver">
4763
+ <div class="head"><span class="pill inflight">In flight</span><span class="cat">Security · Posture</span></div>
4764
+ <h3>OpenSSF silver — reachable solo, and mostly already true</h3>
4765
+ <p>Silver reads like a wall — <b>55 criteria</b> on top of passing — and the board showed 31%
4766
+ with 37 unanswered. Reading them rather than assuming turned the estimate from "a day" into
4767
+ <b>two documents</b>. The same lesson <a href="roadmap.html#osps-baseline-levels">the Baseline
4768
+ audit</a> taught: most unanswered criteria are already satisfied and merely unrecorded.
4769
+ Eighteen were <b>already answered</b>, because the badge site carries a justification across
4770
+ levels wherever a criterion name repeats — so <code>assurance_case</code>,
4771
+ <code>signed_releases</code>, <code>dco</code> and <code>roles_responsibilities</code> arrived
4772
+ already Met from the passing and Baseline work. Most of the remaining 37 are evidence that
4773
+ exists and had never been written into a form: the coverage and mutation gates, the
4774
+ hash-pinned toolchain, the C4 architecture docs, the generated command reference with its
4775
+ freshness check.
4776
+ <b>The two genuine gaps.</b> <code>governance</code> wanted the decision-making model, which
4777
+ <code>MAINTAINERS.md</code> did not cover — it lists roles, not how a decision gets made or
4778
+ what happens when people disagree. <code>GOVERNANCE.md</code> now says it plainly: a
4779
+ benevolent-dictator model, the gates decide what they can, a "no" is recorded rather than
4780
+ dropped, and the real backstop on a single maintainer is the GPL and a public history —
4781
+ anyone who thinks it is run badly can fork and prove it. <code>documentation_achievements</code>
4782
+ wanted the badges hyperlinked from the front page.
4783
+ <b>What stays honestly Unmet</b>, all SHOULD or SUGGESTED, so the badge still passes:
4784
+ <code>bus_factor</code> (one maintainer), <code>version_tags_signed</code> (tags are
4785
+ unsigned; releases carry SLSA provenance instead), <code>crypto_algorithm_agility</code>
4786
+ (minisign is Ed25519-only by format) and <code>internationalization</code> (the CLI is
4787
+ English-only). Gold remains out of reach for the reason it always was — it needs a second
4788
+ human, not a commit.</p>
4789
+ <div class="meta">
4790
+ <span class="m">Complexity <b>S</b></span>
4791
+ <span class="m">Impact <b>Med</b></span>
4792
+ <span class="m">Wow <b class="wow">★★★</b></span>
4793
+ <span class="m">55 criteria, 31% → the gap was two documents, not fifty</span>
4794
+ </div>
4795
+ </article>
4796
+
4762
4797
  <article class="cap rcard" id="property-based-tests-hypothesis-on-the-parsers">
4763
4798
  <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Testing · Bug</span></div>
4764
4799
  <h3>Property-based tests — <code>hypothesis</code> on the parsers</h3>
@@ -9405,6 +9440,36 @@ and the work stays visible.</p></details>
9405
9440
  </div>
9406
9441
  </article>
9407
9442
 
9443
+ <article class="cap rcard" id="openssf-playbook">
9444
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Docs</span></div>
9445
+ <h3>The OpenSSF badge playbook</h3>
9446
+ <details class="cardbody"><summary>Write-up</summary>
9447
+ <p>Three badges in one session left two kinds of artifact behind. <a href="roadmap.html#openssf-best-practices-badge">The
9448
+ answer sheets</a> record <i>what boost answered</i>, which is worth exactly nothing to
9449
+ anybody else. This records <b>the method</b>.
9450
+ The parts that cost real time to discover: the badge site issues <b>four independent
9451
+ badges</b>, not one with tiers, each at its own <code>/&lt;level&gt;/edit</code> form. The
9452
+ authoritative criteria need <b>two</b> upstream files — <code>criteria.yml</code> has the
9453
+ MUST/SHOULD and <code>na_allowed</code> flags but no prose, <code>en.yml</code> has the
9454
+ prose — and the obvious <code>/criteria/0.json</code> endpoint returns 406. A parser that
9455
+ does not stop at <code>- '1':</code> folds silver into passing; passing is exactly 67, so
9456
+ the count is the check.
9457
+ The part that changes how you plan: <b>most unanswered criteria are already satisfied and
9458
+ merely unrecorded</b>. Nine of Baseline Level 1's 24 were open and every one was already
9459
+ true — the work was proving it, not building it, and the badge went 63% → 100% with no code.
9460
+ So every criterion sorts into three buckets: documentation you can write, a repository
9461
+ setting you cannot do from a branch, and <b>structurally blocked — say so and move on</b>.
9462
+ Also records the three honesty traps this project walked into and had to back out of:
9463
+ claiming a setting that needs credentials to read, restating a claim the repo's own
9464
+ Scorecard triage refuses to make, and inheriting "the licence is MIT" when it is GPL-3.0.</p></details>
9465
+ <div class="meta">
9466
+ <span class="m">Complexity <b>S</b></span>
9467
+ <span class="m">Impact <b>Med</b></span>
9468
+ <span class="m">Wow <b class="wow">★★★</b></span>
9469
+ <span class="m">the method, not the answers — so another repo can repeat it</span>
9470
+ </div>
9471
+ </article>
9472
+
9408
9473
  <article class="cap rcard" id="prose-and-terminology-linting-vale">
9409
9474
  <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Content</span></div>
9410
9475
  <h3>Prose &amp; terminology linting — <code>vale</code></h3>