boost-skill-cli 1.0.275__tar.gz → 1.0.277__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 (515) hide show
  1. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/Makefile +6 -3
  2. {boost_skill_cli-1.0.275/boost_skill_cli.egg-info → boost_skill_cli-1.0.277}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  5. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/SOURCES.txt +4 -0
  6. boost_skill_cli-1.0.277/docs/roadmap/items/demo-cannot-open-its-own-pr.md +56 -0
  7. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +8 -0
  8. boost_skill_cli-1.0.277/docs/roadmap/items/make-lint-masks-actionlint-failures.md +61 -0
  9. boost_skill_cli-1.0.277/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +47 -0
  10. boost_skill_cli-1.0.277/docs/roadmap/items/release-verifies-the-wrong-commit.md +57 -0
  11. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +18 -2
  12. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap.html +234 -5
  13. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/coverage-tools.txt +63 -63
  14. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/mutation-tools.txt +63 -63
  15. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/release-tools.txt +3 -3
  16. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/test-tools.txt +63 -63
  17. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/lock_toolchain.py +40 -4
  18. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_toolchain_lock.py +109 -4
  19. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.gitattributes +0 -0
  20. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.gitignore +0 -0
  21. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.gitleaks.toml +0 -0
  22. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.htmlvalidate.json +0 -0
  23. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.lighthouserc.json +0 -0
  24. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.lycheeignore +0 -0
  25. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.markdownlint-cli2.jsonc +0 -0
  26. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.pre-commit-config.yaml +0 -0
  27. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.stylelintrc.json +0 -0
  28. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.vale/styles/boost/Terminology.yml +0 -0
  29. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  30. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/.vale.ini +0 -0
  31. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/CLAUDE.md +0 -0
  32. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/CODE_OF_CONDUCT.md +0 -0
  33. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/CONTRIBUTING.md +0 -0
  34. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/LICENSE +0 -0
  35. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/MANIFEST.in +0 -0
  36. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/README.md +0 -0
  37. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/SECURITY.md +0 -0
  38. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost +0 -0
  39. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/__init__.py +0 -0
  40. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/__main__.py +0 -0
  41. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/cli.py +0 -0
  42. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/cliparse.py +0 -0
  43. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/__init__.py +0 -0
  44. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/_common.py +0 -0
  45. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/bmad.py +0 -0
  46. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/configuration.py +0 -0
  47. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/discovery.py +0 -0
  48. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/hooks.py +0 -0
  49. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/info.py +0 -0
  50. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/intelligence.py +0 -0
  51. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/pkg.py +0 -0
  52. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/quality.py +0 -0
  53. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/run.py +0 -0
  54. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/safety.py +0 -0
  55. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/taps.py +0 -0
  56. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/commands/team.py +0 -0
  57. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/__init__.py +0 -0
  58. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/adapters.py +0 -0
  59. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/agents.py +0 -0
  60. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/ai.py +0 -0
  61. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/capabilities.py +0 -0
  62. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/catalog.py +0 -0
  63. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/claude_settings.py +0 -0
  64. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/config.py +0 -0
  65. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/dense.py +0 -0
  66. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/ed25519.py +0 -0
  67. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/embed.py +0 -0
  68. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/faithfulness.py +0 -0
  69. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/frontmatter.py +0 -0
  70. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/gitutil.py +0 -0
  71. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/imperative.py +0 -0
  72. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/injectscan.py +0 -0
  73. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/integrity.py +0 -0
  74. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/journal.py +0 -0
  75. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/lockfile.py +0 -0
  76. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/logs.py +0 -0
  77. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/mcp.py +0 -0
  78. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/mcpdecl.py +0 -0
  79. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/minisign.py +0 -0
  80. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/nethttp.py +0 -0
  81. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/output.py +0 -0
  82. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/paths.py +0 -0
  83. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/policy.py +0 -0
  84. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/projectlock.py +0 -0
  85. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/provenance.py +0 -0
  86. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/rag.py +0 -0
  87. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/registry.py +0 -0
  88. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/resolve.py +0 -0
  89. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/rules.py +0 -0
  90. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/scopes.py +0 -0
  91. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/secretscan.py +0 -0
  92. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/selfupdate.py +0 -0
  93. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/serve.py +0 -0
  94. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/stackprobe.py +0 -0
  95. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/staleness.py +0 -0
  96. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/store.py +0 -0
  97. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/trustaudit.py +0 -0
  98. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/typosquat.py +0 -0
  99. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/updatediff.py +0 -0
  100. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/util.py +0 -0
  101. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/core/workflows.py +0 -0
  102. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/data/registries.json +0 -0
  103. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/errors.py +0 -0
  104. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_cli/spin.py +0 -0
  105. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  106. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  107. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/requires.txt +0 -0
  108. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/boost_skill_cli.egg-info/top_level.txt +0 -0
  109. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/codecov.yml +0 -0
  110. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/.claude/settings.local.json +0 -0
  111. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/DEBUGGING.md +0 -0
  112. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/adapters.html +0 -0
  113. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/distill.gif +0 -0
  114. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/doctor.gif +0 -0
  115. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/explain.gif +0 -0
  116. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/hooks.gif +0 -0
  117. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/install.gif +0 -0
  118. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/pulse.gif +0 -0
  119. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/search.gif +0 -0
  120. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/gifs/tap.gif +0 -0
  121. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/distill.tape +0 -0
  122. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/doctor.tape +0 -0
  123. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/explain.tape +0 -0
  124. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/hooks.tape +0 -0
  125. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/install.tape +0 -0
  126. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/pulse.tape +0 -0
  127. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/search.tape +0 -0
  128. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel/tapes/tap.tape +0 -0
  129. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/carousel.html +0 -0
  130. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/commands.html +0 -0
  131. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/demo.gif +0 -0
  132. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/demo.tape +0 -0
  133. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/design-roadmap.html +0 -0
  134. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/eval.html +0 -0
  135. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/index.html +0 -0
  136. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/mcp-hub.html +0 -0
  137. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/rag-architecture.md +0 -0
  138. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D01.md +0 -0
  139. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D02.md +0 -0
  140. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D03.md +0 -0
  141. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D04.md +0 -0
  142. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D05.md +0 -0
  143. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D06.md +0 -0
  144. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D07.md +0 -0
  145. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D08.md +0 -0
  146. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D09.md +0 -0
  147. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D10.md +0 -0
  148. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D11.md +0 -0
  149. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D12.md +0 -0
  150. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D13.md +0 -0
  151. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D14.md +0 -0
  152. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D15.md +0 -0
  153. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D16.md +0 -0
  154. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D17.md +0 -0
  155. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D18.md +0 -0
  156. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D19.md +0 -0
  157. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D20.md +0 -0
  158. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D21.md +0 -0
  159. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D22.md +0 -0
  160. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D23.md +0 -0
  161. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D24.md +0 -0
  162. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D25.md +0 -0
  163. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/BOOST-D26.md +0 -0
  164. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  165. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  166. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  167. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  168. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  169. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  170. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  171. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  172. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  173. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  174. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  175. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  176. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  177. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  178. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  179. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  180. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  181. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  182. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  183. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/command-carousel-page.md +0 -0
  184. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  185. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  186. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  187. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  188. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  189. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  190. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  191. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  192. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  193. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  194. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  195. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  196. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  197. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  198. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  199. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  200. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  201. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  202. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  203. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  204. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  205. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  206. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  207. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  208. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  209. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/github-community-health-files.md +0 -0
  210. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  211. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  212. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  213. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  214. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  215. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  216. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  217. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  218. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  219. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  220. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  221. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  222. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  223. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  224. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  225. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  226. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  227. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  228. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  229. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  230. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  231. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  232. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  233. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  234. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  235. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  236. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  237. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  238. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  239. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  240. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  241. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  242. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  243. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  244. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  245. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  246. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  247. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  248. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  249. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  250. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  251. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  252. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  253. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  254. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  255. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  256. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  257. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  258. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  259. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  260. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  261. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  262. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  263. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  264. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  265. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  266. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  267. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  268. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  269. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  270. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  271. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  272. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  273. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  274. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  275. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  276. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  277. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  278. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  279. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  280. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  281. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  282. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  283. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  284. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  285. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  286. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  287. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  288. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  289. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  290. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  291. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  292. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  293. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/scorecard-findings-triage.md +0 -0
  294. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  295. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  296. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  297. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  298. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  299. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  300. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  301. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  302. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  303. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  304. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  305. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  306. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  307. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  308. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  309. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  310. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  311. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  312. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  313. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  314. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  315. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  316. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  317. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  318. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  319. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  320. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  321. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  322. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  323. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  324. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  325. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  326. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  327. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  328. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/docs/roadmap/items/workspace-scope-install.md +0 -0
  329. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/eslint.config.mjs +0 -0
  330. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/examples/README.md +0 -0
  331. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/examples/adapt-demo.sh +0 -0
  332. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/examples/boost-run-prototype.sh +0 -0
  333. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/index.html +0 -0
  334. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/noxfile.py +0 -0
  335. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/pyproject.toml +0 -0
  336. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/coverage-tools.in +0 -0
  337. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/lint-tools.in +0 -0
  338. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/lint-tools.txt +0 -0
  339. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/mutation-tools.in +0 -0
  340. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/release-tools.in +0 -0
  341. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/requirements/test-tools.in +0 -0
  342. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/a11y_check.py +0 -0
  343. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/bench_cli.sh +0 -0
  344. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/build_command_reference.py +0 -0
  345. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/build_registries.py +0 -0
  346. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/build_roadmap.py +0 -0
  347. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/check_anchors.py +0 -0
  348. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/check_licenses.py +0 -0
  349. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/check_required_checks.py +0 -0
  350. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/ensure_eval_corpus.sh +0 -0
  351. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/eval_explain.py +0 -0
  352. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/eval_recommend.py +0 -0
  353. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/eval_retrieval.py +0 -0
  354. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/eval_stats_summary.py +0 -0
  355. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/import_budget.py +0 -0
  356. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/mutation_gate.py +0 -0
  357. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/mutation_shards.py +0 -0
  358. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/mutation_weights.json +0 -0
  359. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/perf_gate.py +0 -0
  360. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/post_deploy_smoke.py +0 -0
  361. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/scripts/release_preflight.py +0 -0
  362. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/setup.cfg +0 -0
  363. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/sonar-project.properties +0 -0
  364. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/style/README.md +0 -0
  365. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/style/boost.css +0 -0
  366. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/style/boost.js +0 -0
  367. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/style/demo.html +0 -0
  368. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/adapt.feature +0 -0
  369. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/browse.feature +0 -0
  370. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/count.feature +0 -0
  371. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/discover.feature +0 -0
  372. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/doctor.feature +0 -0
  373. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/environment.py +0 -0
  374. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/explain.feature +0 -0
  375. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/index.feature +0 -0
  376. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/install.feature +0 -0
  377. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/list.feature +0 -0
  378. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/mcp.feature +0 -0
  379. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/search.feature +0 -0
  380. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/steps/cli_steps.py +0 -0
  381. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/steps/discovery_steps.py +0 -0
  382. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/steps/mcp_steps.py +0 -0
  383. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/bdd/features/steps/quality_steps.py +0 -0
  384. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/conftest.py +0 -0
  385. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/baseline.json +0 -0
  386. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/explain.jsonl +0 -0
  387. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/golden.jsonl +0 -0
  388. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/recommend.jsonl +0 -0
  389. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/eval/taps.txt +0 -0
  390. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_capabilities_policy.py +0 -0
  391. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_adapt.py +0 -0
  392. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_bmad.py +0 -0
  393. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_configuration.py +0 -0
  394. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_discovery.py +0 -0
  395. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_hooks.py +0 -0
  396. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_info.py +0 -0
  397. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_intelligence.py +0 -0
  398. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_pkg.py +0 -0
  399. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_quality.py +0 -0
  400. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_taps.py +0 -0
  401. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_cli_team.py +0 -0
  402. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_everyday_loop.py +0 -0
  403. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_integrity_enforce.py +0 -0
  404. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_property_parsers.py +0 -0
  405. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_run.py +0 -0
  406. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_tap_signing.py +0 -0
  407. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/functional/test_workspace_scope.py +0 -0
  408. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/README.md +0 -0
  409. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  410. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  411. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  412. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  413. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  414. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  415. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  416. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  417. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  418. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  419. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  420. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  421. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  422. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  423. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  424. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  425. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  426. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  427. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  428. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  429. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/fuzz_frontmatter.py +0 -0
  430. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/fuzz/fuzz_registry.py +0 -0
  431. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/make_fixture.py +0 -0
  432. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/perf/test_benchmarks.py +0 -0
  433. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/smoke.sh +0 -0
  434. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_a11y_check.py +0 -0
  435. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_adapters.py +0 -0
  436. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_adapters_multi.py +0 -0
  437. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_adapters_runner.py +0 -0
  438. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_agents.py +0 -0
  439. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_ai.py +0 -0
  440. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_capabilities.py +0 -0
  441. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_catalog.py +0 -0
  442. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_check_anchors.py +0 -0
  443. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_check_licenses.py +0 -0
  444. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_claude_settings.py +0 -0
  445. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_cliparse.py +0 -0
  446. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_command_reference_fresh.py +0 -0
  447. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_community_health_files.py +0 -0
  448. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_config.py +0 -0
  449. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_dense.py +0 -0
  450. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_dense_fallback.py +0 -0
  451. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_dependabot_config.py +0 -0
  452. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_docs_pages_linked.py +0 -0
  453. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_docsite_chrome.py +0 -0
  454. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_ed25519.py +0 -0
  455. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_embed.py +0 -0
  456. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_errors_and_cli_table.py +0 -0
  457. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_eval_stats_summary.py +0 -0
  458. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_faithfulness.py +0 -0
  459. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_frontmatter.py +0 -0
  460. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_fuzz_targets.py +0 -0
  461. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_gitleaks_config.py +0 -0
  462. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_gitutil.py +0 -0
  463. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_imperative.py +0 -0
  464. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_import_budget.py +0 -0
  465. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_injectscan.py +0 -0
  466. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_integrity.py +0 -0
  467. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_journal.py +0 -0
  468. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_lockfile.py +0 -0
  469. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_logs.py +0 -0
  470. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_marketing_counts.py +0 -0
  471. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mcp.py +0 -0
  472. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mcpdecl.py +0 -0
  473. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_minisign.py +0 -0
  474. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mutation_hardening.py +0 -0
  475. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mutation_shards.py +0 -0
  476. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_mutmut_source_paths.py +0 -0
  477. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_nethttp.py +0 -0
  478. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_output.py +0 -0
  479. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_paths.py +0 -0
  480. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_perf_gate.py +0 -0
  481. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_pkg_confusions.py +0 -0
  482. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_pkg_injection.py +0 -0
  483. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_pkg_secrets.py +0 -0
  484. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_policy.py +0 -0
  485. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_post_deploy_smoke.py +0 -0
  486. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_projectlock.py +0 -0
  487. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_provenance.py +0 -0
  488. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_rag.py +0 -0
  489. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_registries_fresh.py +0 -0
  490. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_registry.py +0 -0
  491. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_release_preflight.py +0 -0
  492. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_required_checks.py +0 -0
  493. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_resolve.py +0 -0
  494. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_roadmap_fresh.py +0 -0
  495. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_rules.py +0 -0
  496. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_scopes.py +0 -0
  497. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_secretscan.py +0 -0
  498. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_selfupdate.py +0 -0
  499. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_serve.py +0 -0
  500. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_spin.py +0 -0
  501. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_stackprobe.py +0 -0
  502. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_staleness.py +0 -0
  503. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_store.py +0 -0
  504. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_token_parity.py +0 -0
  505. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_trustaudit.py +0 -0
  506. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_typosquat.py +0 -0
  507. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_updatediff.py +0 -0
  508. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_util.py +0 -0
  509. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_version.py +0 -0
  510. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_workflow_timeouts.py +0 -0
  511. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/unit/test_workflows.py +0 -0
  512. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/visual/a11y_check.mjs +0 -0
  513. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/visual/console_check.mjs +0 -0
  514. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/visual/package.json +0 -0
  515. {boost_skill_cli-1.0.275 → boost_skill_cli-1.0.277}/tests/visual/visual_check.mjs +0 -0
