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