boost-skill-cli 1.0.441__tar.gz → 1.0.443__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 (684) hide show
  1. {boost_skill_cli-1.0.441/boost_skill_cli.egg-info → boost_skill_cli-1.0.443}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  4. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_skill_cli.egg-info/SOURCES.txt +3 -0
  5. boost_skill_cli-1.0.443/docs/demo.gif +0 -0
  6. boost_skill_cli-1.0.443/docs/roadmap/items/eval-stats-could-never-publish.md +45 -0
  7. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap.html +43 -1
  8. boost_skill_cli-1.0.443/tests/unit/test_publish_golden_dataset.py +226 -0
  9. boost_skill_cli-1.0.443/tests/unit/test_workflow_push_has_credentials.py +100 -0
  10. boost_skill_cli-1.0.441/docs/demo.gif +0 -0
  11. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.gitattributes +0 -0
  12. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.gitignore +0 -0
  13. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.gitleaks.toml +0 -0
  14. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.htmlvalidate.json +0 -0
  15. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.lighthouserc.json +0 -0
  16. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.lycheeignore +0 -0
  17. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.markdownlint-cli2.jsonc +0 -0
  18. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.pre-commit-config.yaml +0 -0
  19. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.stylelintrc.json +0 -0
  20. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.vale/styles/boost/Terminology.yml +0 -0
  21. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  22. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/.vale.ini +0 -0
  23. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/CLAUDE.md +0 -0
  24. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/CODE_OF_CONDUCT.md +0 -0
  25. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/CONTRIBUTING.md +0 -0
  26. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/LICENSE +0 -0
  27. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/MANIFEST.in +0 -0
  28. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/Makefile +0 -0
  29. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/README.md +0 -0
  30. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/SECURITY.md +0 -0
  31. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost +0 -0
  32. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/__init__.py +0 -0
  33. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/__main__.py +0 -0
  34. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/cli.py +0 -0
  35. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/cliparse.py +0 -0
  36. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/__init__.py +0 -0
  37. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/_common.py +0 -0
  38. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/bmad.py +0 -0
  39. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/configuration.py +0 -0
  40. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/discovery.py +0 -0
  41. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/hooks.py +0 -0
  42. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/info.py +0 -0
  43. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/intelligence.py +0 -0
  44. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/pkg.py +0 -0
  45. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/quality.py +0 -0
  46. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/run.py +0 -0
  47. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/safety.py +0 -0
  48. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/taps.py +0 -0
  49. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/commands/team.py +0 -0
  50. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/__init__.py +0 -0
  51. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/adapters.py +0 -0
  52. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/agents.py +0 -0
  53. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/ai.py +0 -0
  54. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/bmad.py +0 -0
  55. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/bootstrap.py +0 -0
  56. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/builtin.py +0 -0
  57. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/capabilities.py +0 -0
  58. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/catalog.py +0 -0
  59. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/chat.py +0 -0
  60. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/claude_settings.py +0 -0
  61. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/complete.py +0 -0
  62. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/config.py +0 -0
  63. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/dense.py +0 -0
  64. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/ed25519.py +0 -0
  65. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/embed.py +0 -0
  66. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/faithfulness.py +0 -0
  67. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/frontmatter.py +0 -0
  68. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/gitutil.py +0 -0
  69. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/imperative.py +0 -0
  70. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/injectscan.py +0 -0
  71. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/installscan.py +0 -0
  72. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/integrity.py +0 -0
  73. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/journal.py +0 -0
  74. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/localembed.py +0 -0
  75. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/lockfile.py +0 -0
  76. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/logs.py +0 -0
  77. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/mcp.py +0 -0
  78. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/mcpdecl.py +0 -0
  79. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/mcphost.py +0 -0
  80. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/minisign.py +0 -0
  81. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/nethttp.py +0 -0
  82. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/output.py +0 -0
  83. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/paths.py +0 -0
  84. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/policy.py +0 -0
  85. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/projectlock.py +0 -0
  86. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/provenance.py +0 -0
  87. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/rag.py +0 -0
  88. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/registry.py +0 -0
  89. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/resolve.py +0 -0
  90. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/rules.py +0 -0
  91. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/scopes.py +0 -0
  92. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/secretscan.py +0 -0
  93. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/selfupdate.py +0 -0
  94. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/serve.py +0 -0
  95. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/stackprobe.py +0 -0
  96. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/staleness.py +0 -0
  97. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/store.py +0 -0
  98. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/trustaudit.py +0 -0
  99. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/typosquat.py +0 -0
  100. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/updatediff.py +0 -0
  101. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/util.py +0 -0
  102. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/core/workflows.py +0 -0
  103. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/data/registries.json +0 -0
  104. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/data/rules/boost-first.mdc +0 -0
  105. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/errors.py +0 -0
  106. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_cli/spin.py +0 -0
  107. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_langchain/__init__.py +0 -0
  108. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_langchain/_compat.py +0 -0
  109. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_langchain/graph.py +0 -0
  110. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_langchain/loader.py +0 -0
  111. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_langchain/py.typed +0 -0
  112. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_langchain/retriever.py +0 -0
  113. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  114. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  115. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_skill_cli.egg-info/requires.txt +0 -0
  116. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/boost_skill_cli.egg-info/top_level.txt +0 -0
  117. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/codecov.yml +0 -0
  118. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/.claude/settings.local.json +0 -0
  119. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/DEBUGGING.md +0 -0
  120. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/adapters.html +0 -0
  121. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/architecture/README.md +0 -0
  122. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/architecture/c4-components-core.md +0 -0
  123. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/architecture/c4-containers.md +0 -0
  124. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/architecture/c4-context.md +0 -0
  125. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/architecture/c4-dynamic-install.md +0 -0
  126. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/gifs/distill.gif +0 -0
  127. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/gifs/doctor.gif +0 -0
  128. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/gifs/explain.gif +0 -0
  129. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/gifs/hooks.gif +0 -0
  130. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/gifs/install.gif +0 -0
  131. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/gifs/pulse.gif +0 -0
  132. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/gifs/search.gif +0 -0
  133. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/gifs/tap.gif +0 -0
  134. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/tapes/distill.tape +0 -0
  135. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/tapes/doctor.tape +0 -0
  136. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/tapes/explain.tape +0 -0
  137. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/tapes/hooks.tape +0 -0
  138. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/tapes/install.tape +0 -0
  139. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/tapes/pulse.tape +0 -0
  140. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/tapes/search.tape +0 -0
  141. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel/tapes/tap.tape +0 -0
  142. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/carousel.html +0 -0
  143. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/chat.html +0 -0
  144. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/commands.html +0 -0
  145. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/demo-index.json +0 -0
  146. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/demo.html +0 -0
  147. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/demo.tape +0 -0
  148. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/design-roadmap.html +0 -0
  149. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/eval-latest.json +0 -0
  150. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/eval.html +0 -0
  151. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/index.html +0 -0
  152. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/langchain.html +0 -0
  153. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/mcp-hub.html +0 -0
  154. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/rag-architecture.md +0 -0
  155. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D01.md +0 -0
  156. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D02.md +0 -0
  157. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D03.md +0 -0
  158. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D04.md +0 -0
  159. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D05.md +0 -0
  160. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D06.md +0 -0
  161. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D07.md +0 -0
  162. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D08.md +0 -0
  163. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D09.md +0 -0
  164. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D10.md +0 -0
  165. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D11.md +0 -0
  166. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D12.md +0 -0
  167. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D13.md +0 -0
  168. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D14.md +0 -0
  169. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D15.md +0 -0
  170. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D16.md +0 -0
  171. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D17.md +0 -0
  172. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D18.md +0 -0
  173. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D19.md +0 -0
  174. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D20.md +0 -0
  175. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D21.md +0 -0
  176. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D22.md +0 -0
  177. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D23.md +0 -0
  178. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D24.md +0 -0
  179. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D25.md +0 -0
  180. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/BOOST-D26.md +0 -0
  181. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/a11y-sweep-flakes-on-color-contrast.md +0 -0
  182. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  183. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +0 -0
  184. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  185. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/agents-field-records-the-request-not-the-links.md +0 -0
  186. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  187. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  188. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  189. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  190. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  191. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/bm25-index-is-one-json-blob.md +0 -0
  192. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/bmad-autopilot-one-command-persona-routing.md +0 -0
  193. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/boost-first-carried-the-losing-trigger.md +0 -0
  194. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/boost-first-rule.md +0 -0
  195. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/boost-langchain-publishing.md +0 -0
  196. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  197. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  198. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  199. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  200. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  201. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  202. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  203. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/chat-cites-sources-by-a-number-it-never-prints.md +0 -0
  204. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/chat-command-grounded-conversational-search.md +0 -0
  205. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  206. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  207. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  208. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  209. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  210. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  211. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/command-carousel-page.md +0 -0
  212. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  213. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/completions-complete-only-command-names.md +0 -0
  214. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  215. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  216. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  217. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  218. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  219. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  220. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  221. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  222. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/demo-workflow-cancels-other-prs.md +0 -0
  223. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  224. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  225. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  226. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  227. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/dependabot-splits-multi-path-action-repos.md +0 -0
  228. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  229. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/discover-searches-github-not-a-stale-sample.md +0 -0
  230. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  231. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  232. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  233. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/dry-run-promised-a-link-nobody-makes.md +0 -0
  234. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/efficiency-registries-ponytail-caveman.md +0 -0
  235. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  236. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/est-items-counts-agent-mirrors-as-items.md +0 -0
  237. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/eval-corpus-cannot-see-real-retrieval.md +0 -0
  238. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/eval-corpus-is-96x-smaller-than-a-real-install.md +0 -0
  239. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/eval-corpus-is-one-strangers-repo.md +0 -0
  240. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md +0 -0
  241. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/eval-corpus-was-not-actually-pinned.md +0 -0
  242. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/eval-deduped-ranked-lists-by-name.md +0 -0
  243. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/expanded-card-bodies-overflow.md +0 -0
  244. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  245. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  246. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  247. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  248. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  249. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  250. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  251. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  252. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  253. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/gemini-agent-frontmatter-sanitizer.md +0 -0
  254. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/gemini-cli-agent-target.md +0 -0
  255. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/github-community-health-files.md +0 -0
  256. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  257. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/golden-set-grades-by-name-not-by-skill.md +0 -0
  258. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  259. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  260. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/heal-deleted-links-it-never-made.md +0 -0
  261. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  262. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/info-rejects-the-qualified-name-it-recommends.md +0 -0
  263. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  264. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  265. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/install-path-disambiguation.md +0 -0
  266. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  267. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  268. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  269. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  270. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/internal-architecture-diagrams.md +0 -0
  271. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  272. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  273. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/keyless-dense-tier-local-static-embeddings.md +0 -0
  274. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/keyless-semantic-search-for-everyone.md +0 -0
  275. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/langchain-in-the-wheel.md +0 -0
  276. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/langchain-integration-explainer-page.md +0 -0
  277. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/langchain-langgraph-langsmith-integration.md +0 -0
  278. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/langchain-retriever-metadata-and-k-floor.md +0 -0
  279. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  280. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  281. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  282. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/lighthouse-scored-a-page-nobody-is-served.md +0 -0
  283. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  284. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  285. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  286. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  287. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  288. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  289. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  290. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  291. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  292. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  293. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  294. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  295. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  296. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-already-covered-defeater.md +0 -0
  297. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  298. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  299. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  300. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-install-skips-the-injection-scan.md +0 -0
  301. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  302. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-one-benefit-nameable-task.md +0 -0
  303. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  304. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  305. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-search-cost-was-understated.md +0 -0
  306. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-search-hid-which-ranking-ran.md +0 -0
  307. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-servers-ignore-install-scope.md +0 -0
  308. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  309. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mcp-zero-setup-and-three-kinds.md +0 -0
  310. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  311. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  312. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  313. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  314. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  315. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  316. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  317. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  318. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  319. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  320. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/near-duplicate-items-eat-the-result-slots.md +0 -0
  321. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  322. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  323. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  324. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  325. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/one-dead-tap-broke-every-update.md +0 -0
  326. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  327. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  328. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  329. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  330. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/pep585-604-modernization-sweep.md +0 -0
  331. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  332. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  333. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  334. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  335. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  336. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/prerequisites-and-semantic-search-setup.md +0 -0
  337. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  338. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  339. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  340. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  341. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  342. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  343. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  344. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  345. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  346. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  347. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/python-floor-moves-to-312.md +0 -0
  348. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  349. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/ragas-unpin-when-upstream-ships.md +0 -0
  350. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  351. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  352. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  353. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  354. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  355. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  356. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  357. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/resolve-vendored-duplicate-copies.md +0 -0
  358. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  359. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  360. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  361. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/roadmap-page-weight-grows-without-bound.md +0 -0
  362. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/roadmap-perf-budget-has-no-local-guard.md +0 -0
  363. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  364. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  365. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  366. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/rules-install-but-cannot-be-governed.md +0 -0
  367. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  368. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  369. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  370. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  371. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  372. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  373. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  374. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/scheduled-toolchain-lock-regeneration.md +0 -0
  375. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  376. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/scripts-under-the-lint-gate.md +0 -0
  377. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/search-never-notices-a-new-tap.md +0 -0
  378. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  379. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  380. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  381. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  382. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  383. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/serve-404-reflected-the-request.md +0 -0
  384. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/serve-is-a-searchable-catalogue.md +0 -0
  385. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  386. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  387. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  388. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  389. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  390. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  391. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  392. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  393. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  394. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  395. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  396. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  397. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  398. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  399. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/tool-call-eval-tier.md +0 -0
  400. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  401. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  402. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  403. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  404. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  405. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/update-advertises-a-flag-it-rejects.md +0 -0
  406. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  407. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/update-refreshed-rules-without-a-gate.md +0 -0
  408. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  409. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  410. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  411. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  412. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  413. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  414. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  415. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  416. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  417. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/workspace-scope-install.md +0 -0
  418. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/zip-strict-audit.md +0 -0
  419. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  420. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/eslint.config.mjs +0 -0
  421. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/README.md +0 -0
  422. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/__init__.py +0 -0
  423. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/baseline.json +0 -0
  424. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/faithfulness.py +0 -0
  425. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/golden_set.json +0 -0
  426. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/make_corpus.py +0 -0
  427. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/make_golden.py +0 -0
  428. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/metrics.py +0 -0
  429. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/publish_golden_dataset.py +0 -0
  430. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/evals/run_evals.py +0 -0
  431. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/examples/README.md +0 -0
  432. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/examples/adapt-demo.sh +0 -0
  433. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/examples/boost-run-prototype.sh +0 -0
  434. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/index.html +0 -0
  435. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/noxfile.py +0 -0
  436. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/pyproject.toml +0 -0
  437. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/coverage-tools.in +0 -0
  438. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/coverage-tools.txt +0 -0
  439. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/lint-tools.in +0 -0
  440. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/lint-tools.txt +0 -0
  441. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/mutation-tools.in +0 -0
  442. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/mutation-tools.txt +0 -0
  443. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/platform-pins.lock +0 -0
  444. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/release-tools.in +0 -0
  445. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/release-tools.txt +0 -0
  446. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/test-tools.in +0 -0
  447. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/requirements/test-tools.txt +0 -0
  448. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/a11y_check.py +0 -0
  449. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/bench_cli.sh +0 -0
  450. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/build_command_reference.py +0 -0
  451. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/build_demo_index.py +0 -0
  452. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/build_registries.py +0 -0
  453. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/build_roadmap.py +0 -0
  454. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/build_scale_corpus.py +0 -0
  455. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/check_anchors.py +0 -0
  456. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/check_licenses.py +0 -0
  457. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/check_required_checks.py +0 -0
  458. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/ensure_eval_corpus.sh +0 -0
  459. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/eval_corpus.py +0 -0
  460. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/eval_explain.py +0 -0
  461. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/eval_gate.py +0 -0
  462. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/eval_recommend.py +0 -0
  463. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/eval_retrieval.py +0 -0
  464. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/eval_stats_summary.py +0 -0
  465. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/import_budget.py +0 -0
  466. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/lock_toolchain.py +0 -0
  467. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/measure_registry.py +0 -0
  468. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/mutation_gate.py +0 -0
  469. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/mutation_shards.py +0 -0
  470. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/mutation_weights.json +0 -0
  471. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/page_budget.py +0 -0
  472. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/perf_gate.py +0 -0
  473. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/post_deploy_smoke.py +0 -0
  474. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/publish_eval_json.py +0 -0
  475. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/release_guard.py +0 -0
  476. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/release_preflight.py +0 -0
  477. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/scripts/serve_docs.py +0 -0
  478. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/setup.cfg +0 -0
  479. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/sonar-project.properties +0 -0
  480. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/style/README.md +0 -0
  481. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/style/boost.css +0 -0
  482. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/style/boost.js +0 -0
  483. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/style/demo.html +0 -0
  484. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/adapt.feature +0 -0
  485. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/browse.feature +0 -0
  486. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/count.feature +0 -0
  487. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/discover.feature +0 -0
  488. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/doctor.feature +0 -0
  489. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/environment.py +0 -0
  490. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/explain.feature +0 -0
  491. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/index.feature +0 -0
  492. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/install.feature +0 -0
  493. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/list.feature +0 -0
  494. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/mcp.feature +0 -0
  495. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/search.feature +0 -0
  496. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/steps/cli_steps.py +0 -0
  497. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/steps/discovery_steps.py +0 -0
  498. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/steps/mcp_steps.py +0 -0
  499. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/bdd/features/steps/quality_steps.py +0 -0
  500. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/conftest.py +0 -0
  501. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/eval/baseline.json +0 -0
  502. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/eval/explain.jsonl +0 -0
  503. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/eval/golden-natural.jsonl +0 -0
  504. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/eval/golden.jsonl +0 -0
  505. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/eval/recommend.jsonl +0 -0
  506. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/eval/taps-scale.txt +0 -0
  507. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/eval/taps.txt +0 -0
  508. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_capabilities_policy.py +0 -0
  509. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_adapt.py +0 -0
  510. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_bmad.py +0 -0
  511. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_chat.py +0 -0
  512. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_configuration.py +0 -0
  513. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_discovery.py +0 -0
  514. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_hooks.py +0 -0
  515. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_info.py +0 -0
  516. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_intelligence.py +0 -0
  517. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_pkg.py +0 -0
  518. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_quality.py +0 -0
  519. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_taps.py +0 -0
  520. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_cli_team.py +0 -0
  521. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_everyday_loop.py +0 -0
  522. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_integrity_enforce.py +0 -0
  523. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_kind_conformance.py +0 -0
  524. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_property_parsers.py +0 -0
  525. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_run.py +0 -0
  526. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_tap_signing.py +0 -0
  527. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/functional/test_workspace_scope.py +0 -0
  528. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/README.md +0 -0
  529. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  530. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  531. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  532. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  533. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  534. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  535. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  536. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  537. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  538. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  539. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  540. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  541. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  542. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  543. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  544. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  545. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  546. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  547. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  548. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  549. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/fuzz_frontmatter.py +0 -0
  550. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/fuzz/fuzz_registry.py +0 -0
  551. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/langchain/conftest.py +0 -0
  552. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/langchain/test_graph.py +0 -0
  553. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/langchain/test_loader.py +0 -0
  554. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/langchain/test_retriever.py +0 -0
  555. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/make_fixture.py +0 -0
  556. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/perf/test_benchmarks.py +0 -0
  557. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/smoke.sh +0 -0
  558. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_a11y_check.py +0 -0
  559. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_action_pin_lockstep.py +0 -0
  560. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_adapters.py +0 -0
  561. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_adapters_multi.py +0 -0
  562. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_adapters_runner.py +0 -0
  563. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_agents.py +0 -0
  564. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_ai.py +0 -0
  565. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_bmad_core.py +0 -0
  566. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_boost_first_offer.py +0 -0
  567. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_bootstrap.py +0 -0
  568. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_builtin.py +0 -0
  569. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_capabilities.py +0 -0
  570. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_catalog.py +0 -0
  571. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_chat.py +0 -0
  572. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_check_anchors.py +0 -0
  573. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_check_licenses.py +0 -0
  574. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_claude_settings.py +0 -0
  575. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_cliparse.py +0 -0
  576. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_codeql_analysis_key.py +0 -0
  577. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_command_reference_fresh.py +0 -0
  578. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_community_health_files.py +0 -0
  579. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_complete.py +0 -0
  580. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_config.py +0 -0
  581. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_content_dedupe.py +0 -0
  582. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_dedup_trust.py +0 -0
  583. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_demo_index.py +0 -0
  584. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_dense.py +0 -0
  585. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_dense_fallback.py +0 -0
  586. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_dense_fix_hint.py +0 -0
  587. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_dense_shards.py +0 -0
  588. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_dense_status.py +0 -0
  589. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_dependabot_config.py +0 -0
  590. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_docs_pages_linked.py +0 -0
  591. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_docsite_chrome.py +0 -0
  592. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_ed25519.py +0 -0
  593. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_embed.py +0 -0
  594. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_embed_local.py +0 -0
  595. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_entry_key.py +0 -0
  596. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_errors_and_cli_table.py +0 -0
  597. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_eval_baseline.py +0 -0
  598. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_eval_corpus.py +0 -0
  599. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_eval_faithfulness.py +0 -0
  600. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_eval_gate.py +0 -0
  601. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_eval_grading.py +0 -0
  602. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_eval_metrics.py +0 -0
  603. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_eval_stats_summary.py +0 -0
  604. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_faithfulness.py +0 -0
  605. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_frontmatter.py +0 -0
  606. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_fuzz_targets.py +0 -0
  607. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_gemini_agent_sanitize.py +0 -0
  608. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_gitleaks_config.py +0 -0
  609. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_gitutil.py +0 -0
  610. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_gitutil_lfs.py +0 -0
  611. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_imperative.py +0 -0
  612. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_import_budget.py +0 -0
  613. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_injectscan.py +0 -0
  614. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_installscan.py +0 -0
  615. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_integrity.py +0 -0
  616. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_journal.py +0 -0
  617. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_langchain_packaging.py +0 -0
  618. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_link_ownership.py +0 -0
  619. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_localembed.py +0 -0
  620. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_localembed_e2e.py +0 -0
  621. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_lockfile.py +0 -0
  622. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_logs.py +0 -0
  623. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_marketing_counts.py +0 -0
  624. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_mcp.py +0 -0
  625. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_mcp_install_scan.py +0 -0
  626. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_mcpdecl.py +0 -0
  627. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_mcphost.py +0 -0
  628. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_measure_registry.py +0 -0
  629. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_minisign.py +0 -0
  630. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_mutation_hardening.py +0 -0
  631. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_mutation_shards.py +0 -0
  632. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_mutation_subfile_shards.py +0 -0
  633. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_mutmut_source_paths.py +0 -0
  634. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_nethttp.py +0 -0
  635. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_output.py +0 -0
  636. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_page_budget.py +0 -0
  637. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_paths.py +0 -0
  638. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_perf_gate.py +0 -0
  639. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_pkg_confusions.py +0 -0
  640. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_pkg_injection.py +0 -0
  641. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_pkg_secrets.py +0 -0
  642. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_platform_pins.py +0 -0
  643. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_policy.py +0 -0
  644. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_post_deploy_smoke.py +0 -0
  645. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_project_mcp_sidecar.py +0 -0
  646. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_projectlock.py +0 -0
  647. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_provenance.py +0 -0
  648. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_rag.py +0 -0
  649. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_rag_fusion.py +0 -0
  650. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_registries_fresh.py +0 -0
  651. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_registry.py +0 -0
  652. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_registry_categories.py +0 -0
  653. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_release_guard.py +0 -0
  654. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_release_preflight.py +0 -0
  655. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_required_checks.py +0 -0
  656. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_resolve.py +0 -0
  657. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_roadmap_fresh.py +0 -0
  658. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_rules.py +0 -0
  659. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_scale_corpus.py +0 -0
  660. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_scopes.py +0 -0
  661. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_secretscan.py +0 -0
  662. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_selfupdate.py +0 -0
  663. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_serve.py +0 -0
  664. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_serve_docs.py +0 -0
  665. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_spin.py +0 -0
  666. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_stackprobe.py +0 -0
  667. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_staleness.py +0 -0
  668. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_store.py +0 -0
  669. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_token_parity.py +0 -0
  670. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_toolchain_lock.py +0 -0
  671. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_trustaudit.py +0 -0
  672. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_typosquat.py +0 -0
  673. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_updatediff.py +0 -0
  674. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_util.py +0 -0
  675. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_version.py +0 -0
  676. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_workflow_concurrency.py +0 -0
  677. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_workflow_concurrency_groups.py +0 -0
  678. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_workflow_timeouts.py +0 -0
  679. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/unit/test_workflows.py +0 -0
  680. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/visual/a11y_check.mjs +0 -0
  681. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/visual/console_check.mjs +0 -0
  682. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/visual/package-lock.json +0 -0
  683. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/tests/visual/package.json +0 -0
  684. {boost_skill_cli-1.0.441 → boost_skill_cli-1.0.443}/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.0.441
