boost-skill-cli 1.2.6__tar.gz → 1.2.8__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 (730) hide show
  1. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  4. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  5. boost_skill_cli-1.2.8/docs/roadmap/items/the-shard-job-that-could-not-finish.md +46 -0
  6. boost_skill_cli-1.2.8/docs/roadmap/items/two-ci-controls-that-could-not-act.md +50 -0
  7. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap.html +91 -1
  8. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_failure_alerting_covers_unattended.py +44 -0
  9. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_workflow_push_has_credentials.py +40 -0
  10. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.gitattributes +0 -0
  11. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.gitignore +0 -0
  12. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.gitleaks.toml +0 -0
  13. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.htmlvalidate.json +0 -0
  14. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.lighthouserc.json +0 -0
  15. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.lycheeignore +0 -0
  16. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.markdownlint-cli2.jsonc +0 -0
  17. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.pre-commit-config.yaml +0 -0
  18. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.stylelintrc.json +0 -0
  19. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.vale/styles/boost/Terminology.yml +0 -0
  20. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  21. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/.vale.ini +0 -0
  22. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/CLAUDE.md +0 -0
  23. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/CODE_OF_CONDUCT.md +0 -0
  24. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/CONTRIBUTING.md +0 -0
  25. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/LICENSE +0 -0
  26. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/MANIFEST.in +0 -0
  27. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/Makefile +0 -0
  28. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/README.md +0 -0
  29. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/SECURITY.md +0 -0
  30. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost +0 -0
  31. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/__init__.py +0 -0
  32. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/__main__.py +0 -0
  33. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/cli.py +0 -0
  34. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/cliparse.py +0 -0
  35. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/__init__.py +0 -0
  36. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/_common.py +0 -0
  37. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/bmad.py +0 -0
  38. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/configuration.py +0 -0
  39. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/discovery.py +0 -0
  40. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/hooks.py +0 -0
  41. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/info.py +0 -0
  42. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/intelligence.py +0 -0
  43. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/pkg.py +0 -0
  44. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/quality.py +0 -0
  45. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/run.py +0 -0
  46. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/safety.py +0 -0
  47. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/taps.py +0 -0
  48. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/commands/team.py +0 -0
  49. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/__init__.py +0 -0
  50. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/adapters.py +0 -0
  51. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/agents.py +0 -0
  52. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/ai.py +0 -0
  53. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/bmad.py +0 -0
  54. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/bootstrap.py +0 -0
  55. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/browse.py +0 -0
  56. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/builtin.py +0 -0
  57. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/capabilities.py +0 -0
  58. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/catalog.py +0 -0
  59. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/catalogbundle.py +0 -0
  60. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/chat.py +0 -0
  61. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/claude_settings.py +0 -0
  62. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/complete.py +0 -0
  63. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/config.py +0 -0
  64. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/dense.py +0 -0
  65. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/ed25519.py +0 -0
  66. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/embed.py +0 -0
  67. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/faithfulness.py +0 -0
  68. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/frontmatter.py +0 -0
  69. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/gitutil.py +0 -0
  70. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/imperative.py +0 -0
  71. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/injectscan.py +0 -0
  72. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/installscan.py +0 -0
  73. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/integrity.py +0 -0
  74. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/journal.py +0 -0
  75. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/localembed.py +0 -0
  76. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/lockfile.py +0 -0
  77. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/logs.py +0 -0
  78. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/mcp.py +0 -0
  79. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/mcpdecl.py +0 -0
  80. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/mcphost.py +0 -0
  81. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/minisign.py +0 -0
  82. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/nethttp.py +0 -0
  83. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/output.py +0 -0
  84. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/paths.py +0 -0
  85. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/policy.py +0 -0
  86. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/projectlock.py +0 -0
  87. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/provenance.py +0 -0
  88. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/rag.py +0 -0
  89. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/registry.py +0 -0
  90. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/resolve.py +0 -0
  91. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/rules.py +0 -0
  92. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/scopes.py +0 -0
  93. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/secretscan.py +0 -0
  94. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/selfupdate.py +0 -0
  95. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/serve.py +0 -0
  96. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/stackprobe.py +0 -0
  97. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/staleness.py +0 -0
  98. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/store.py +0 -0
  99. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/trustaudit.py +0 -0
  100. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/typosquat.py +0 -0
  101. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/updatediff.py +0 -0
  102. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/util.py +0 -0
  103. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/core/workflows.py +0 -0
  104. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/data/registries.json +0 -0
  105. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/data/rules/boost-first.mdc +0 -0
  106. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/errors.py +0 -0
  107. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_cli/spin.py +0 -0
  108. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_langchain/__init__.py +0 -0
  109. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_langchain/_compat.py +0 -0
  110. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_langchain/graph.py +0 -0
  111. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_langchain/loader.py +0 -0
  112. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_langchain/py.typed +0 -0
  113. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_langchain/retriever.py +0 -0
  114. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  115. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  116. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_skill_cli.egg-info/requires.txt +0 -0
  117. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/boost_skill_cli.egg-info/top_level.txt +0 -0
  118. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/codecov.yml +0 -0
  119. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/.claude/settings.local.json +0 -0
  120. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/DEBUGGING.md +0 -0
  121. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/adapters.html +0 -0
  122. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/architecture/README.md +0 -0
  123. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/architecture/c4-components-core.md +0 -0
  124. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/architecture/c4-containers.md +0 -0
  125. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/architecture/c4-context.md +0 -0
  126. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/architecture/c4-dynamic-install.md +0 -0
  127. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/gifs/distill.gif +0 -0
  128. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/gifs/doctor.gif +0 -0
  129. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/gifs/explain.gif +0 -0
  130. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/gifs/hooks.gif +0 -0
  131. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/gifs/install.gif +0 -0
  132. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/gifs/pulse.gif +0 -0
  133. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/gifs/search.gif +0 -0
  134. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/gifs/tap.gif +0 -0
  135. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/tapes/distill.tape +0 -0
  136. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/tapes/doctor.tape +0 -0
  137. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/tapes/explain.tape +0 -0
  138. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/tapes/hooks.tape +0 -0
  139. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/tapes/install.tape +0 -0
  140. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/tapes/pulse.tape +0 -0
  141. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/tapes/search.tape +0 -0
  142. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel/tapes/tap.tape +0 -0
  143. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/carousel.html +0 -0
  144. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/chat.html +0 -0
  145. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/commands.html +0 -0
  146. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/demo-index.json +0 -0
  147. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/demo.gif +0 -0
  148. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/demo.html +0 -0
  149. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/demo.tape +0 -0
  150. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/design-roadmap.html +0 -0
  151. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/eval-latest.json +0 -0
  152. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/eval.html +0 -0
  153. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/index.html +0 -0
  154. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/langchain.html +0 -0
  155. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/mcp-hub.html +0 -0
  156. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/rag-architecture.md +0 -0
  157. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D01.md +0 -0
  158. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D02.md +0 -0
  159. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D03.md +0 -0
  160. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D04.md +0 -0
  161. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D05.md +0 -0
  162. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D06.md +0 -0
  163. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D07.md +0 -0
  164. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D08.md +0 -0
  165. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D09.md +0 -0
  166. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D10.md +0 -0
  167. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D11.md +0 -0
  168. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D12.md +0 -0
  169. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D13.md +0 -0
  170. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D14.md +0 -0
  171. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D15.md +0 -0
  172. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D16.md +0 -0
  173. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D17.md +0 -0
  174. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D18.md +0 -0
  175. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D19.md +0 -0
  176. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D20.md +0 -0
  177. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D21.md +0 -0
  178. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D22.md +0 -0
  179. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D23.md +0 -0
  180. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D24.md +0 -0
  181. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D25.md +0 -0
  182. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/BOOST-D26.md +0 -0
  183. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  184. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  185. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  186. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  187. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  188. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  189. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  190. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  191. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  192. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  193. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  194. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  195. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  196. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/boost-first-rule.md +0 -0
  197. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  198. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  199. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  200. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  201. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/browse-could-not-search-two-words.md +0 -0
  202. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  203. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  204. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  205. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  206. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/catalogue-entries-carry-no-content-identity.md +0 -0
  207. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  208. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  209. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  210. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  211. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  212. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  213. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  214. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  215. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/command-carousel-page.md +0 -0
  216. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  217. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  218. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/completions-install-could-eat-your-rc-file.md +0 -0
  219. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  220. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  221. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  222. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  223. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  224. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  225. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/crash-reports-leak-api-keys.md +0 -0
  226. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  227. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  228. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  229. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  230. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  231. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  232. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  233. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  234. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  235. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  236. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  237. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  238. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  239. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  240. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  241. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  242. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  243. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  244. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  245. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  246. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  247. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  248. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  249. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/eval-stats-could-never-publish.md +0 -0
  250. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  251. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  252. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  253. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  254. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  255. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  256. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  257. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  258. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  259. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  260. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  261. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  262. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/github-community-health-files.md +0 -0
  263. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  264. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  265. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  266. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  267. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  268. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  269. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  270. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  271. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  272. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  273. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  274. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  275. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  276. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  277. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  278. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  279. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  280. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  281. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  282. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  283. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  284. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  285. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  286. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  287. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  288. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  289. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  290. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  291. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  292. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  293. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  294. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  295. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  296. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  297. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  298. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  299. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  300. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  301. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  302. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  303. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  304. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  305. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  306. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  307. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  308. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  309. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  310. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  311. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  312. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  313. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  314. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  315. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  316. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  317. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  318. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  319. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  320. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  321. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  322. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  323. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  324. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  325. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  326. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  327. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  328. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  329. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  330. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  331. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  332. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  333. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  334. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  335. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  336. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  337. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/pathlib-exists-is-not-total.md +0 -0
  338. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  339. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  340. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  341. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  342. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  343. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  344. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  345. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  346. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  347. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  348. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  349. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  350. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  351. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  352. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  353. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  354. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  355. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  356. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  357. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  358. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  359. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  360. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  361. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  362. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  363. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  364. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  365. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  366. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  367. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  368. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  369. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  370. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  371. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  372. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  373. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  374. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  375. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  376. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  377. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  378. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  379. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  380. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  381. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  382. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  383. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  384. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  385. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  386. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  387. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  388. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  389. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  390. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  391. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/self-update-claims-up-to-date-without-asking.md +0 -0
  392. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  393. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  394. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  395. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/shards-pipeline-never-produced-a-shard.md +0 -0
  396. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/shareable-catalogue-bundle.md +0 -0
  397. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  398. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  399. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  400. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  401. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  402. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  403. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  404. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  405. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  406. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/sweep-died-at-launch-not-at-a-page.md +0 -0
  407. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/sync-could-not-repair-a-gutted-skill.md +0 -0
  408. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  409. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  410. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md +0 -0
  411. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  412. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/taps-check-out-freight-they-never-index.md +0 -0
  413. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md +0 -0
  414. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  415. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  416. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/two-crashes-that-should-have-been-messages.md +0 -0
  417. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  418. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  419. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  420. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  421. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  422. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/unwatched-crons-hid-a-real-fuzz-crash.md +0 -0
  423. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  424. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  425. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  426. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  427. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  428. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  429. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  430. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  431. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  432. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  433. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  434. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  435. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/workspace-scope-install.md +0 -0
  436. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/zip-strict-audit.md +0 -0
  437. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/zizmor-ignores-drift-and-make-lint-never-ran-it.md +0 -0
  438. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  439. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/docs/superpowers/specs/2026-08-16-catalogue-content-identity-design.md +0 -0
  440. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/eslint.config.mjs +0 -0
  441. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/README.md +0 -0
  442. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/__init__.py +0 -0
  443. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/baseline.json +0 -0
  444. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/faithfulness.py +0 -0
  445. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/golden_set.json +0 -0
  446. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/make_corpus.py +0 -0
  447. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/make_golden.py +0 -0
  448. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/metrics.py +0 -0
  449. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/publish_golden_dataset.py +0 -0
  450. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/evals/run_evals.py +0 -0
  451. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/examples/README.md +0 -0
  452. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/examples/adapt-demo.sh +0 -0
  453. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/examples/boost-run-prototype.sh +0 -0
  454. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/index.html +0 -0
  455. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/noxfile.py +0 -0
  456. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/pyproject.toml +0 -0
  457. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/coverage-tools.in +0 -0
  458. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/coverage-tools.txt +0 -0
  459. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/lint-tools.in +0 -0
  460. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/lint-tools.txt +0 -0
  461. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/mutation-tools.in +0 -0
  462. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/mutation-tools.txt +0 -0
  463. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/platform-pins.lock +0 -0
  464. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/release-tools.in +0 -0
  465. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/release-tools.txt +0 -0
  466. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/test-tools.in +0 -0
  467. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/requirements/test-tools.txt +0 -0
  468. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/a11y_check.py +0 -0
  469. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/bench_cli.sh +0 -0
  470. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/build_command_reference.py +0 -0
  471. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/build_demo_index.py +0 -0
  472. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/build_registries.py +0 -0
  473. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/build_roadmap.py +0 -0
  474. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/build_scale_corpus.py +0 -0
  475. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/check_anchors.py +0 -0
  476. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/check_licenses.py +0 -0
  477. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/check_required_checks.py +0 -0
  478. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/ensure_eval_corpus.sh +0 -0
  479. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/eval_corpus.py +0 -0
  480. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/eval_explain.py +0 -0
  481. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/eval_gate.py +0 -0
  482. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/eval_recommend.py +0 -0
  483. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/eval_retrieval.py +0 -0
  484. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/eval_stats_summary.py +0 -0
  485. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/import_budget.py +0 -0
  486. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/lock_toolchain.py +0 -0
  487. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/measure_registry.py +0 -0
  488. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/mutation_gate.py +0 -0
  489. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/mutation_shards.py +0 -0
  490. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/mutation_weights.json +0 -0
  491. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/page_budget.py +0 -0
  492. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/perf_gate.py +0 -0
  493. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/post_deploy_smoke.py +0 -0
  494. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/publish_eval_json.py +0 -0
  495. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/release_guard.py +0 -0
  496. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/release_preflight.py +0 -0
  497. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/scripts/serve_docs.py +0 -0
  498. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/setup.cfg +0 -0
  499. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/sonar-project.properties +0 -0
  500. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/style/README.md +0 -0
  501. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/style/boost.css +0 -0
  502. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/style/boost.js +0 -0
  503. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/style/demo.html +0 -0
  504. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/adapt.feature +0 -0
  505. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/browse.feature +0 -0
  506. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/count.feature +0 -0
  507. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/discover.feature +0 -0
  508. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/doctor.feature +0 -0
  509. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/environment.py +0 -0
  510. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/explain.feature +0 -0
  511. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/index.feature +0 -0
  512. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/install.feature +0 -0
  513. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/list.feature +0 -0
  514. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/mcp.feature +0 -0
  515. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/search.feature +0 -0
  516. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/steps/cli_steps.py +0 -0
  517. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/steps/discovery_steps.py +0 -0
  518. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/steps/mcp_steps.py +0 -0
  519. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/bdd/features/steps/quality_steps.py +0 -0
  520. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/conftest.py +0 -0
  521. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/eval/baseline.json +0 -0
  522. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/eval/explain.jsonl +0 -0
  523. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/eval/golden-natural.jsonl +0 -0
  524. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/eval/golden.jsonl +0 -0
  525. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/eval/recommend.jsonl +0 -0
  526. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/eval/taps-scale.txt +0 -0
  527. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/eval/taps.txt +0 -0
  528. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_capabilities_policy.py +0 -0
  529. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_adapt.py +0 -0
  530. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_bmad.py +0 -0
  531. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_catalog.py +0 -0
  532. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_chat.py +0 -0
  533. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_configuration.py +0 -0
  534. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_discovery.py +0 -0
  535. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_hooks.py +0 -0
  536. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_info.py +0 -0
  537. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_intelligence.py +0 -0
  538. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_pkg.py +0 -0
  539. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_quality.py +0 -0
  540. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_taps.py +0 -0
  541. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_cli_team.py +0 -0
  542. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_everyday_loop.py +0 -0
  543. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_integrity_enforce.py +0 -0
  544. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_kind_conformance.py +0 -0
  545. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_property_parsers.py +0 -0
  546. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_run.py +0 -0
  547. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_tap_signing.py +0 -0
  548. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/functional/test_workspace_scope.py +0 -0
  549. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/README.md +0 -0
  550. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  551. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  552. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  553. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  554. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  555. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  556. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  557. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  558. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  559. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  560. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  561. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  562. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  563. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  564. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  565. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  566. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  567. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  568. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  569. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  570. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/09-nul.txt +0 -0
  571. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/10-name-too-long.txt +0 -0
  572. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/corpus/registry/11-long-owner-repo.txt +0 -0
  573. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/fuzz_frontmatter.py +0 -0
  574. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/fuzz/fuzz_registry.py +0 -0
  575. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/langchain/conftest.py +0 -0
  576. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/langchain/test_graph.py +0 -0
  577. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/langchain/test_loader.py +0 -0
  578. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/langchain/test_retriever.py +0 -0
  579. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/make_fixture.py +0 -0
  580. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/perf/test_benchmarks.py +0 -0
  581. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/smoke.sh +0 -0
  582. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_a11y_check.py +0 -0
  583. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_action_pin_lockstep.py +0 -0
  584. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_adapters.py +0 -0
  585. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_adapters_multi.py +0 -0
  586. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_adapters_runner.py +0 -0
  587. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_agents.py +0 -0
  588. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_ai.py +0 -0
  589. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_bmad_core.py +0 -0
  590. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_boost_first_offer.py +0 -0
  591. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_bootstrap.py +0 -0
  592. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_browse.py +0 -0
  593. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_builtin.py +0 -0
  594. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_capabilities.py +0 -0
  595. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_catalog.py +0 -0
  596. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_catalogbundle.py +0 -0
  597. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_chat.py +0 -0
  598. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_check_anchors.py +0 -0
  599. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_check_licenses.py +0 -0
  600. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_claude_settings.py +0 -0
  601. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_clean_internal_cache.py +0 -0
  602. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_cliparse.py +0 -0
  603. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_codeql_analysis_key.py +0 -0
  604. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_command_reference_fresh.py +0 -0
  605. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_community_health_files.py +0 -0
  606. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_compact.py +0 -0
  607. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_complete.py +0 -0
  608. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_complete_rc_block.py +0 -0
  609. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_config.py +0 -0
  610. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_content_dedupe.py +0 -0
  611. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_content_identity.py +0 -0
  612. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_crash_redaction.py +0 -0
  613. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dedup_trust.py +0 -0
  614. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_demo_index.py +0 -0
  615. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dense.py +0 -0
  616. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dense_embed_dedupe.py +0 -0
  617. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dense_fallback.py +0 -0
  618. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dense_fix_hint.py +0 -0
  619. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dense_shard_real_schema.py +0 -0
  620. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dense_shard_unreadable_vectors.py +0 -0
  621. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dense_shards.py +0 -0
  622. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dense_status.py +0 -0
  623. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_dependabot_config.py +0 -0
  624. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_docs_pages_linked.py +0 -0
  625. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_docsite_chrome.py +0 -0
  626. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_ed25519.py +0 -0
  627. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_embed.py +0 -0
  628. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_embed_local.py +0 -0
  629. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_embed_truncated_response.py +0 -0
  630. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_entry_key.py +0 -0
  631. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_errors_and_cli_table.py +0 -0
  632. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_eval_baseline.py +0 -0
  633. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_eval_corpus.py +0 -0
  634. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_eval_faithfulness.py +0 -0
  635. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_eval_gate.py +0 -0
  636. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_eval_grading.py +0 -0
  637. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_eval_metrics.py +0 -0
  638. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_eval_stats_summary.py +0 -0
  639. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_faithfulness.py +0 -0
  640. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_frontmatter.py +0 -0
  641. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_fuzz_targets.py +0 -0
  642. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  643. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_gitleaks_config.py +0 -0
  644. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_gitutil.py +0 -0
  645. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_gitutil_lfs.py +0 -0
  646. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_gitutil_sparse.py +0 -0
  647. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_imperative.py +0 -0
  648. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_import_budget.py +0 -0
  649. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_injectscan.py +0 -0
  650. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_install_permission_error.py +0 -0
  651. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_installscan.py +0 -0
  652. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_integrity.py +0 -0
  653. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_journal.py +0 -0
  654. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_langchain_packaging.py +0 -0
  655. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_link_ownership.py +0 -0
  656. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_localembed.py +0 -0
  657. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_localembed_e2e.py +0 -0
  658. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_lockfile.py +0 -0
  659. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_logs.py +0 -0
  660. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_marketing_counts.py +0 -0
  661. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_mcp.py +0 -0
  662. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_mcp_install_scan.py +0 -0
  663. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_mcpdecl.py +0 -0
  664. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_mcphost.py +0 -0
  665. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_measure_registry.py +0 -0
  666. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_minisign.py +0 -0
  667. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_mutation_hardening.py +0 -0
  668. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_mutation_shards.py +0 -0
  669. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_mutation_subfile_shards.py +0 -0
  670. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_mutmut_source_paths.py +0 -0
  671. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_nethttp.py +0 -0
  672. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_output.py +0 -0
  673. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_page_budget.py +0 -0
  674. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_paths.py +0 -0
  675. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_perf_gate.py +0 -0
  676. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_pkg_confusions.py +0 -0
  677. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_pkg_injection.py +0 -0
  678. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_pkg_secrets.py +0 -0
  679. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_platform_pins.py +0 -0
  680. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_policy.py +0 -0
  681. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_post_deploy_smoke.py +0 -0
  682. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_project_mcp_sidecar.py +0 -0
  683. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_projectlock.py +0 -0
  684. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_provenance.py +0 -0
  685. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_publish_golden_dataset.py +0 -0
  686. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_rag.py +0 -0
  687. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_rag_fusion.py +0 -0
  688. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_registries_fresh.py +0 -0
  689. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_registry.py +0 -0
  690. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_registry_categories.py +0 -0
  691. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_registry_control_chars.py +0 -0
  692. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_release_guard.py +0 -0
  693. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_release_preflight.py +0 -0
  694. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_required_checks.py +0 -0
  695. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_resolve.py +0 -0
  696. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_roadmap_fresh.py +0 -0
  697. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_rules.py +0 -0
  698. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_scale_corpus.py +0 -0
  699. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_scopes.py +0 -0
  700. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_secretscan.py +0 -0
  701. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_selfupdate.py +0 -0
  702. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_serve.py +0 -0
  703. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_serve_docs.py +0 -0
  704. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_shards_matrix.py +0 -0
  705. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_smoke_covers_every_command.py +0 -0
  706. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_spin.py +0 -0
  707. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_stackprobe.py +0 -0
  708. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_staleness.py +0 -0
  709. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_store.py +0 -0
  710. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_store_materialize.py +0 -0
  711. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_sync_blocked_links.py +0 -0
  712. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_sync_repairs_gutted_skill.py +0 -0
  713. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_token_parity.py +0 -0
  714. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_toolchain_lock.py +0 -0
  715. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_trustaudit.py +0 -0
  716. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_typosquat.py +0 -0
  717. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_updatediff.py +0 -0
  718. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_util.py +0 -0
  719. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_version.py +0 -0
  720. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_visual_harness_flags.py +0 -0
  721. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_workflow_concurrency.py +0 -0
  722. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  723. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_workflow_timeouts.py +0 -0
  724. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_workflows.py +0 -0
  725. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/unit/test_zizmor_ignores_still_anchor.py +0 -0
  726. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/visual/a11y_check.mjs +0 -0
  727. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/visual/console_check.mjs +0 -0
  728. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/visual/package-lock.json +0 -0
  729. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/visual/package.json +0 -0
  730. {boost_skill_cli-1.2.6 → boost_skill_cli-1.2.8}/tests/visual/visual_check.mjs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.2.6