@@ -61,7 +61,8 @@ lint:
61
61
  $(VENV)/bin/interrogate boost_cli/core
62
62
  $(VENV)/bin/refurb boost_cli
63
63
  $(VENV)/bin/codespell boost_cli docs README.md
64
- @command -v actionlint >/dev/null 2>&1 && actionlint || echo "actionlint not on PATH — skipping (CI enforces it)"
64
+ @if command -v actionlint >/dev/null 2>&1; then actionlint; \
65
+ else echo "actionlint not on PATH — skipping (CI enforces it)"; fi
65
66
  $(PY) scripts/build_registries.py --check
66
67
  $(PY) scripts/build_roadmap.py --check
67
68
  $(PY) scripts/build_command_reference.py --check
@@ -140,7 +141,8 @@ bench:
140
141
  # part of `make check`; degrades cleanly (prints a skip message, exits 0) when
141
142
  # hyperfine isn't installed (`brew install hyperfine`).
142
143
  bench-cli:
143
- @command -v hyperfine >/dev/null 2>&1 && bash scripts/bench_cli.sh || echo "hyperfine not on PATH — install via 'brew install hyperfine', skipping"
144
+ @if command -v hyperfine >/dev/null 2>&1; then bash scripts/bench_cli.sh; \
145
+ else echo "hyperfine not on PATH — install via 'brew install hyperfine', skipping"; fi
144
146
 