3
+ Version: 1.0.443
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.0.441'
22
- __version_tuple__ = version_tuple = (1, 0, 441)
21
+ __version__ = version = '1.0.443'
22
+ __version_tuple__ = version_tuple = (1, 0, 443)
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.0.441
3
+ Version: 1.0.443
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -241,6 +241,7 @@ docs/roadmap/items/eval-corpus-is-one-strangers-repo.md
241
241
  docs/roadmap/items/eval-corpus-pins-have-no-refresh-path.md
242
242
  docs/roadmap/items/eval-corpus-was-not-actually-pinned.md
243
243
  docs/roadmap/items/eval-deduped-ranked-lists-by-name.md
244
+ docs/roadmap/items/eval-stats-could-never-publish.md
244
245
  docs/roadmap/items/expanded-card-bodies-overflow.md
245
246
  docs/roadmap/items/extension-free-tests-core-dense-py.md
246
247
  docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md
@@ -640,6 +641,7 @@ tests/unit/test_post_deploy_smoke.py
640
641
  tests/unit/test_project_mcp_sidecar.py
641
642
  tests/unit/test_projectlock.py
642
643
  tests/unit/test_provenance.py
644
+ tests/unit/test_publish_golden_dataset.py
643
645
  tests/unit/test_rag.py