3
+ Version: 1.2.8
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '1.2.6'
22
- __version_tuple__ = version_tuple = (1, 2, 6)
21
+ __version__ = version = '1.2.8'
22
+ __version_tuple__ = version_tuple = (1, 2, 8)
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.6
3
+ Version: 1.2.8
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -412,8 +412,10 @@ docs/roadmap/items/sync-reported-success-for-a-link-it-refused.md
412
412
  docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md
413
413
  docs/roadmap/items/taps-check-out-freight-they-never-index.md
414
414
  docs/roadmap/items/the-catalogue-advertised-repos-that-no-longer-exist.md
415
+ docs/roadmap/items/the-shard-job-that-could-not-finish.md
415
416
  docs/roadmap/items/theme-asset-linting-stylelint-eslint.md
416
417
  docs/roadmap/items/tool-call-eval-tier.md
418
+ docs/roadmap/items/two-ci-controls-that-could-not-act.md
417
419
  docs/roadmap/items/two-crashes-that-should-have-been-messages.md
418
420
  docs/roadmap/items/typo-detection-codespell.md
419
421
  docs/roadmap/items/typosquat-and-name-confusion-detection.md
@@ -0,0 +1,46 @@
1
+ ---
2
+ id: the-shard-job-that-could-not-finish
3
+ board: code
4
+ section: internals
5
+ status: shipped
6
+ category: CI · Performance
7
+ complexity: S
8
+ impact: High
9
+ wow: 5
10
+ note: 5h30m cancelled at the ceiling, then 2h07m green — the same job, with duplicate embeddings collapsed
11
+ order: 120
12
+ owner: docs/shards-measured-scale
13
+ pr: 531
14
+ title: the shard job that had never once finished, and the timeout that could not be raised
15
+ ---
16
+ <b><code>shards</code> exists so a keyless user gets semantic search without paying to embed the
17
+ catalogue themselves</b> &mdash; embedding is ~1.2 s/chunk on CPU, importing the same rows is 0.12 s,
18
+ so without published shards the keyless tier is available in principle and unreachable in practice.
19
+ It had <b>never once produced an artifact</b>.
20
+
21
+ <b>Two mechanisms, in order.</b> The first was a matrix built by splitting
22
+ <code>taps.txt</code> on whitespace &mdash; rows are <code>repo &lt;sha&gt; &lt;count&gt;</code>, so
23
+ 20 registries became 60 jobs, and the run log is full of <code>build (18)</code> and
24
+ <code>build (b29e7cf6…)</code>. That was fixed. The <em>next</em> scheduled run then had one job
25
+ left that could not finish: <code>sickn33/antigravity-awesome-skills</code> burned its entire
26
+ <code>timeout-minutes: 330</code> and was cancelled, having published nothing.
27
+
28
+ <b>Raising the timeout was never on the table.</b> GitHub's job ceiling is 6 hours and 330 minutes is
29
+ already under it. So the workflow's own scale note &mdash; &ldquo;the largest pinned tap is ~75
30
+ min&rdquo; &mdash; was not a stale estimate to nudge upward; it was wrong about the shape of the
31
+ problem.
32
+
33
+ <b>The measurement that changed the answer.</b> That registry is 6,309 entries and 77,423 chunks
34
+ &mdash; of which only <b>24,246 are distinct</b>. <b>68.7% are byte-identical repeats</b>, because the
35
+ registry vendors its own items many times over. Embeddings are deterministic, so every copy was
36
+ bought at full price for the same vector, and <code>retrieve_any</code> discards the copies anyway.
37
+
38
+ <b>Same job, 5 h 30 m cancelled &rarr; 2 h 07 m green.</b> With the duplicate embedding work collapsed
39
+ (the catalogue content-identity change), the job completed and uploaded a <b>129 MB shard carrying
40
+ 78,095 chunks</b>. Nothing about the output shrank &mdash; one row per entry-chunk is what keeps tap
41
+ deletion correct; only the number of times the provider was asked did.
42
+
43
+ <b>The lesson is where the budget lives.</b> A per-registry cost estimate keyed on entry count is
44
+ measuring the wrong thing: a registry that mirrors itself heavily is far cheaper than its size
45
+ suggests, and one that does not is the case to watch against the ceiling. The workflow now says so,
46
+ with the numbers.
@@ -0,0 +1,50 @@
1
+ ---
2
+ id: two-ci-controls-that-could-not-act
3
+ board: code
4
+ section: internals
5
+ status: shipped
6
+ category: CI · Correctness
7
+ complexity: S
8
+ impact: Medium
9
+ wow: 4
10
+ note: one publisher could never publish and one alert could never stand down — both reported success
11
+ order: 119
12
+ owner: fix/ci-controls-that-cannot-act
13
+ pr: 529
14
+ title: a publisher that could not publish, and an alert that could not stand down
15
+ ---
16
+ <b>Two controls, the same failure mode: present, running, and structurally unable to do the thing
17
+ they exist for.</b>
18
+
19
+ <b>1. <code>eval-stats</code> pushed to a branch no token can push to.</b> An earlier fix got the
20
+ credentials right &mdash; the checkout uses <code>persist-credentials: false</code>, so the push
21
+ needed its own token URL, and it got one. That took the workflow as far as a <em>different</em>
22
+ permanent failure: <code>GH013: Repository rule violations found for refs/heads/main</code>.
23
+ <code>main</code> carries a ruleset with a <code>pull_request</code> rule and an <b>empty bypass
24
+ list</b>, so no token can push to it &mdash; not <code>github.token</code>, not a PAT, not any bot.
25
+ The workflow was not misconfigured; it was impossible.
26
+
27
+ <b>The remedy is not a bypass actor.</b> Adding one would open the protection guarding every change
28
+ to main so that a docs payload can skip review. The refreshed metrics now arrive the way
29
+ <code>eval-corpus-refresh.yml</code> already lands its moved pins &mdash; as a pull request on one
30
+ long-lived <code>bot/eval-metrics</code> branch that each run updates in place, rather than a new PR
31
+ a week. Reviewable, mergeable, and no weaker than any other change to main. It carries the same
32
+ warning that workflow's PRs do: a <code>GITHUB_TOKEN</code> push never triggers workflows, so the
33
+ check list is empty until someone presses <b>Update branch</b>, and empty looks exactly like
34
+ &ldquo;not started yet&rdquo;.
35
+
36
+ <b>2. The failure tracker opened issues and never closed one.</b> Its own closing line said
37
+ &ldquo;close this once CI is green again&rdquo; &mdash; a manual step nobody had a reason to take. So
38
+ <code>visual</code> stayed open through <b>four consecutive green runs</b>, and an issue list that
39
+ mixes live outages with fixed ones makes every entry in it read as equally suspect. An alert that
40
+ cannot stand down is only half an alert. A success on main now closes the tracker for
41
+ <em>that</em> workflow, keyed on the same per-workflow marker the opener writes &mdash; a
42
+ <code>ci</code> success must never close a <code>demo</code> tracker.
43
+
44
+ <b>The second job is what made the permissions wrong.</b> <code>issues: write</code> sat at the
45
+ workflow level, where it reaches every job including any added later; zizmor's excessive-permissions
46
+ audit says so and now fails the build on it. Each job asks for its own.
47
+
48
+ <b>Both halves are pinned statically</b>, and the push guard was verified by reversion: restore the
49
+ old <code>HEAD:main</code> and the test names the exact line. The guard outlives this fix &mdash; it
50
+ is parametrised over every workflow that pushes, so the next one cannot rediscover the same wall.
@@ -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>256</b><span>Loop finds</span></div>
136
+ <div class="stat"><b>258</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -4165,6 +4165,96 @@ both, which means the no-atheris seed smoke &mdash; the path that runs without t
4165
4165
  <span class="m">the weekly fuzzer has now found two crashes in one function, three weeks apart, and been ignored both times</span>