145
147
  # Opt-in coverage-guided fuzzing of the hand-rolled parsers (atheris/libFuzzer).
146
148
  # Not part of `make check` — a fuzzer is a search, not a pass/fail gate; the
@@ -164,7 +166,8 @@ fuzz:
164
166
  BOOST_SITE ?= https://jonnyeclectic.github.io/boost/
165
167
  post-deploy:
166
168
  $(PY) scripts/post_deploy_smoke.py --base-url "$(BOOST_SITE)" -v
167
- @command -v node >/dev/null 2>&1 && BOOST_SITE="$(BOOST_SITE)" node tests/visual/console_check.mjs || echo "node not on PATH — skipping the console check (CI runs it)"
169
+ @if command -v node >/dev/null 2>&1; then BOOST_SITE="$(BOOST_SITE)" node tests/visual/console_check.mjs; \
170
+ else echo "node not on PATH — skipping the console check (CI runs it)"; fi
168
171
 
169
172
  # regenerate generated artifacts from their source (registries + roadmap boards)
170
173
  generate:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.275
3
+ Version: 1.0.277
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.275'
22
- __version_tuple__ = version_tuple = (1, 0, 275)
21
+ __version__ = version = '1.0.277'
22
+ __version_tuple__ = version_tuple = (1, 0, 277)
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.275
3
+ Version: 1.0.277
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -181,6 +181,7 @@ docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md
181
181
  docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md