644
646
  tests/unit/test_rag_fusion.py
645
647
  tests/unit/test_registries_fresh.py
@@ -670,6 +672,7 @@ tests/unit/test_util.py
670
672
  tests/unit/test_version.py
671
673
  tests/unit/test_workflow_concurrency.py
672
674
  tests/unit/test_workflow_concurrency_groups.py
675
+ tests/unit/test_workflow_push_has_credentials.py
673
676
  tests/unit/test_workflow_timeouts.py
674
677
  tests/unit/test_workflows.py
675
678
  tests/visual/a11y_check.mjs
Binary file
@@ -0,0 +1,45 @@
1
+ ---
2
+ id: eval-stats-could-never-publish
3
+ board: code
4
+ section: pipeline
5
+ status: shipped
6
+ category: Build · Bug
7
+ complexity: S
8
+ impact: Med
9
+ wow: 4
10
+ note: the published-metrics file has ONE commit in its whole history — the one that created it
11
+ order: 109
12
+ owner: fix/eval-stats-push-auth
13
+ pr:
14
+ title: The published metrics could never be published
15
+ ---
16
+ <code>eval-stats.yml</code> regenerates <code>docs/eval-latest.json</code> — the payload the docs site
17
+ reads — commits it, and pushes to <code>main</code> on a schedule. The proof that it never landed is
18
+ in the file's own history: <b>one commit, ever</b>, the one that created it in
19
+ <code>#421</code>.
20
+
21
+ <b>The cause is a pair of individually-correct lines.</b> The checkout sets
22
+ <code>persist-credentials: false</code>, which is right and is what zizmor's
23
+ <code>artipacked</code> rule asks for. Ninety lines later the job runs
24
+ <code>git push origin HEAD:main</code>. With no persisted credentials the remote carries no auth, so
25
+ that push cannot work — and nothing in either line looks wrong on its own. The defect only exists
26
+ in the distance between them.
27
+
28
+ <b>It reported success while doing nothing, which is why it survived.</b> The step exits 0 early
29
+ when there is nothing to commit, so a run that found no metric drift and a run that could not
30
+ publish are the same green tick. Of the two scheduled runs, one passed that way and one failed —
31
+ and the failure was invisible for the same reason <code>fuzz</code> and <code>shards</code> were:
32
+ until <code>#508</code>, <code>ci-failure-issue.yml</code> watched 2 of 26 workflows, and a cron
33
+ job's failure is a red square on a page nobody opens.
34
+
35
+ <b>The fix was already in the repo.</b> <code>ci.yml</code> pushes its badges branch to an explicit
36
+ <code>x-access-token</code> URL — keeping the safe checkout default <i>and</i> being able to push.
37
+ The same three lines applied here. Nothing about the problem was novel; what was missing was anything
38
+ that compared the two workflows.
39
+
40
+ So the guard does that comparison. <code>tests/unit/test_workflow_push_has_credentials.py</code>
41
+ fails the build when a workflow checks out without persisting credentials and then pushes without
42
+ supplying any. It folds shell line-continuations before matching, because a push carrying a token in
43
+ its URL is long enough to wrap — matching per physical line would have failed the correct fix and
44
+ passed the broken one, which is the failure mode a guard can least afford. Both directions were
45
+ verified: green on the fix, and red again when the bare push is restored.
@@ -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>239</b><span>Loop finds</span></div>
136
+ <div class="stat"><b>240</b><span>Loop finds</span></div>
137
137
  <!-- /ROADMAP:stats -->