4166
4166
  </div>
4167
4167
  </article>
4168
+
4169
+ <article class="cap rcard" id="two-ci-controls-that-could-not-act">
4170
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">CI · Correctness</span></div>
4171
+ <h3>a publisher that could not publish, and an alert that could not stand down</h3>
4172
+ <details class="cardbody"><summary>Write-up</summary>
4173
+ <p><b>Two controls, the same failure mode: present, running, and structurally unable to do the thing
4174
+ they exist for.</b>
4175
+
4176
+ <b>1. <code>eval-stats</code> pushed to a branch no token can push to.</b> An earlier fix got the
4177
+ credentials right &mdash; the checkout uses <code>persist-credentials: false</code>, so the push
4178
+ needed its own token URL, and it got one. That took the workflow as far as a <em>different</em>
4179
+ permanent failure: <code>GH013: Repository rule violations found for refs/heads/main</code>.
4180
+ <code>main</code> carries a ruleset with a <code>pull_request</code> rule and an <b>empty bypass
4181
+ list</b>, so no token can push to it &mdash; not <code>github.token</code>, not a PAT, not any bot.
4182
+ The workflow was not misconfigured; it was impossible.
4183
+
4184
+ <b>The remedy is not a bypass actor.</b> Adding one would open the protection guarding every change
4185
+ to main so that a docs payload can skip review. The refreshed metrics now arrive the way
4186
+ <code>eval-corpus-refresh.yml</code> already lands its moved pins &mdash; as a pull request on one
4187
+ long-lived <code>bot/eval-metrics</code> branch that each run updates in place, rather than a new PR
4188
+ a week. Reviewable, mergeable, and no weaker than any other change to main. It carries the same
4189
+ warning that workflow's PRs do: a <code>GITHUB_TOKEN</code> push never triggers workflows, so the
4190
+ check list is empty until someone presses <b>Update branch</b>, and empty looks exactly like
4191
+ &ldquo;not started yet&rdquo;.
4192
+
4193
+ <b>2. The failure tracker opened issues and never closed one.</b> Its own closing line said
4194
+ &ldquo;close this once CI is green again&rdquo; &mdash; a manual step nobody had a reason to take. So
4195
+ <code>visual</code> stayed open through <b>four consecutive green runs</b>, and an issue list that
4196
+ mixes live outages with fixed ones makes every entry in it read as equally suspect. An alert that
4197
+ cannot stand down is only half an alert. A success on main now closes the tracker for
4198
+ <em>that</em> workflow, keyed on the same per-workflow marker the opener writes &mdash; a
4199
+ <code>ci</code> success must never close a <code>demo</code> tracker.
4200
+
4201
+ <b>The second job is what made the permissions wrong.</b> <code>issues: write</code> sat at the
4202
+ workflow level, where it reaches every job including any added later; zizmor's excessive-permissions
4203
+ audit says so and now fails the build on it. Each job asks for its own.
4204
+
4205
+ <b>Both halves are pinned statically</b>, and the push guard was verified by reversion: restore the
4206
+ old <code>HEAD:main</code> and the test names the exact line. The guard outlives this fix &mdash; it
4207
+ is parametrised over every workflow that pushes, so the next one cannot rediscover the same wall.</p></details>
4208
+ <div class="meta">
4209
+ <span class="m">Complexity <b>S</b></span>
4210
+ <span class="m">Impact <b>Medium</b></span>
4211
+ <span class="m">Wow <b class="wow">★★★★</b></span>
4212
+ <span class="m">one publisher could never publish and one alert could never stand down — both reported success</span>
4213
+ </div>
4214
+ </article>
4215
+
4216
+ <article class="cap rcard" id="the-shard-job-that-could-not-finish">
4217
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">CI · Performance</span></div>
4218
+ <h3>the shard job that had never once finished, and the timeout that could not be raised</h3>
4219
+ <details class="cardbody"><summary>Write-up</summary>
4220
+ <p><b><code>shards</code> exists so a keyless user gets semantic search without paying to embed the
4221
+ catalogue themselves</b> &mdash; embedding is ~1.2 s/chunk on CPU, importing the same rows is 0.12 s,
4222
+ so without published shards the keyless tier is available in principle and unreachable in practice.
4223
+ It had <b>never once produced an artifact</b>.
4224
+
4225
+ <b>Two mechanisms, in order.</b> The first was a matrix built by splitting
4226
+ <code>taps.txt</code> on whitespace &mdash; rows are <code>repo &lt;sha&gt; &lt;count&gt;</code>, so
4227
+ 20 registries became 60 jobs, and the run log is full of <code>build (18)</code> and
4228
+ <code>build (b29e7cf6…)</code>. That was fixed. The <em>next</em> scheduled run then had one job
4229
+ left that could not finish: <code>sickn33/antigravity-awesome-skills</code> burned its entire
4230
+ <code>timeout-minutes: 330</code> and was cancelled, having published nothing.
4231
+
4232
+ <b>Raising the timeout was never on the table.</b> GitHub's job ceiling is 6 hours and 330 minutes is
4233
+ already under it. So the workflow's own scale note &mdash; &ldquo;the largest pinned tap is ~75
4234
+ min&rdquo; &mdash; was not a stale estimate to nudge upward; it was wrong about the shape of the
4235
+ problem.
4236
+
4237
+ <b>The measurement that changed the answer.</b> That registry is 6,309 entries and 77,423 chunks
4238
+ &mdash; of which only <b>24,246 are distinct</b>. <b>68.7% are byte-identical repeats</b>, because the
4239
+ registry vendors its own items many times over. Embeddings are deterministic, so every copy was
4240
+ bought at full price for the same vector, and <code>retrieve_any</code> discards the copies anyway.
4241
+
4242
+ <b>Same job, 5 h 30 m cancelled &rarr; 2 h 07 m green.</b> With the duplicate embedding work collapsed
4243
+ (the catalogue content-identity change), the job completed and uploaded a <b>129 MB shard carrying
4244
+ 78,095 chunks</b>. Nothing about the output shrank &mdash; one row per entry-chunk is what keeps tap
4245
+ deletion correct; only the number of times the provider was asked did.
4246
+
4247
+ <b>The lesson is where the budget lives.</b> A per-registry cost estimate keyed on entry count is
4248
+ measuring the wrong thing: a registry that mirrors itself heavily is far cheaper than its size
4249
+ suggests, and one that does not is the case to watch against the ceiling. The workflow now says so,
4250
+ with the numbers.</p></details>
4251
+ <div class="meta">
4252
+ <span class="m">Complexity <b>S</b></span>
4253
+ <span class="m hi">Impact <b>High</b></span>
4254
+ <span class="m">Wow <b class="wow">★★★★★</b></span>
4255
+ <span class="m">5h30m cancelled at the ceiling, then 2h07m green — the same job, with duplicate embeddings collapsed</span>
4256
+ </div>
4257
+ </article>
4168
4258
  <!-- /ROADMAP:cards -->