182
182
  docs/roadmap/items/crash-listing-branch-untested.md
183
183
  docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md
184
+ docs/roadmap/items/demo-cannot-open-its-own-pr.md
184
185
  docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md
185
186
  docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md
186
187
  docs/roadmap/items/dependabot-missing-pip-ecosystem.md
@@ -225,6 +226,7 @@ docs/roadmap/items/log-timestamps-mislabeled-utc.md
225
226
  docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md
226
227
  docs/roadmap/items/main-has-no-branch-protection.md
227
228
  docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md
229
+ docs/roadmap/items/make-lint-masks-actionlint-failures.md
228
230
  docs/roadmap/items/make-the-roadmaps-discoverable.md
229
231
  docs/roadmap/items/markdown-consistency-markdownlint-cli2.md
230
232
  docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md
@@ -236,6 +238,7 @@ docs/roadmap/items/mcp-search-before-reinventing.md
236
238
  docs/roadmap/items/mcp-startup-self-harden-fork-safety.md
237
239
  docs/roadmap/items/memoize-config-load-in-process.md
238
240
  docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md
241
+ docs/roadmap/items/merged-loop-branches-are-never-pruned.md
239
242
  docs/roadmap/items/modernization-smells-refurb-pyupgrade.md
240
243
  docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md