138
138
  </div>
139
139
  </section>
@@ -6111,6 +6111,48 @@ vacuously if the trigger detection silently stops matching.</p></details>
6111
6111
  <span class="m">two PRs deadlocked each other for hours — re-running the job just moved the cancellation to the other one</span>
6112
6112
  </div>
6113
6113
  </article>
6114
+
6115
+ <article class="cap rcard" id="eval-stats-could-never-publish">
6116
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Build · Bug</span></div>
6117
+ <h3>The published metrics could never be published</h3>
6118
+ <details class="cardbody"><summary>Write-up</summary>
6119
+ <p><code>eval-stats.yml</code> regenerates <code>docs/eval-latest.json</code> — the payload the docs site
6120
+ reads — commits it, and pushes to <code>main</code> on a schedule. The proof that it never landed is
6121
+ in the file's own history: <b>one commit, ever</b>, the one that created it in
6122
+ <code>#421</code>.
6123
+
6124
+ <b>The cause is a pair of individually-correct lines.</b> The checkout sets
6125
+ <code>persist-credentials: false</code>, which is right and is what zizmor's
6126
+ <code>artipacked</code> rule asks for. Ninety lines later the job runs
6127
+ <code>git push origin HEAD:main</code>. With no persisted credentials the remote carries no auth, so
6128
+ that push cannot work — and nothing in either line looks wrong on its own. The defect only exists
6129
+ in the distance between them.
6130
+
6131
+ <b>It reported success while doing nothing, which is why it survived.</b> The step exits 0 early
6132
+ when there is nothing to commit, so a run that found no metric drift and a run that could not
6133
+ publish are the same green tick. Of the two scheduled runs, one passed that way and one failed —
6134
+ and the failure was invisible for the same reason <code>fuzz</code> and <code>shards</code> were:
6135
+ until <code>#508</code>, <code>ci-failure-issue.yml</code> watched 2 of 26 workflows, and a cron
6136
+ job's failure is a red square on a page nobody opens.
6137
+
6138
+ <b>The fix was already in the repo.</b> <code>ci.yml</code> pushes its badges branch to an explicit
6139
+ <code>x-access-token</code> URL — keeping the safe checkout default <i>and</i> being able to push.
6140
+ The same three lines applied here. Nothing about the problem was novel; what was missing was anything
6141
+ that compared the two workflows.
6142
+
6143
+ So the guard does that comparison. <code>tests/unit/test_workflow_push_has_credentials.py</code>
6144
+ fails the build when a workflow checks out without persisting credentials and then pushes without
6145
+ supplying any. It folds shell line-continuations before matching, because a push carrying a token in
6146
+ its URL is long enough to wrap — matching per physical line would have failed the correct fix and
6147
+ passed the broken one, which is the failure mode a guard can least afford. Both directions were
6148
+ verified: green on the fix, and red again when the bare push is restored.</p></details>
6149
+ <div class="meta">
6150
+ <span class="m">Complexity <b>S</b></span>
6151
+ <span class="m">Impact <b>Med</b></span>
6152
+ <span class="m">Wow <b class="wow">★★★★</b></span>
6153
+ <span class="m">the published-metrics file has ONE commit in its whole history — the one that created it</span>
6154
+ </div>
6155
+ </article>
6114
6156
  <!-- /ROADMAP:cards -->