4169
4259
 
4170
4260
  </div>
@@ -130,3 +130,47 @@ class TestEveryUnattendedWorkflowIsWatched:
130
130
  names = {workflow_name(p.read_text(encoding="utf-8"), p.stem)
131
131
  for p in WORKFLOWS.glob("*.yml")}
132
132
  assert watched() <= names, sorted(watched() - names)
133
+
134
+
135
+ class TestTheAlertCanStandDown:
136
+ """An alert that cannot close is only half an alert.
137
+
138
+ The tracker opened issues, commented on repeats, and never closed one — so
139
+ its own closing line, "close this once CI is green again", was a manual step
140
+ nobody had a reason to take. `visual` stayed open through four consecutive
141
+ green runs, and a list that mixes live outages with fixed ones makes every
142
+ entry in it read as equally suspect.
143
+ """
144
+
145
+ def test_a_success_on_main_closes_the_tracker(self):
146
+ text = ALERT.read_text(encoding="utf-8")
147
+ assert "conclusion == 'success'" in text, (
148
+ "nothing reacts to a watched workflow going green, so every "
149
+ "tracker this file opens stays open until someone closes it")
150
+ assert "state: 'closed'" in text
151
+
152
+ def test_closing_is_keyed_by_workflow_like_opening(self):
153
+ """A `ci` success must not close a `demo` tracker.
154
+
155
+ The opener keys its marker on the workflow name for exactly this
156
+ reason; a closer that matched any `ci-failure` issue would undo that.
157
+ """
158
+ text = ALERT.read_text(encoding="utf-8")
159
+ assert text.count("ci-failure-tracker:${run.name}") >= 2, (
160
+ "the closing half must use the same per-workflow marker the "
161
+ "opening half writes")
162
+
163
+ def test_only_main_can_close_it(self):
164
+ """`workflow_run` fires for the default branch, but the opener still
165
+ checks — and an asymmetry here would let a non-main success close a
166
+ tracker for a failure that is still live on main."""
167
+ text = ALERT.read_text(encoding="utf-8")
168
+ assert text.count("head_branch == 'main'") >= 2
169
+
170
+ def test_permissions_are_not_granted_workflow_wide(self):
171
+ """`issues: write` at the top reaches every job, including any added
172
+ later. zizmor's excessive-permissions audit fails the build on it."""
173
+ text = ALERT.read_text(encoding="utf-8")
174
+ assert re.search(r"^permissions:\s*\{\}\s*$", text, re.M), \
175
+ "workflow-level permissions must be empty; each job asks for its own"
176
+ assert text.count("issues: write") >= 2
@@ -85,6 +85,46 @@ class TestTheGuardCanActuallySee:
85
85
  assert _AUTHED_PUSH.search(join_continuations(wrapped))