241
244
  docs/roadmap/items/mutation-hardening-core-frontmatter-py.md
@@ -270,6 +273,7 @@ docs/roadmap/items/ranx-significance-monitor.md
270
273
  docs/roadmap/items/reconcile-the-theme-drift.md
271
274
  docs/roadmap/items/refresh-the-marketing-surface.md
272
275
  docs/roadmap/items/rel-time-tests-race-the-wall-clock.md
276
+ docs/roadmap/items/release-verifies-the-wrong-commit.md
273
277
  docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md
274
278
  docs/roadmap/items/required-checks-config-drift.md
275
279
  docs/roadmap/items/retrieval-quality-eval-harness.md
@@ -0,0 +1,56 @@
1
+ ---
2
+ id: demo-cannot-open-its-own-pr
3
+ board: code
4
+ section: pipeline
5
+ status: planned
6
+ category: CI reporting
7
+ complexity: S
8
+ impact: Med
9
+ wow: 4
10
+ note: a repo setting blocks it — no edit to demo.yml can fix this one
11
+ order: 65
12
+ owner:
13
+ pr:
14
+ title: <code>demo.yml</code> still fails on every push &mdash; and the fix is not in the workflow
15
+ ---
16
+ <code>demo-gif-workflow-has-never-succeeded</code> (shipped, PR&nbsp;294) fixed the recorder:
17
+ <code>charmbracelet/vhs-action</code>'s broken ffmpeg installer was replaced with apt plus
18
+ ttyd/vhs pinned by release-asset id. That worked. The recording step now succeeds on both event
19
+ paths. <b>The workflow still fails on every push to <code>main</code></b> &mdash; observed
20
+ 2026-07-28 at 20:56, 20:04 and 09:27, and it is the only failing workflow in the last 60 runs.
21
+
22
+ The failure moved one step later, to <code>open a PR if the recording changed</code>. The run
23
+ annotation gives it verbatim:
24
+
25
+ <code>GitHub Actions is not permitted to create or approve pull requests.</code>
26
+
27
+ <b>Nothing in <code>demo.yml</code> is wrong, so nothing in <code>demo.yml</code> will fix it.</b>
28
+ The job already declares <code>contents: write</code> and <code>pull-requests: write</code>,
29
+ which is exactly what <code>peter-evans/create-pull-request</code> documents as required. The
30
+ workflow uses no secrets. <code>persist-credentials: false</code> on the checkout is correct and
31
+ is the repo-wide convention across all 31 checkout steps &mdash; the action supplies its own git
32
+ auth and explicitly unsets any persisted credential. Every one of those is a plausible-looking
33
+ false lead. The actual blocker is a <b>repository setting</b>: Actions&nbsp;&rarr;&nbsp;General
34
+ &nbsp;&rarr;&nbsp;Workflow permissions &nbsp;&rarr;&nbsp; "Allow GitHub Actions to create and
35
+ approve pull requests", which the API reports as
36
+ <code>can_approve_pull_request_reviews: false</code>. This is the same shape as
37
+ <code>sbom.yml</code>: a workflow that is correct in the file and inert in reality.
38
+
39
+ Deciding it is a real decision, not a formality. Turning that toggle on grants <em>every</em>
40
+ workflow in the repo the ability to open pull requests, which is a genuine widening of what a
41
+ compromised action can do. The alternative is to accept that this step cannot work and change
42
+ what the push path does &mdash; upload the GIF as an artifact on both paths, as the pull-request
43
+ path already does, and drop the PR-opening step.
44
+
45
+ <b>A second, independent defect in the same file.</b> Its concurrency group is
46
+ <code>group: demo</code>, not ref-scoped. Every other per-ref workflow scopes it &mdash;
47
+ <code>sonarcloud-${{ github.ref }}</code>, <code>fuzz-${{ github.ref }}</code>,
48
+ <code>eval-stats-${{ github.ref }}</code>, <code>eval-explain-${{ github.ref }}</code>; only the
49
+ deliberately-singleton <code>release</code> and <code>post-deploy</code> are global. With
50
+ <code>cancel-in-progress: true</code>, a pull-request run and a <code>main</code> run therefore
51
+ cancel each other, which is where demo's <code>cancelled</code> runs come from. Fix is
52
+ <code>group: demo-${{ github.ref }}</code> regardless of what is decided about the toggle.
53
+
54
+ Worth reconciling while here: the tree disagrees with itself on the history.
55
+ <code>demo-gif-workflow-has-never-succeeded</code> says "3 runs, 3 failures", while
56
+ <code>demo.yml</code> and <code>ci-failure-issue.yml</code> both say six of six.
@@ -44,3 +44,11 @@ with <code>lock_toolchain.py</code> instead. Whatever is chosen, it needs a guar
44
44
  <i>loses</i> a platform-markered pin should fail its own gate rather than fail three Windows jobs