6115
6157
 
6116
6158
  </div>
@@ -0,0 +1,226 @@
1
+ """Unit tests: the LangSmith golden-set publisher, which had none.
2
+
3
+ ``evals/publish_golden_dataset.py`` is the "observe" leg of boost's LangChain
4
+ integration — it mirrors ``tests/eval/golden.jsonl`` into a LangSmith dataset so
5
+ online evals grade against the same ground truth the offline Tier-1 gate floors.
6
+ It is deliberately outside the required gate (a required check that depends on a
7
+ SaaS account fails when someone else's billing lapses), and the cost of that is
8
+ that **nothing exercised it at all**: no test imported it, so every path
9
+ including the argument parsing was unverified.
10
+
11
+ It cannot be tested against the real service, and should not be. What *is*
12
+ testable is everything the network never sees, which is where the bugs a reader
13
+ would actually hit live:
14
+
15
+ * the two opt-in guards return cleanly rather than tracebacking, which is the
16
+ documented contract for a surface that must degrade when unconfigured;
17
+ * the golden file parses the way the offline gate parses it — comments and
18
+ blanks dropped — because a publisher that silently disagrees with the gate
19
+ about which rows count would publish a dataset that grades differently while
20
+ claiming to be the same ground truth;
21
+ * every row becomes exactly one example with the query as input and the
22
+ judgments as output.
23
+
24
+ The client is a stub. That is not a shortcut around the interesting part: the
25
+ interesting part is the mapping from a golden row to an example, and a stub is
26
+ what makes it observable.
27
+ """
28
+ from __future__ import annotations
29
+
30
+ import importlib.util
31
+ import json
32
+ from pathlib import Path
33
+
34
+ import pytest
35
+
36
+ ROOT = Path(__file__).resolve().parents[2]
37
+ SCRIPT = ROOT / "evals" / "publish_golden_dataset.py"
38
+ GOLDEN = ROOT / "tests" / "eval" / "golden.jsonl"
39
+
40
+ pytestmark = pytest.mark.skipif(
41
+ not SCRIPT.exists(), reason="evals/ not reachable (e.g. mutation sandbox)")
42
+
43
+
44
+ def load_publisher():
45
+ """Import the script by path, the way this repo tests scripts/."""
46
+ spec = importlib.util.spec_from_file_location("publish_golden_dataset",
47
+ SCRIPT)
48
+ mod = importlib.util.module_from_spec(spec)
49
+ assert spec.loader is not None
50
+ spec.loader.exec_module(mod)
51
+ return mod
52
+
53
+
54
+ MOD = load_publisher()
55
+
56
+
57
+ class TestLoadGolden:
58
+ """The parse must agree with the gate's, or the two grade different sets."""
59
+
60
+ def test_comments_and_blanks_are_dropped(self, tmp_path):
61
+ path = tmp_path / "g.jsonl"
62
+ path.write_text(
63
+ '# a comment\n\n{"query": "q1", "relevant": ["a"]}\n'
64
+ ' \n{"query": "q2", "relevant": ["b"]}\n', encoding="utf-8")
65
+ assert [r["query"] for r in MOD.load_golden(path)] == ["q1", "q2"]
66
+
67
+ def test_the_real_golden_set_parses(self):
68
+ rows = MOD.load_golden(GOLDEN)
69
+ assert rows, "the shipped golden set parsed as empty"
70
+ assert all("query" in r for r in rows)
71
+
72
+ def test_it_agrees_with_the_gate_on_how_many_rows_there_are(self):
73
+ # THE POINT of testing the parser at all. The offline gate and this
74
+ # publisher both read golden.jsonl; if they disagree about which lines
75
+ # count, the LangSmith dataset silently grades a different set while
76
+ # claiming to be the same ground truth.
77
+ expected = sum(
78
+ 1 for line in GOLDEN.read_text(encoding="utf-8").splitlines()
79
+ if line.strip() and not line.strip().startswith("#"))
80
+ assert len(MOD.load_golden(GOLDEN)) == expected
81
+
82
+
83
+ class TestItDegradesWhenUnconfigured:
84
+ """Both guards are documented as "message, not traceback". Pin that."""
85
+
86
+ def test_a_missing_key_returns_nonzero_without_raising(self, monkeypatch,
87
+ capsys):
88
+ monkeypatch.delenv("LANGSMITH_API_KEY", raising=False)
89
+ assert MOD.main(["--golden", str(GOLDEN)]) == 1
90
+ assert "LANGSMITH_API_KEY" in capsys.readouterr().err
91
+
92
+ def test_a_missing_package_returns_nonzero_without_raising(self, monkeypatch,
93
+ capsys):
94
+ monkeypatch.setenv("LANGSMITH_API_KEY", "not-a-real-key")
95
+ monkeypatch.setitem(__import__("sys").modules, "langsmith", None)
96
+ assert MOD.main(["--golden", str(GOLDEN)]) == 1
97
+ assert "langsmith" in capsys.readouterr().err
98
+
99
+ def test_the_key_check_happens_before_any_client_is_built(self, monkeypatch):
100
+ # Ordering, not politeness: reaching a Client() constructor without a
101
+ # key is how an opt-in surface turns into a traceback on a machine that
102
+ # simply never opted in.
103
+ monkeypatch.delenv("LANGSMITH_API_KEY", raising=False)
104
+ built = []
105
+ monkeypatch.setitem(__import__("sys").modules, "langsmith",
106
+ _fake_langsmith(built))
107
+ MOD.main(["--golden", str(GOLDEN)])
108
+ assert built == []
109
+
110
+
111
+ class _FakeDataset:
112
+ def __init__(self, ident="ds-1"):
113
+ self.id = ident
114
+
115
+
116
+ class _FakeClient:
117
+ """Enough of langsmith.Client to observe what would be sent."""
118
+
119
+ def __init__(self, existing=False, calls=None):
120
+ self.calls = calls if calls is not None else []
121
+ self._existing = existing
122
+ self.created_examples = []
123
+ self.deleted = []
124
+
125
+ def has_dataset(self, dataset_name):
126
+ self.calls.append(("has_dataset", dataset_name))
127
+ return self._existing
128
+
129
+ def read_dataset(self, dataset_name):
130
+ self.calls.append(("read_dataset", dataset_name))
131
+ return _FakeDataset()
132
+
133
+ def create_dataset(self, dataset_name, description=""):
134
+ self.calls.append(("create_dataset", dataset_name))
135
+ return _FakeDataset()
136
+
137
+ def list_examples(self, dataset_id):
138
+ self.calls.append(("list_examples", dataset_id))
139
+ return [_FakeDataset("ex-1"), _FakeDataset("ex-2")]
140
+
141
+ def delete_example(self, example_id):
142
+ self.deleted.append(example_id)
143
+
144
+ def create_examples(self, dataset_id, examples):
145
+ self.calls.append(("create_examples", dataset_id))
146
+ self.created_examples = examples
147
+
148
+
149
+ def _fake_langsmith(built, existing=False, box=None):
150
+ """A stand-in ``langsmith`` module whose Client records what it was asked."""
151
+ import types
152
+ mod = types.ModuleType("langsmith")
153
+
154
+ def _client(*a, **k):
155
+ client = _FakeClient(existing=existing)
156
+ built.append(client)
157
+ if box is not None:
158
+ box.append(client)
159
+ return client
160
+
161
+ mod.Client = _client
162
+ return mod
163
+
164
+
165
+ def _run(monkeypatch, tmp_path, rows, existing=False):
166
+ """Publish ``rows`` through a stub client; return that client."""
167
+ path = tmp_path / "g.jsonl"
168
+ path.write_text("\n".join(json.dumps(r) for r in rows), encoding="utf-8")
169
+ monkeypatch.setenv("LANGSMITH_API_KEY", "not-a-real-key")
170
+ built: list = []
171
+ monkeypatch.setitem(__import__("sys").modules, "langsmith",
172
+ _fake_langsmith(built, existing=existing))
173
+ rc = MOD.main(["--golden", str(path), "--name", "test-set"])
174
+ assert rc == 0
175
+ assert built, "no client was constructed"
176
+ return built[0]
177
+
178
+
179
+ ROWS = [{"query": "how do I review code", "relevant": ["code-review"],
180
+ "kind": "skill", "note": "n1"},
181
+ {"query": "commit conventions", "relevant": ["conventional-commits"],
182
+ "kind": "rule", "note": ""}]
183
+
184
+
185
+ class TestEveryRowBecomesAnExample:
186
+ def test_one_example_per_row(self, monkeypatch, tmp_path):
187
+ client = _run(monkeypatch, tmp_path, ROWS)
188
+ assert len(client.created_examples) == len(ROWS)
189
+
190
+ def test_the_query_is_the_input(self, monkeypatch, tmp_path):
191
+ client = _run(monkeypatch, tmp_path, ROWS)
192
+ assert [e["inputs"]["query"] for e in client.created_examples] == \
193
+ [r["query"] for r in ROWS]
194
+
195
+ def test_the_judgments_are_the_output(self, monkeypatch, tmp_path):
196
+ # This is the ground truth an online eval grades against; losing it
197
+ # would leave a dataset of questions with no answers, which still
198
+ # publishes cleanly.
199
+ client = _run(monkeypatch, tmp_path, ROWS)
200
+ assert client.created_examples[0]["outputs"]["relevant"] == \
201
+ ["code-review"]
202
+ assert client.created_examples[0]["outputs"]["kind"] == "skill"
203
+
204
+ def test_a_row_missing_optional_fields_still_publishes(self, monkeypatch,
205
+ tmp_path):
206
+ # golden.jsonl's optional keys are optional in the gate too.
207
+ client = _run(monkeypatch, tmp_path, [{"query": "bare"}])
208
+ example = client.created_examples[0]
209
+ assert example["outputs"]["relevant"] == []
210
+ assert example["metadata"]["note"] == ""
211
+
212
+
213
+ class TestItMirrorsRatherThanAccretes:
214
+ """Re-running must leave the dataset equal to the file, not appended to."""
215
+
216
+ def test_a_new_dataset_is_created_when_absent(self, monkeypatch, tmp_path):
217
+ client = _run(monkeypatch, tmp_path, ROWS, existing=False)
218
+ assert ("create_dataset", "test-set") in client.calls
219
+
220
+ def test_existing_examples_are_deleted_before_the_new_ones_land(
221
+ self, monkeypatch, tmp_path):
222
+ # Without this, publishing twice doubles every example and the dataset
223
+ # quietly stops matching the file it claims to mirror.
224
+ client = _run(monkeypatch, tmp_path, ROWS, existing=True)
225
+ assert client.deleted, "no existing examples were removed"
226
+ assert ("create_dataset", "test-set") not in client.calls
@@ -0,0 +1,100 @@
1
+ """Unit tests: a workflow that pushes has credentials to push with.
2
+
3
+ ``actions/checkout`` with ``persist-credentials: false`` leaves no auth in the
4
+ remote — which is the right default, and what zizmor's ``artipacked`` rule asks
5
+ for. A later bare ``git push origin`` in the same job therefore cannot work.
6
+
7
+ ``eval-stats.yml`` had exactly that pair. It regenerates
8
+ ``docs/eval-latest.json`` — the payload the docs site reads — commits it, and
9
+ pushes. The proof that it never landed is in the file's own history: **one
10
+ commit, ever**, the one that created it. Every scheduled refresh since has
11
+ either found nothing to commit or died on the push.
12
+
13
+ It is the same silence as ``shards`` and ``fuzz``: a workflow that looks like a
14
+ control and produces nothing, on a cron nobody watches. The run even reports
15
+ *success* when there is nothing to commit, so the conclusion column cannot
16
+ distinguish "no drift" from "cannot publish".
17
+
18
+ ``ci.yml`` already had the fix in the repo — it pushes its badges branch with an
19
+ explicit ``x-access-token`` URL, keeping the safe checkout default *and* being
20
+ able to push. This test pins the pairing so the two halves cannot drift apart
21
+ again in either direction.
22
+ """
23
+ from __future__ import annotations
24
+
25
+ import re
26
+ from pathlib import Path
27
+
28
+ import pytest
29
+
30
+ WORKFLOWS = Path(__file__).resolve().parents[2] / ".github" / "workflows"
31
+
32
+ pytestmark = pytest.mark.skipif(
33
+ not WORKFLOWS.exists(),
34
+ reason=".github/workflows not reachable (e.g. mutation sandbox)")
35
+
36
+ #: A push that carries its own credentials, rather than relying on the ones the
37
+ #: checkout deliberately did not persist.
38
+ _AUTHED_PUSH = re.compile(r"git push[^\n]*(x-access-token|\$\{\{\s*secrets\.|"
39
+ r"\$\{\{\s*github\.token|GITHUB_TOKEN|GH_TOKEN)")
40
+ _ANY_PUSH = re.compile(r"^\s*git push\b", re.M)
41
+
42
+
43
+ def join_continuations(text: str) -> str:
44
+ """Fold shell line-continuations, so one command is one line.
45
+
46
+ A push long enough to need credentials in its URL is a push long enough to
47
+ be wrapped, and matching per physical line would read the token on the next
48
+ line as absent — failing a workflow that is correct. Folding first is what
49
+ the shell itself does.
50
+ """
51
+ return re.sub(r"\\\n\s*", " ", text)
52
+
53
+
54
+ def pushing_workflows() -> dict[str, str]:
55
+ """``{file name: folded text}`` for every workflow containing a git push."""
56
+ out = {}
57
+ for path in sorted(WORKFLOWS.glob("*.yml")):
58
+ text = join_continuations(path.read_text(encoding="utf-8"))
59
+ if _ANY_PUSH.search(text):
60
+ out[path.name] = text
61
+ return out
62
+
63
+
64
+ class TestTheGuardCanActuallySee:
65
+ def test_at_least_one_workflow_pushes(self):
66
+ # Otherwise every assertion below is vacuous.
67
+ assert pushing_workflows(), "no workflow matched a git push"
68
+
69
+ def test_an_authed_push_is_recognised(self):
70
+ line = ('git push -qf "https://x-access-token:${{ github.token }}'
71
+ '@github.com/${{ github.repository }}" badges:badges')
72
+ assert _AUTHED_PUSH.search(line)
73
+
74
+ def test_a_bare_push_is_not_recognised_as_authed(self):
75
+ assert not _AUTHED_PUSH.search(" git push origin HEAD:main")
76
+
77
+ def test_a_wrapped_authed_push_is_recognised(self):
78
+ # The shape the fix actually takes: a token URL is too long for one
79
+ # line, so without folding the continuation this guard would fail a
80
+ # workflow that is correct.
81
+ wrapped = (' git push -q \\\n'
82
+ ' "https://x-access-token:${{ github.token }}'
83
+ '@github.com/${{ github.repository }}" \\\n'
84
+ ' HEAD:main\n')
85
+ assert _AUTHED_PUSH.search(join_continuations(wrapped))
86
+
87
+
88
+ @pytest.mark.parametrize("name", sorted(pushing_workflows()))
89
+ def test_a_push_after_an_unpersisted_checkout_carries_a_token(name):
90
+ text = pushing_workflows()[name]
91
+ if "persist-credentials: false" not in text:
92
+ pytest.skip("%s keeps the checkout credentials" % name)
93
+ bare = [line.strip() for line in text.splitlines()
94
+ if _ANY_PUSH.match(line) and not _AUTHED_PUSH.search(line)]
95
+ assert not bare, (
96
+ "%s checks out with persist-credentials: false — so the remote has no "
97
+ "auth — and then pushes without supplying any: %s. eval-stats.yml did "
98
+ "exactly this and never once refreshed docs/eval-latest.json; the "
99
+ "file has one commit in its whole history. ci.yml shows the fix: push "
100
+ "to an explicit x-access-token URL." % (name, bare))
Binary file