86
86
 
87
87
 
88
+ #: `HEAD:main`, `HEAD:refs/heads/main`, or a bare push whose refspec is main.
89
+ _PUSHES_TO_MAIN = re.compile(r"git push[^\n]*\b(HEAD|[\w./-]+):(refs/heads/)?main\b")
90
+
91
+
92
+ class TestNothingPushesToMain:
93
+ """Credentials were only the first layer; the branch is the second.
94
+
95
+ Fixing the missing token got `eval-stats` as far as a *different* permanent
96
+ failure — `GH013: Repository rule violations found for refs/heads/main`.
97
+ main carries a ruleset with a `pull_request` rule and an **empty bypass
98
+ list**, so no token can push to it: not `github.token`, not a PAT, not any
99
+ bot. A workflow that pushes there is not misconfigured, it is impossible.
100
+
101
+ The remedy is never to add a bypass actor. That would open the protection
102
+ guarding every change to main so a docs payload can skip review. `ci.yml`
103
+ pushes `badges:badges` and `eval-stats.yml` now pushes `eval-metrics`;
104
+ merging either into main stays a pull request, like everything else.
105
+ """
106
+
107
+ def test_the_guard_recognises_a_push_to_main(self):
108
+ for line in ("git push -q origin HEAD:main",
109
+ 'git push -q "https://x@github.com/o/r" HEAD:refs/heads/main',
110
+ "git push origin main:main"):
111
+ assert _PUSHES_TO_MAIN.search(line), line
112
+
113
+ def test_the_guard_does_not_flag_a_side_branch(self):
114
+ for line in ("git push -qf origin badges:badges",
115
+ 'git push -qf "https://x@github.com/o/r" HEAD:eval-metrics'):
116
+ assert not _PUSHES_TO_MAIN.search(line), line
117
+
118
+ @pytest.mark.parametrize("name", sorted(pushing_workflows()))
119
+ def test_no_workflow_pushes_to_main(self, name):
120
+ hits = [line.strip() for line in pushing_workflows()[name].splitlines()
121
+ if _PUSHES_TO_MAIN.search(line)]
122
+ assert not hits, (
123
+ "%s pushes to main, which main's ruleset forbids for every token "
124
+ "(GH013). Push to a side branch and open a pull request; do NOT "
125
+ "add a bypass actor to the ruleset: %s" % (name, hits))
126
+
127
+
88
128
  @pytest.mark.parametrize("name", sorted(pushing_workflows()))
89
129
  def test_a_push_after_an_unpersisted_checkout_carries_a_token(name):
90
130
  text = pushing_workflows()[name]
File without changes
File without changes