45
45
  two steps later, because the current failure names the install step and never mentions the missing
46
46
  package. Related: [[dependabot-root-pip-entry-duplicates-requirements]].
47
+ <b>Progress:</b> <code>lock_toolchain.py</code> now takes <code>-P/--upgrade-package</code>, so a
48
+ Dependabot bump can be <i>reproduced</i> rather than merged — take the version it proposes,
49
+ re-resolve that one package universally, and every other pin (markers included) stays as committed.
50
+ Both open bumps were landed that way: <code>hypothesis</code> 6.161.6 to 6.163.0 and
51
+ <code>twine</code> 6.2.0 to 7.0.0, four changed lines across five locks, with
52
+ <code>colorama</code> and <code>pywin32-ctypes</code> intact. What remains is the config half —
53
+ stopping Dependabot raising these at all — which is deliberately still open because its effect is
54
+ only observable on the next scheduled run.
@@ -0,0 +1,61 @@
1
+ ---
2
+ id: make-lint-masks-actionlint-failures
3
+ board: code
4
+ section: dx
5
+ status: shipped
6
+ category: Testing · Bug
7
+ complexity: S
8
+ impact: Med
9
+ wow: 4
10
+ note: fixed — a failing actionlint now fails make, in all three targets
11
+ order: 60
12
+ owner:
13
+ pr:
14
+ title: <code>make lint</code> reports success when <code>actionlint</code> fails &mdash; and says it wasn't installed
15
+ ---
16
+ <code>Makefile:64</code> guards the workflow linter like this:
17
+
18
+ <code>@command -v actionlint &gt;/dev/null 2&gt;&amp;1 &amp;&amp; actionlint || echo "actionlint not on PATH &mdash; skipping (CI enforces it)"</code>
19
+
20
+ Because <code>||</code> binds to the whole <code>&amp;&amp;</code> chain, the fallback fires in
21
+ <b>both</b> failure modes &mdash; actionlint absent, <em>and</em> actionlint present and reporting
22
+ findings. Reproduced with a stub that exits 1:
23
+
24
+ <code>actionlint: FAKE ERROR</code><br>
25
+ <code>actionlint not on PATH &mdash; skipping (CI enforces it)</code><br>
26
+ <code>make exit=0</code>
27
+
28
+ So a real workflow-lint failure is swallowed, and the message asserts something false &mdash; that
29
+ the tool is not installed, when it is installed and just failed. <b><code>make lint</code> and
30
+ therefore <code>make check</code> can never fail on actionlint.</b> CLAUDE.md calls
31
+ <code>make check</code> "the one gate that matters" and tells every agent to run it before calling
32
+ a change done; for this tool it returns green unconditionally, and the developer who reads the
33
+ output is told the opposite of what happened.
34
+
35
+ The local-versus-CI gap is wider than this one line. CI's required <code>lint</code> job runs
36
+ three workflow/security tools that <code>make lint</code> has no equivalent for at all:
37
+ <b>actionlint</b> (present but unfailable), <b>zizmor</b> and <b>gitleaks</b> (absent from the
38
+ Makefile entirely). No CI job invokes <code>make lint</code>, so the two lists are hand-maintained
39
+ duplicates with nothing checking they agree &mdash; which is how they drifted.
40
+
41
+ Minimal fix is to stop discarding the exit status:
42
+
43
+ <code>@if command -v actionlint &gt;/dev/null 2&gt;&amp;1; then actionlint; else echo "actionlint not on PATH &mdash; skipping (CI enforces it)"; fi</code>
44
+
45
+ The stricter option is to install actionlint in <code>make venv</code> and let absence itself
46
+ fail, so <code>make check</code> cannot report success while skipping a required gate. The same
47
+ masking idiom appears at <code>Makefile:143</code> (hyperfine) and <code>Makefile:167</code>
48
+ (node); neither is reached by <code>check</code>, so they are cosmetic by comparison, but they are
49
+ the same bug. Incidental drift found alongside: <code>CLAUDE.md</code> describes the lint recipe
50
+ as "18 commands" and it is 19.
51
+
52
+ <b>Shipped.</b> All three occurrences of the idiom were rewritten to an
53
+ <code>if/then/else</code> so the tool's exit status is no longer discarded &mdash;
54
+ <code>Makefile:64</code> (actionlint, inside <code>lint</code> and therefore inside
55
+ <code>check</code>), plus <code>bench-cli</code> and <code>post-deploy</code>, which had the same
56
+ bug without being reachable from the gate. Verified against the patched recipe itself, in all
57
+ three states: a <b>failing</b> actionlint now fails <code>make</code> (exit 2) instead of printing
58
+ "not on PATH" and returning 0; a <b>passing</b> one still exits 0; an <b>absent</b> one still exits
59
+ 0 with the skip message intact. The wider local-versus-CI gap this card also names &mdash;
60
+ <code>zizmor</code> and <code>gitleaks</code> run only in CI and are absent from the Makefile
61
+ &mdash; is untouched and still open.
@@ -0,0 +1,47 @@
1
+ ---
2
+ id: merged-loop-branches-are-never-pruned
3
+ board: code
4
+ section: pipeline
5
+ status: planned
6
+ category: Hygiene · DX
7
+ complexity: S
8
+ impact: Low
9
+ wow: 2
10
+ note: 68 of 70 loop/* branches have a merged PR; one setting fixes it
11
+ order: 66
12
+ owner:
13
+ pr:
14
+ title: 68 of the repo's 77 branches are merged <code>loop/*</code> branches nobody deletes
15
+ ---
16
+ The repository carries <b>77 branches, 70 of them <code>loop/*</code></b>. Classifying each by the
17
+ state of its pull request: <b>68 have a merged PR</b> and are safe to delete, <b>1</b> has an open
18
+ PR (<code>loop/dependabot-findings</code>), and 1 has no PR on record. The default branch list is
19
+ almost entirely finished work.
20
+
21
+ <b>The obvious measurement is wrong here, which is worth recording.</b> Testing "is it merged?"
22
+ with <code>compare(main...branch).ahead_by == 0</code> reports <b>0 of 70</b> as merged &mdash;
23
+ because this repo squash-merges, and a squash leaves the branch's original commits outside
24
+ <code>main</code>'s history forever. Every merged branch looks permanently ahead. The state has to
25
+ come from the pull request, not from commit reachability.
26
+
27
+ The cause is a single repository setting: <code>delete_branch_on_merge</code> is <b>false</b>, so
28
+ nothing removes a head branch when its PR merges. No workflow prunes them either &mdash; none of
29
+ the 25 workflow files triggers on <code>create</code>/<code>delete</code> or touches
30
+ <code>loop/*</code>, and no <code>scripts/</code> entry or Makefile target does branch cleanup.
31
+ The one branch-deletion automation in the tree is <code>demo.yml</code>'s
32
+ <code>delete-branch: true</code>, which is <code>create-pull-request</code> tidying its own
33
+ <code>bot/demo-gif</code> branch and has nothing to do with <code>loop/*</code>. No documentation
34
+ asks anyone to clean up either: <code>CONTRIBUTING.md</code>, <code>CLAUDE.md</code> and
35
+ <code>.claude/commands/roadmap-loop.md</code> all describe branching and squash-merging, and none
36
+ of the three mentions deleting the branch afterwards.
37
+
38
+ <b>Not a claim that branches are never deleted.</b> The item files name <b>144 distinct</b>
39
+ <code>owner: loop/&lt;topic&gt;</code> values against 70 surviving branches, so roughly 98 have
40
+ gone at some point &mdash; by hand, or by topic reuse. The accurate statement is narrower:
41
+ nothing in the repo <em>causes</em> cleanup, so merged branches accumulate until someone does it
42
+ manually.
43
+
44
+ Low impact and near-zero risk to fix &mdash; flip <code>delete_branch_on_merge</code> to true and
45
+ the backlog can be pruned by listing merged PR head refs. The reason it is worth doing at all is
46
+ that CLAUDE.md tells every agent to run <code>git worktree list</code> and inspect branch state
47
+ before touching a tree, and 68 stale entries make that check noisier for every concurrent loop.
@@ -0,0 +1,57 @@
1
+ ---
2
+ id: release-verifies-the-wrong-commit
3
+ board: code
4
+ section: pipeline
5
+ status: planned
6
+ category: Release safety
7
+ complexity: S
8
+ impact: High
9
+ wow: 4
10
+ note: 2 of 18 required contexts are re-checked against the sha actually shipped
11
+ order: 64
12
+ owner:
13
+ pr:
14
+ title: The release verifies one commit and ships another
15
+ ---
16
+ <code>publish.yml</code> fires on <code>workflow_run</code> when <code>ci</code> completes, gates
17
+ on that run's <code>conclusion == 'success'</code> (plus <code>event == 'push'</code> and
18
+ <code>head_repository == this repo</code>), and then checks out <code>ref: main</code>. Those are
19
+ not the same commit. <b>Observed 2026-07-28:</b> <code>ci</code> for <code>ecfe38bc</code>
20
+ completed at 20:19:05Z; the release run was created at 20:19:07Z; it tagged and shipped
21
+ <code>c1727bac</code> as <b>v1.0.271</b> &mdash; while <code>c1727bac</code>'s own
22
+ <code>ci</code>, started 20:18:40Z, was still <code>in_progress</code>. One commit's green
23
+ verdict authorised a different commit's release.
24
+
25
+ <b>Most of this is already mitigated, and the card should not be read as "untested code ships".</b>
26
+ A strict "require branches to be up to date" policy means the shipped commit was green as a pull
27
+ request before it could merge, so its <em>tree</em> was gated. And
28
+ <code>release_preflight.py</code> is already pointed at the right commit &mdash;
29
+ <code>--sha "$(git rev-parse HEAD)"</code>, with an explicit comment that this is "not the trigger
30
+ sha". It polls each required workflow for that exact sha and fails closed on red, cancelled,
31
+ skipped, never-ran or still-running-at-deadline. The machinery is correct.
32
+
33
+ <b>Its coverage is the gap.</b> <code>.github/required-checks.txt</code> lists <b>18</b> required
34
+ contexts. <code>publish.yml</code> passes preflight exactly two of them &mdash;
35
+ <code>--require pip-audit.yml</code> and <code>--require package-metadata.yml</code>. The other
36
+ <b>16 are never re-checked against the commit being shipped</b>, including all 14 that come from
37
+ <code>ci.yml</code> and <code>codeql-analyze</code>. The clearest evidence this is an oversight
38
+ rather than a decision is in-tree: <code>release_preflight.py</code>'s own docstring says it waits
39
+ for <em>every</em> required workflow for the exact commit being released, and the caller hands it
40
+ two.
41
+
42
+ <b>A required context that can never report on <code>main</code> at all.</b> While checking the
43
+ other 16: <code>osv-scanner.yml</code> declares only <code>pull_request</code> and
44
+ <code>merge_group</code> triggers &mdash; no <code>push</code>. So <code>scan-pr / osv-scan</code>
45
+ is green as a PR gate and produces <em>nothing</em> for any commit on <code>main</code>, race or
46
+ no race. Adding it to preflight without first giving that workflow a
47
+ <code>push: branches: [main]</code> trigger would fail the release closed every time.
48
+
49
+ The fix is not to change the checkout ref. Pinning to
50
+ <code>github.event.workflow_run.head_sha</code> would build the older commit while release-drafter
51
+ still tags the default branch's head &mdash; artifact and tag would disagree. The lower-risk
52
+ change is to widen preflight's <code>--require</code> set to the contexts that actually run on
53
+ <code>main</code>, and optionally fail the job when <code>git rev-parse HEAD</code> differs from
54
+ the triggering run's <code>head_sha</code>. This is the third defect found in the same few lines
55
+ &mdash; see <code>publish-trigger-was-reachable-from-a-fork</code> (who can fire it) and
56
+ <code>publish-gate-ignores-pip-audit-and-metadata</code> (which gates are consulted); this one is
57
+ <em>which commit</em> they were consulted about.
@@ -2,12 +2,12 @@
2
2
  id: zizmor-pin-is-a-yanked-release
3
3
  board: code
4
4
  section: pipeline
5
- status: planned
5
+ status: shipped
6
6
  category: Security · CI/CD
7
7
  complexity: S
8
8
  impact: Med
9
9
  wow: 4
10
- note: the only yanked release of 66 — and the required lint job pins exactly it
10
+ note: already fixed by a4450f76 twelve hours before this card was filed
11
11
  order: 63
12
12
  owner:
13
13
  pr:
@@ -34,3 +34,19 @@ And sweep the other exact pins for yanks: nothing currently checks for this. <co
34
34
  catches CVEs in the resolved dependency closure, but a yanked <em>pinned tool</em> is neither a
35
35
  CVE in the closure nor a manifest diff, so <code>osv-scanner</code> does not see it either. This
36
36
  was found by accident, while installing zizmor locally to verify an unrelated change.
37
+
38
+ <b>Already shipped when this card was written &mdash; the card was filed stale, and that is the
39
+ more useful finding.</b> Commit <code>a4450f76</code>, "ci(security): zizmor 1.27.0 is yanked
40
+ &mdash; take 1.28.0", landed at <b>08:07Z</b>; this card was filed at <b>20:18Z</b>, twelve hours
41
+ later, against a base that already carried <code>1.28.0</code>. The yank was observed correctly
42
+ against a tree extracted earlier in the day and then never re-checked against the branch point.
43
+ <code>ci.yml</code> now runs <code>pipx run zizmor==1.28.0</code>.
44
+
45
+ Two things worth keeping from it. The predicted risk did not materialise: <code>zizmor
46
+ 1.28.0</code> runs clean over all 25 workflows (exit 0, "no findings to report"), and the
47
+ line-anchored ignores in <code>.github/zizmor.yml</code> &mdash; including
48
+ <code>sbom.yml:29</code> &mdash; all still resolve, so the bump needed no config change. And the
49
+ gap the card names remains real and unclosed: <b>nothing checks whether an exact pin has been
50
+ yanked</b>. <code>pip-audit</code> scans the resolved dependency closure and
51
+ <code>osv-scanner</code> diffs the manifest; a yanked <em>pinned tool</em> is neither, so this was
52
+ caught by a human noticing a pip warning, twice, by luck.