boost-skill-cli 1.0.284__tar.gz → 1.0.286__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 (536) hide show
  1. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.gitignore +8 -2
  2. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/CLAUDE.md +1 -1
  3. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/MANIFEST.in +3 -0
  4. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/Makefile +11 -1
  5. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/PKG-INFO +1 -1
  6. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/_version.py +2 -2
  7. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  8. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_skill_cli.egg-info/SOURCES.txt +2 -0
  9. boost_skill_cli-1.0.286/docs/roadmap/items/actionlint-skips-shellcheck-silently.md +58 -0
  10. boost_skill_cli-1.0.286/docs/roadmap/items/scorecard-findings-triage.md +74 -0
  11. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap.html +103 -13
  12. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/lint-tools.in +10 -0
  13. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/lint-tools.txt +7 -0
  14. boost_skill_cli-1.0.286/tests/visual/package-lock.json +933 -0
  15. boost_skill_cli-1.0.284/docs/roadmap/items/scorecard-findings-triage.md +0 -38
  16. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.gitattributes +0 -0
  17. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.gitleaks.toml +0 -0
  18. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.htmlvalidate.json +0 -0
  19. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.lighthouserc.json +0 -0
  20. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.lycheeignore +0 -0
  21. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.markdownlint-cli2.jsonc +0 -0
  22. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.pre-commit-config.yaml +0 -0
  23. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.stylelintrc.json +0 -0
  24. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.vale/styles/boost/Terminology.yml +0 -0
  25. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  26. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/.vale.ini +0 -0
  27. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/CODE_OF_CONDUCT.md +0 -0
  28. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/CONTRIBUTING.md +0 -0
  29. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/LICENSE +0 -0
  30. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/README.md +0 -0
  31. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/SECURITY.md +0 -0
  32. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost +0 -0
  33. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/__init__.py +0 -0
  34. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/__main__.py +0 -0
  35. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/cli.py +0 -0
  36. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/cliparse.py +0 -0
  37. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/__init__.py +0 -0
  38. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/_common.py +0 -0
  39. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/bmad.py +0 -0
  40. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/configuration.py +0 -0
  41. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/discovery.py +0 -0
  42. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/hooks.py +0 -0
  43. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/info.py +0 -0
  44. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/intelligence.py +0 -0
  45. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/pkg.py +0 -0
  46. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/quality.py +0 -0
  47. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/run.py +0 -0
  48. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/safety.py +0 -0
  49. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/taps.py +0 -0
  50. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/commands/team.py +0 -0
  51. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/__init__.py +0 -0
  52. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/adapters.py +0 -0
  53. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/agents.py +0 -0
  54. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/ai.py +0 -0
  55. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/capabilities.py +0 -0
  56. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/catalog.py +0 -0
  57. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/claude_settings.py +0 -0
  58. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/config.py +0 -0
  59. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/dense.py +0 -0
  60. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/ed25519.py +0 -0
  61. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/embed.py +0 -0
  62. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/faithfulness.py +0 -0
  63. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/frontmatter.py +0 -0
  64. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/gitutil.py +0 -0
  65. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/imperative.py +0 -0
  66. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/injectscan.py +0 -0
  67. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/integrity.py +0 -0
  68. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/journal.py +0 -0
  69. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/lockfile.py +0 -0
  70. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/logs.py +0 -0
  71. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/mcp.py +0 -0
  72. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/mcpdecl.py +0 -0
  73. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/minisign.py +0 -0
  74. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/nethttp.py +0 -0
  75. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/output.py +0 -0
  76. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/paths.py +0 -0
  77. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/policy.py +0 -0
  78. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/projectlock.py +0 -0
  79. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/provenance.py +0 -0
  80. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/rag.py +0 -0
  81. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/registry.py +0 -0
  82. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/resolve.py +0 -0
  83. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/rules.py +0 -0
  84. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/scopes.py +0 -0
  85. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/secretscan.py +0 -0
  86. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/selfupdate.py +0 -0
  87. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/serve.py +0 -0
  88. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/stackprobe.py +0 -0
  89. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/staleness.py +0 -0
  90. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/store.py +0 -0
  91. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/trustaudit.py +0 -0
  92. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/typosquat.py +0 -0
  93. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/updatediff.py +0 -0
  94. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/util.py +0 -0
  95. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/core/workflows.py +0 -0
  96. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/data/registries.json +0 -0
  97. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/errors.py +0 -0
  98. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_cli/spin.py +0 -0
  99. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  100. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  101. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_skill_cli.egg-info/requires.txt +0 -0
  102. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/boost_skill_cli.egg-info/top_level.txt +0 -0
  103. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/codecov.yml +0 -0
  104. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/.claude/settings.local.json +0 -0
  105. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/DEBUGGING.md +0 -0
  106. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/adapters.html +0 -0
  107. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/gifs/distill.gif +0 -0
  108. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/gifs/doctor.gif +0 -0
  109. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/gifs/explain.gif +0 -0
  110. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/gifs/hooks.gif +0 -0
  111. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/gifs/install.gif +0 -0
  112. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/gifs/pulse.gif +0 -0
  113. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/gifs/search.gif +0 -0
  114. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/gifs/tap.gif +0 -0
  115. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/tapes/distill.tape +0 -0
  116. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/tapes/doctor.tape +0 -0
  117. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/tapes/explain.tape +0 -0
  118. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/tapes/hooks.tape +0 -0
  119. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/tapes/install.tape +0 -0
  120. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/tapes/pulse.tape +0 -0
  121. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/tapes/search.tape +0 -0
  122. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel/tapes/tap.tape +0 -0
  123. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/carousel.html +0 -0
  124. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/commands.html +0 -0
  125. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/demo.gif +0 -0
  126. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/demo.tape +0 -0
  127. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/design-roadmap.html +0 -0
  128. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/eval.html +0 -0
  129. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/index.html +0 -0
  130. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/mcp-hub.html +0 -0
  131. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/rag-architecture.md +0 -0
  132. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D01.md +0 -0
  133. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D02.md +0 -0
  134. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D03.md +0 -0
  135. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D04.md +0 -0
  136. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D05.md +0 -0
  137. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D06.md +0 -0
  138. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D07.md +0 -0
  139. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D08.md +0 -0
  140. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D09.md +0 -0
  141. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D10.md +0 -0
  142. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D11.md +0 -0
  143. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D12.md +0 -0
  144. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D13.md +0 -0
  145. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D14.md +0 -0
  146. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D15.md +0 -0
  147. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D16.md +0 -0
  148. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D17.md +0 -0
  149. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D18.md +0 -0
  150. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D19.md +0 -0
  151. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D20.md +0 -0
  152. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D21.md +0 -0
  153. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D22.md +0 -0
  154. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D23.md +0 -0
  155. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D24.md +0 -0
  156. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D25.md +0 -0
  157. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/BOOST-D26.md +0 -0
  158. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  159. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md +0 -0
  160. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/ai-bridge-silent-failure-logging.md +0 -0
  161. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +0 -0
  162. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  163. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  164. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  165. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  166. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  167. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  168. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  169. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  170. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  171. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  172. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/ci-job-timeout-minutes.md +0 -0
  173. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/ci-summary-step-fails-itself.md +0 -0
  174. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/ci-time-is-now-runner-queueing.md +0 -0
  175. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  176. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/code-scanning-rule-can-be-restored.md +0 -0
  177. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/codeql-job-rename-stranded-merge-protection.md +0 -0
  178. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/command-carousel-page.md +0 -0
  179. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  180. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  181. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  182. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  183. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  184. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/crash-listing-branch-untested.md +0 -0
  185. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  186. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/demo-cannot-open-its-own-pr.md +0 -0
  187. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/demo-gif-workflow-has-never-succeeded.md +0 -0
  188. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +0 -0
  189. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +0 -0
  190. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/dependabot-regeneration-drops-platform-pins.md +0 -0
  191. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/dependabot-root-pip-entry-duplicates-requirements.md +0 -0
  192. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  193. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  194. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  195. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  196. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  197. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  198. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  199. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  200. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  201. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  202. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  203. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  204. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  205. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  206. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/github-community-health-files.md +0 -0
  207. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  208. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  209. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  210. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  211. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/install-docs-never-mentioned-upgrading.md +0 -0
  212. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +0 -0
  213. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  214. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  215. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  216. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  217. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  218. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +0 -0
  219. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  220. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/license-compliance-scanning.md +0 -0
  221. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  222. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +0 -0
  223. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  224. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  225. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/lock-invariant-cannot-parse-extras-pins.md +0 -0
  226. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  227. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  228. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  229. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/main-has-no-branch-protection.md +0 -0
  230. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/main-ruleset-ref-pattern-has-literal-quotes.md +0 -0
  231. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/make-lint-masks-actionlint-failures.md +0 -0
  232. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  233. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  234. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/markdownlint-lints-the-fuzz-corpus.md +0 -0
  235. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  236. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mcp-check-skills-before-starting-a-task.md +0 -0
  237. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  238. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  239. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  240. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  241. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  242. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  243. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/merge-queue-would-deadlock-most-required-checks.md +0 -0
  244. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/merged-loop-branches-are-never-pruned.md +0 -0
  245. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  246. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mutation-gate-was-the-whole-critical-path.md +0 -0
  247. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  248. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  249. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  250. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mutation-shard-floor-is-one-file.md +0 -0
  251. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/mypy-strict-mode-for-commands.md +0 -0
  252. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +0 -0
  253. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +0 -0
  254. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  255. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/one-commit-can-cut-two-releases.md +0 -0
  256. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  257. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  258. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  259. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +0 -0
  260. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  261. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  262. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/post-deploy-always-defeated-by-skipped-setup.md +0 -0
  263. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  264. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  265. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  266. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  267. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  268. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  269. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  270. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  271. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  272. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +0 -0
  273. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/publish-trigger-was-reachable-from-a-fork.md +0 -0
  274. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +0 -0
  275. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  276. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  277. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  278. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  279. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +0 -0
  280. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/release-verifies-the-wrong-commit.md +0 -0
  281. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/required-checks-can-declare-a-check-that-deadlocks-prs.md +0 -0
  282. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/required-checks-config-drift.md +0 -0
  283. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  284. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  285. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/roadmap-html-goes-stale-on-every-rebase.md +0 -0
  286. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  287. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/ruff-016-widens-the-default-rule-set.md +0 -0
  288. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  289. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  290. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  291. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  292. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/sbom-declares-the-wrong-version.md +0 -0
  293. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  294. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/sbom-release-event-never-fires.md +0 -0
  295. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  296. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  297. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  298. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  299. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  300. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +0 -0
  301. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/serve-py-traversal-guards-untested.md +0 -0
  302. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  303. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  304. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  305. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  306. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  307. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  308. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/structured-json-log-output-mode.md +0 -0
  309. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  310. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  311. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +0 -0
  312. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/sync-relinks-into-every-agent-ignoring-scope.md +0 -0
  313. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  314. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  315. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  316. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  317. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  318. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +0 -0
  319. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  320. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  321. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  322. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/update-reinstall-widens-agent-scope.md +0 -0
  323. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  324. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  325. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  326. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/wire-bdd-suite-into-ci.md +0 -0
  327. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  328. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  329. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  330. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/workspace-scope-install.md +0 -0
  331. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/docs/roadmap/items/zizmor-pin-is-a-yanked-release.md +0 -0
  332. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/eslint.config.mjs +0 -0
  333. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/evals/README.md +0 -0
  334. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/evals/__init__.py +0 -0
  335. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/evals/baseline.json +0 -0
  336. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/evals/faithfulness.py +0 -0
  337. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/evals/golden_set.json +0 -0
  338. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/evals/make_corpus.py +0 -0
  339. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/evals/make_golden.py +0 -0
  340. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/evals/metrics.py +0 -0
  341. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/evals/run_evals.py +0 -0
  342. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/examples/README.md +0 -0
  343. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/examples/adapt-demo.sh +0 -0
  344. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/examples/boost-run-prototype.sh +0 -0
  345. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/index.html +0 -0
  346. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/noxfile.py +0 -0
  347. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/pyproject.toml +0 -0
  348. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/coverage-tools.in +0 -0
  349. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/coverage-tools.txt +0 -0
  350. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/mutation-tools.in +0 -0
  351. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/mutation-tools.txt +0 -0
  352. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/release-tools.in +0 -0
  353. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/release-tools.txt +0 -0
  354. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/test-tools.in +0 -0
  355. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/requirements/test-tools.txt +0 -0
  356. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/a11y_check.py +0 -0
  357. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/bench_cli.sh +0 -0
  358. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/build_command_reference.py +0 -0
  359. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/build_registries.py +0 -0
  360. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/build_roadmap.py +0 -0
  361. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/check_anchors.py +0 -0
  362. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/check_licenses.py +0 -0
  363. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/check_required_checks.py +0 -0
  364. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/ensure_eval_corpus.sh +0 -0
  365. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/eval_explain.py +0 -0
  366. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/eval_gate.py +0 -0
  367. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/eval_recommend.py +0 -0
  368. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/eval_retrieval.py +0 -0
  369. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/eval_stats_summary.py +0 -0
  370. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/import_budget.py +0 -0
  371. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/lock_toolchain.py +0 -0
  372. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/mutation_gate.py +0 -0
  373. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/mutation_shards.py +0 -0
  374. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/mutation_weights.json +0 -0
  375. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/perf_gate.py +0 -0
  376. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/post_deploy_smoke.py +0 -0
  377. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/scripts/release_preflight.py +0 -0
  378. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/setup.cfg +0 -0
  379. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/sonar-project.properties +0 -0
  380. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/style/README.md +0 -0
  381. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/style/boost.css +0 -0
  382. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/style/boost.js +0 -0
  383. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/style/demo.html +0 -0
  384. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/adapt.feature +0 -0
  385. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/browse.feature +0 -0
  386. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/count.feature +0 -0
  387. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/discover.feature +0 -0
  388. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/doctor.feature +0 -0
  389. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/environment.py +0 -0
  390. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/explain.feature +0 -0
  391. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/index.feature +0 -0
  392. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/install.feature +0 -0
  393. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/list.feature +0 -0
  394. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/mcp.feature +0 -0
  395. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/search.feature +0 -0
  396. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/steps/cli_steps.py +0 -0
  397. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/steps/discovery_steps.py +0 -0
  398. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/steps/mcp_steps.py +0 -0
  399. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/bdd/features/steps/quality_steps.py +0 -0
  400. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/conftest.py +0 -0
  401. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/eval/baseline.json +0 -0
  402. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/eval/explain.jsonl +0 -0
  403. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/eval/golden.jsonl +0 -0
  404. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/eval/recommend.jsonl +0 -0
  405. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/eval/taps.txt +0 -0
  406. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_capabilities_policy.py +0 -0
  407. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_adapt.py +0 -0
  408. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_bmad.py +0 -0
  409. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_configuration.py +0 -0
  410. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_discovery.py +0 -0
  411. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_hooks.py +0 -0
  412. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_info.py +0 -0
  413. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_intelligence.py +0 -0
  414. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_pkg.py +0 -0
  415. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_quality.py +0 -0
  416. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_taps.py +0 -0
  417. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_cli_team.py +0 -0
  418. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_everyday_loop.py +0 -0
  419. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_integrity_enforce.py +0 -0
  420. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_property_parsers.py +0 -0
  421. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_run.py +0 -0
  422. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_tap_signing.py +0 -0
  423. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/functional/test_workspace_scope.py +0 -0
  424. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/README.md +0 -0
  425. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  426. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  427. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  428. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  429. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  430. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  431. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  432. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  433. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  434. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  435. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  436. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  437. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  438. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  439. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  440. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  441. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  442. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  443. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  444. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  445. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/fuzz_frontmatter.py +0 -0
  446. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/fuzz/fuzz_registry.py +0 -0
  447. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/make_fixture.py +0 -0
  448. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/perf/test_benchmarks.py +0 -0
  449. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/smoke.sh +0 -0
  450. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_a11y_check.py +0 -0
  451. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_adapters.py +0 -0
  452. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_adapters_multi.py +0 -0
  453. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_adapters_runner.py +0 -0
  454. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_agents.py +0 -0
  455. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_ai.py +0 -0
  456. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_capabilities.py +0 -0
  457. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_catalog.py +0 -0
  458. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_check_anchors.py +0 -0
  459. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_check_licenses.py +0 -0
  460. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_claude_settings.py +0 -0
  461. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_cliparse.py +0 -0
  462. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_codeql_analysis_key.py +0 -0
  463. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_command_reference_fresh.py +0 -0
  464. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_community_health_files.py +0 -0
  465. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_config.py +0 -0
  466. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_dense.py +0 -0
  467. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_dense_fallback.py +0 -0
  468. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_dependabot_config.py +0 -0
  469. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_docs_pages_linked.py +0 -0
  470. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_docsite_chrome.py +0 -0
  471. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_ed25519.py +0 -0
  472. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_embed.py +0 -0
  473. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_errors_and_cli_table.py +0 -0
  474. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_eval_faithfulness.py +0 -0
  475. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_eval_gate.py +0 -0
  476. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_eval_metrics.py +0 -0
  477. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_eval_stats_summary.py +0 -0
  478. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_faithfulness.py +0 -0
  479. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_frontmatter.py +0 -0
  480. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_fuzz_targets.py +0 -0
  481. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_gitleaks_config.py +0 -0
  482. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_gitutil.py +0 -0
  483. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_imperative.py +0 -0
  484. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_import_budget.py +0 -0
  485. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_injectscan.py +0 -0
  486. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_integrity.py +0 -0
  487. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_journal.py +0 -0
  488. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_lockfile.py +0 -0
  489. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_logs.py +0 -0
  490. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_marketing_counts.py +0 -0
  491. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_mcp.py +0 -0
  492. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_mcpdecl.py +0 -0
  493. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_minisign.py +0 -0
  494. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_mutation_hardening.py +0 -0
  495. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_mutation_shards.py +0 -0
  496. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_mutmut_source_paths.py +0 -0
  497. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_nethttp.py +0 -0
  498. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_output.py +0 -0
  499. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_paths.py +0 -0
  500. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_perf_gate.py +0 -0
  501. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_pkg_confusions.py +0 -0
  502. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_pkg_injection.py +0 -0
  503. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_pkg_secrets.py +0 -0
  504. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_policy.py +0 -0
  505. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_post_deploy_smoke.py +0 -0
  506. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_projectlock.py +0 -0
  507. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_provenance.py +0 -0
  508. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_rag.py +0 -0
  509. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_registries_fresh.py +0 -0
  510. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_registry.py +0 -0
  511. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_release_preflight.py +0 -0
  512. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_required_checks.py +0 -0
  513. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_resolve.py +0 -0
  514. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_roadmap_fresh.py +0 -0
  515. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_rules.py +0 -0
  516. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_scopes.py +0 -0
  517. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_secretscan.py +0 -0
  518. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_selfupdate.py +0 -0
  519. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_serve.py +0 -0
  520. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_spin.py +0 -0
  521. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_stackprobe.py +0 -0
  522. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_staleness.py +0 -0
  523. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_store.py +0 -0
  524. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_token_parity.py +0 -0
  525. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_toolchain_lock.py +0 -0
  526. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_trustaudit.py +0 -0
  527. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_typosquat.py +0 -0
  528. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_updatediff.py +0 -0
  529. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_util.py +0 -0
  530. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_version.py +0 -0
  531. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_workflow_timeouts.py +0 -0
  532. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/unit/test_workflows.py +0 -0
  533. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/visual/a11y_check.mjs +0 -0
  534. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/visual/console_check.mjs +0 -0
  535. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/visual/package.json +0 -0
  536. {boost_skill_cli-1.0.284 → boost_skill_cli-1.0.286}/tests/visual/visual_check.mjs +0 -0
@@ -235,6 +235,12 @@ mutants/
235
235
  # dir (see evals/run_evals.py), so only the per-run scores land here; the
236
236
  # committed evals/baseline.json is what regressions are measured against.
237
237
  evals/results.json
238
- tests/visual/node_modules/
239
238
  tests/visual/out/
240
- tests/visual/package-lock.json
239
+
240
+ # Installed npm trees, never the lockfiles that describe them. Both
241
+ # package-lock.json files ARE committed on purpose: package.json pins only the
242
+ # direct dependencies, so without the lock every transitive package resolves
243
+ # fresh at install time. The lock carries an integrity hash for all 181 (root)
244
+ # and 81 (tests/visual) packages, which is what makes `npm ci` reproducible and
245
+ # what OpenSSF Scorecard's Pinned-Dependencies check asks for.
246
+ node_modules/
@@ -11,7 +11,7 @@ make venv # .venv from the hash-pinned requ
11
11
  .venv/bin/pytest tests/unit/test_catalog.py -q # one test file
12
12
  .venv/bin/pytest tests/unit/test_catalog.py::test_scan_dir -q # one test
13
13
  .venv/bin/pytest tests/functional -q -k install # functional tests matching "install"
14
- make lint # the whole static tier — see the recipe, it is 18 commands
14
+ make lint # the whole static tier — read the recipe, it is long
15
15
  make test # unit + functional with 80% coverage gate
16
16
  make check # the full required gate — see table below
17
17
 
@@ -9,4 +9,7 @@ prune .idea
9
9
  prune .claude
10
10
  prune .github
11
11
  exclude .coverage
12
+ # The npm lint/test toolchain (stylelint, eslint, puppeteer-core, axe-core). CI
13
+ # only; nothing in the shipped runtime touches node.
14
+ exclude package.json package-lock.json
12
15
  global-exclude __pycache__ *.pyc *.pyo .DS_Store
@@ -61,7 +61,17 @@ 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
- @if command -v actionlint >/dev/null 2>&1; then actionlint; \
64
+ @# actionlint does not lint `run:` blocks itself — it shells out to
65
+ @# shellcheck, and if shellcheck is not on PATH it skips them silently and
66
+ @# still exits 0. So `make lint` could report a clean workflow lint having
67
+ @# never looked inside a single script. shellcheck is pinned in
68
+ @# requirements/lint-tools.in for exactly this; put $(VENV)/bin on PATH so
69
+ @# actionlint finds it, and fail loudly rather than run a hollow check.
70
+ @if command -v actionlint >/dev/null 2>&1; then \
71
+ if [ ! -x $(VENV)/bin/shellcheck ]; then \
72
+ echo "shellcheck missing from $(VENV) — actionlint would skip every run: block. Re-run 'make venv'."; exit 1; \
73
+ fi; \
74
+ PATH="$(CURDIR)/$(VENV)/bin:$$PATH" actionlint; \
65
75
  else echo "actionlint not on PATH — skipping (CI enforces it)"; fi
66
76
  $(PY) scripts/build_registries.py --check
67
77
  $(PY) scripts/build_roadmap.py --check
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.284
3
+ Version: 1.0.286
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.284'
22
- __version_tuple__ = version_tuple = (1, 0, 284)
21
+ __version__ = version = '1.0.286'
22
+ __version_tuple__ = version_tuple = (1, 0, 286)
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.284
3
+ Version: 1.0.286
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -155,6 +155,7 @@ docs/roadmap/items/BOOST-D24.md
155
155
  docs/roadmap/items/BOOST-D25.md
156
156
  docs/roadmap/items/BOOST-D26.md
157
157
  docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md
158
+ docs/roadmap/items/actionlint-skips-shellcheck-silently.md
158
159
  docs/roadmap/items/adapter-conformance-langgraph-leg-never-ran.md
159
160
  docs/roadmap/items/ai-bridge-silent-failure-logging.md
160
161
  docs/roadmap/items/ambiguous-tap-short-name-resolution.md
@@ -528,5 +529,6 @@ tests/unit/test_workflow_timeouts.py
528
529
  tests/unit/test_workflows.py
529
530
  tests/visual/a11y_check.mjs
530
531
  tests/visual/console_check.mjs
532
+ tests/visual/package-lock.json
531
533
  tests/visual/package.json
532
534
  tests/visual/visual_check.mjs
@@ -0,0 +1,58 @@
1
+ ---
2
+ id: actionlint-skips-shellcheck-silently
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 — shellcheck is pinned in lint-tools and both gates now assert it is there
11
+ order: 69
12
+ owner: loop/lint-shellcheck
13
+ pr:
14
+ title: The second silent skip &mdash; <code>actionlint</code> runs, and checks no <code>run:</code> block at all
15
+ ---
16
+ <code>make-lint-masks-actionlint-failures</code> fixed the layer everyone can see: <code>make
17
+ lint</code> discarded actionlint's exit status. There is a second layer underneath it, and the
18
+ first fix does not reach it. <b><code>actionlint</code> does not lint <code>run:</code> blocks
19
+ itself.</b> It shells out to <code>shellcheck</code>, and when shellcheck is not on
20
+ <code>PATH</code> it skips every one of them &mdash; no warning, no note, exit 0.
21
+
22
+ Same workflow file, same actionlint binary, only <code>PATH</code> differs:
23
+
24
+ <code>without shellcheck -&gt; (no output) exit=0</code><br>
25
+ <code>with shellcheck -&gt; bad.yml:8:9: shellcheck reported issue in this script: SC2001 &hellip; exit=1</code>
26
+
27
+ So the honest description of the gate before this change was: <code>make lint</code> ran a workflow
28
+ linter that silently declined to look inside any script, and reported success. That is not
29
+ hypothetical either &mdash; it is exactly how an <code>SC2001</code> reached CI from a green local
30
+ gate, in the very change that fixed layer one.
31
+
32
+ <b>CI was not safe, only lucky.</b> Its actionlint step carried the comment "shellcheck is
33
+ preinstalled on the runner, so run: blocks are checked too" &mdash; true today, and an unpinned,
34
+ unversioned, silently revocable dependency on somebody else's base image. If GitHub ever drops it
35
+ from <code>ubuntu-latest</code>, CI degrades to the same hollow check with no signal that anything
36
+ changed. For a repository that hash-pins its entire lint toolchain precisely so an upstream release
37
+ cannot move a gate underneath it, an implicit dependency on a runner image is the same bug in a
38
+ different coat.
39
+
40
+ <b>Shipped.</b> <code>shellcheck-py==0.11.0.1</code> is declared in
41
+ <code>requirements/lint-tools.in</code> and hash-pinned into the generated
42
+ <code>lint-tools.txt</code> like every other tool, which puts it on both sides: CI installs it from
43
+ that lock, and <code>make venv</code> puts it in <code>.venv/bin</code>. <code>make lint</code> now
44
+ prepends <code>.venv/bin</code> to <code>PATH</code> so actionlint can find it, and <b>fails</b> if
45
+ it is missing rather than running a check it knows is hollow; CI asserts <code>command -v
46
+ shellcheck</code> before invoking actionlint. Verified in four states against the real recipe: the
47
+ tool absent (skip message, exit 0), shellcheck missing from the venv (exit 1 with a message naming
48
+ the fix), both present and workflows clean (exit 0), and both present with an <code>SC2001</code> in
49
+ a <code>run:</code> block (exit 1 &mdash; the case that used to pass). The old recipe on that same
50
+ file exits 0.
51
+
52
+ <b>What is deliberately still skipped.</b> If <code>actionlint</code> itself is absent,
53
+ <code>make lint</code> prints a message and continues. Closing that would mean pinning
54
+ <code>actionlint-py</code>, which is sdist-only and fetches the binary from the network at install
55
+ time, and which tracks a different actionlint version than the URL-pinned one CI uses. Trading a
56
+ pinned binary for a build-time download is a worse trade than the skip, so the skip stays and is
57
+ documented rather than quietly tolerated. The wider gap named by the earlier card is also still
58
+ open: <code>zizmor</code> and <code>gitleaks</code> run only in CI and have no Makefile equivalent.
@@ -0,0 +1,74 @@
1
+ ---
2
+ id: scorecard-findings-triage
3
+ board: code
4
+ section: pipeline
5
+ status: shipped
6
+ category: Supply chain
7
+ complexity: M
8
+ impact: Med
9
+ wow: 2
10
+ note: 7 open · 3 now hash-pinned, 3 decided, 1 clears itself
11
+ order: 13
12
+ owner: loop/scorecard-pinned-deps
13
+ pr:
14
+ title: OpenSSF Scorecard's findings, triaged into three piles
15
+ ---
16
+ Scorecard files into the same code-scanning inbox as CodeQL, so its findings read like
17
+ code defects and get ignored alongside the false positives. They are not defects — they
18
+ are <b>posture metrics</b>, and they must not be dismissed as "false positive" the way the
19
+ <code>serve.py</code> traversal alerts legitimately were, because that misrepresents the
20
+ repo's security posture. Triaged 2026-07-25, re-triaged 2026-07-29 against the 7 still open.
21
+ <b>Fixed</b> — <code>TokenPermissions</code> #26/#27/#28: <code>ci</code>,
22
+ <code>codeql</code> and <code>adapter-conformance</code> had no top-level
23
+ <code>permissions:</code> block at all, scoring 0. Added <code>contents: read</code> as the
24
+ least-privilege default.
25
+ <b>Intentional, leave</b> — <code>TokenPermissions</code> #39/#37/#25/#24:
26
+ <code>publish.yml</code> needs <code>contents: write</code> to create the release and tag,
27
+ <code>osv-scanner</code> needs <code>security-events: write</code> to upload SARIF, and
28
+ <code>ci.yml</code>'s <code>tests</code> job needs <code>contents: write</code> for the
29
+ coverage-badge push. "Fixing" these breaks the release pipeline. They should be
30
+ <b>dismissed as used-in-tests/acceptable-risk with a reason</b>, not left open to rot the list.
31
+ <b>Correction — <code>PinnedDependencies</code> was NOT "not code-fixable".</b> The first
32
+ pass filed #40/#41/#48 under <i>"npx and pip invocations inside steps, not actions, so
33
+ SHA-pinning does not apply"</i>. That reads the check as being about action SHAs, and it
34
+ is not: for npm the remediation is a <b>committed lockfile</b>, and all three hits were
35
+ <code>npm install</code> steps. <code>tests/visual/package.json</code> pinned its two direct
36
+ deps exactly — and <code>.gitignore</code> then <i>excluded the lockfile</i>, so 79
37
+ transitive packages resolved fresh on every run. <code>theme-lint</code> was worse:
38
+ <code>npm install stylelint@16 eslint@9</code> re-resolved the whole linter every run, so
39
+ the linter CI executed was never the linter anyone reviewed. Both trees are now hash-pinned
40
+ (181 + 81 packages, integrity on every one) and installed with <code>npm ci</code>;
41
+ <code>dependabot.yml</code> gains both npm directories, because a pin with no update path is
42
+ only half the job.
43
+ <b>What the pin immediately exposed.</b> Committing the lock made
44
+ <code>osv-scanner</code> able to see the transitive tree for the first time, and it failed
45
+ the branch at once on <b>CVE-2026-14257</b> (<code>brace-expansion</code>, CVSS 7.5,
46
+ unbounded expansion → OOM). Pre-existing, not introduced: the old floating
47
+ <code>npm install eslint@9</code> resolved the same package, invisibly. The advisory's range
48
+ is <i>all versions below 5.0.8</i>, so the 1.x maintenance line has no fix — and the obvious
49
+ patch, an <code>overrides</code> entry forcing <code>brace-expansion@^5</code>, <b>breaks
50
+ eslint</b>: v5 exports <code>{ expand }</code> where <code>minimatch@3</code> requires a
51
+ callable default, so <code>eslint "style/**/*.{js,mjs}"</code> dies with
52
+ <i>"expand is not a function"</i> while plain <code>eslint style/</code> still passes — a
53
+ green-looking linter with a broken glob path. The real fix is upstream:
54
+ <code>eslint@10</code> depends on <code>minimatch@^10.2.5</code>, which requires the patched
55
+ <code>brace-expansion@^5.0.8</code>. Bumped 9.39.5 → 10.8.0; all 262 packages across both
56
+ locks now return zero OSV advisories.
57
+ <b>Open by decision, correctly</b> — <code>BranchProtectionID</code> #33 (4/10) and
58
+ <code>CodeReviewID</code> #34 (0/26 approved changesets) are two readings of one deliberate
59
+ choice recorded in <a href="#main-has-no-branch-protection">its own card</a>: require status
60
+ checks, do <i>not</i> require reviews, because the working model is parallel
61
+ <code>loop/*</code> branches that self-merge and there is no second reviewer. Every warning
62
+ Scorecard prints under #33 — stale-review dismissal, required approvers, CODEOWNERS review,
63
+ last-push approval — follows from that one choice. They stay open because the score is
64
+ <b>accurate</b>: this repo really does merge without human review. Dismissing them would be
65
+ the lie.
66
+ <b>Clears itself</b> — <code>MaintainedID</code> #35 is <i>"repository was created within the
67
+ last 90 days"</i>. Created 2026-07-17, so it resolves on its own around 2026-10-15. Nothing
68
+ to do but not dismiss it.
69
+ <b>Needs a human, not a commit</b> — <code>CIIBestPracticesID</code> #36 is the one
70
+ remaining actionable finding, and it cannot be fixed from a branch: it asks whether the
71
+ project is registered for an OpenSSF Best Practices badge, which means creating a project
72
+ entry at <code>bestpractices.dev</code> under a real account and answering its criteria. The
73
+ prerequisites are already in place (LICENSE, SECURITY.md, CONTRIBUTING.md,
74
+ CODE_OF_CONDUCT.md, a published CI gate); only the registration is missing.
@@ -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>175</b><span>Loop finds</span></div>
113
+ <div class="stat"><b>176</b><span>Loop finds</span></div>
114
114
  <!-- /ROADMAP:stats -->
115
115
  </div>
116
116
  </section>
@@ -2015,13 +2015,13 @@ path is never used — that fixes the behaviour without satisfying Dependabot's
2015
2015
  </article>
2016
2016
 
2017
2017
  <article class="cap rcard" id="scorecard-findings-triage">
2018
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Supply chain</span></div>
2019
- <h3>OpenSSF Scorecard's 15 findings, triaged into three piles</h3>
2018
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Supply chain</span></div>
2019
+ <h3>OpenSSF Scorecard's findings, triaged into three piles</h3>
2020
2020
  <p>Scorecard files into the same code-scanning inbox as CodeQL, so its findings read like
2021
2021
  code defects and get ignored alongside the false positives. They are not defects — they
2022
2022
  are <b>posture metrics</b>, and they must not be dismissed as "false positive" the way the
2023
2023
  <code>serve.py</code> traversal alerts legitimately were, because that misrepresents the
2024
- repo's security posture. Triaged 2026-07-25:
2024
+ repo's security posture. Triaged 2026-07-25, re-triaged 2026-07-29 against the 7 still open.
2025
2025
  <b>Fixed</b> — <code>TokenPermissions</code> #26/#27/#28: <code>ci</code>,
2026
2026
  <code>codeql</code> and <code>adapter-conformance</code> had no top-level
2027
2027
  <code>permissions:</code> block at all, scoring 0. Added <code>contents: read</code> as the
@@ -2032,19 +2032,55 @@ least-privilege default.
2032
2032
  <code>ci.yml</code>'s <code>tests</code> job needs <code>contents: write</code> for the
2033
2033
  coverage-badge push. "Fixing" these breaks the release pipeline. They should be
2034
2034
  <b>dismissed as used-in-tests/acceptable-risk with a reason</b>, not left open to rot the list.
2035
- <b>Not code-fixable</b> — <code>MaintainedID</code> is repository age; <code>CodeReviewID</code>
2036
- counts approved changesets and is structurally 0 while loops self-merge;
2037
- <code>CIIBestPracticesID</code> is an opt-in badge programme; the four
2038
- <code>PinnedDependencies</code> hits are <code>npx</code> and <code>pip</code> invocations
2039
- inside steps, not actions, so SHA-pinning does not apply to them as written.
2040
- <code>BranchProtectionID</code> is tracked separately in
2041
- <a href="#main-has-no-branch-protection">its own card</a> — it is a workflow decision, not a
2042
- config oversight.</p>
2035
+ <b>Correction — <code>PinnedDependencies</code> was NOT "not code-fixable".</b> The first
2036
+ pass filed #40/#41/#48 under <i>"npx and pip invocations inside steps, not actions, so
2037
+ SHA-pinning does not apply"</i>. That reads the check as being about action SHAs, and it
2038
+ is not: for npm the remediation is a <b>committed lockfile</b>, and all three hits were
2039
+ <code>npm install</code> steps. <code>tests/visual/package.json</code> pinned its two direct
2040
+ deps exactly — and <code>.gitignore</code> then <i>excluded the lockfile</i>, so 79
2041
+ transitive packages resolved fresh on every run. <code>theme-lint</code> was worse:
2042
+ <code>npm install stylelint@16 eslint@9</code> re-resolved the whole linter every run, so
2043
+ the linter CI executed was never the linter anyone reviewed. Both trees are now hash-pinned
2044
+ (181 + 81 packages, integrity on every one) and installed with <code>npm ci</code>;
2045
+ <code>dependabot.yml</code> gains both npm directories, because a pin with no update path is
2046
+ only half the job.
2047
+ <b>What the pin immediately exposed.</b> Committing the lock made
2048
+ <code>osv-scanner</code> able to see the transitive tree for the first time, and it failed
2049
+ the branch at once on <b>CVE-2026-14257</b> (<code>brace-expansion</code>, CVSS 7.5,
2050
+ unbounded expansion → OOM). Pre-existing, not introduced: the old floating
2051
+ <code>npm install eslint@9</code> resolved the same package, invisibly. The advisory's range
2052
+ is <i>all versions below 5.0.8</i>, so the 1.x maintenance line has no fix — and the obvious
2053
+ patch, an <code>overrides</code> entry forcing <code>brace-expansion@^5</code>, <b>breaks
2054
+ eslint</b>: v5 exports <code>{ expand }</code> where <code>minimatch@3</code> requires a
2055
+ callable default, so <code>eslint "style/**/*.{js,mjs}"</code> dies with
2056
+ <i>"expand is not a function"</i> while plain <code>eslint style/</code> still passes — a
2057
+ green-looking linter with a broken glob path. The real fix is upstream:
2058
+ <code>eslint@10</code> depends on <code>minimatch@^10.2.5</code>, which requires the patched
2059
+ <code>brace-expansion@^5.0.8</code>. Bumped 9.39.5 → 10.8.0; all 262 packages across both
2060
+ locks now return zero OSV advisories.
2061
+ <b>Open by decision, correctly</b> — <code>BranchProtectionID</code> #33 (4/10) and
2062
+ <code>CodeReviewID</code> #34 (0/26 approved changesets) are two readings of one deliberate
2063
+ choice recorded in <a href="#main-has-no-branch-protection">its own card</a>: require status
2064
+ checks, do <i>not</i> require reviews, because the working model is parallel
2065
+ <code>loop/*</code> branches that self-merge and there is no second reviewer. Every warning
2066
+ Scorecard prints under #33 — stale-review dismissal, required approvers, CODEOWNERS review,
2067
+ last-push approval — follows from that one choice. They stay open because the score is
2068
+ <b>accurate</b>: this repo really does merge without human review. Dismissing them would be
2069
+ the lie.
2070
+ <b>Clears itself</b> — <code>MaintainedID</code> #35 is <i>"repository was created within the
2071
+ last 90 days"</i>. Created 2026-07-17, so it resolves on its own around 2026-10-15. Nothing
2072
+ to do but not dismiss it.
2073
+ <b>Needs a human, not a commit</b> — <code>CIIBestPracticesID</code> #36 is the one
2074
+ remaining actionable finding, and it cannot be fixed from a branch: it asks whether the
2075
+ project is registered for an OpenSSF Best Practices badge, which means creating a project
2076
+ entry at <code>bestpractices.dev</code> under a real account and answering its criteria. The
2077
+ prerequisites are already in place (LICENSE, SECURITY.md, CONTRIBUTING.md,
2078
+ CODE_OF_CONDUCT.md, a published CI gate); only the registration is missing.</p>
2043
2079
  <div class="meta">
2044
2080
  <span class="m">Complexity <b>M</b></span>
2045
2081
  <span class="m">Impact <b>Med</b></span>
2046
2082
  <span class="m">Wow <b class="wow">★★</b></span>
2047
- <span class="m">15 open · 3 fixed, 4 intentional, 5 not code-fixable</span>
2083
+ <span class="m">7 open · 3 now hash-pinned, 3 decided, 1 clears itself</span>
2048
2084
  </div>
2049
2085
  </article>
2050
2086
 
@@ -3181,6 +3217,60 @@ regresses.</p>
3181
3217
  <span class="m">agent reflex</span>
3182
3218
  </div>
3183
3219
  </article>
3220
+
3221
+ <article class="cap rcard" id="actionlint-skips-shellcheck-silently">
3222
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Testing · Bug</span></div>
3223
+ <h3>The second silent skip &mdash; <code>actionlint</code> runs, and checks no <code>run:</code> block at all</h3>
3224
+ <p><code>make-lint-masks-actionlint-failures</code> fixed the layer everyone can see: <code>make
3225
+ lint</code> discarded actionlint's exit status. There is a second layer underneath it, and the
3226
+ first fix does not reach it. <b><code>actionlint</code> does not lint <code>run:</code> blocks
3227
+ itself.</b> It shells out to <code>shellcheck</code>, and when shellcheck is not on
3228
+ <code>PATH</code> it skips every one of them &mdash; no warning, no note, exit 0.
3229
+
3230
+ Same workflow file, same actionlint binary, only <code>PATH</code> differs:
3231
+
3232
+ <code>without shellcheck -&gt; (no output) exit=0</code><br>
3233
+ <code>with shellcheck -&gt; bad.yml:8:9: shellcheck reported issue in this script: SC2001 &hellip; exit=1</code>
3234
+
3235
+ So the honest description of the gate before this change was: <code>make lint</code> ran a workflow
3236
+ linter that silently declined to look inside any script, and reported success. That is not
3237
+ hypothetical either &mdash; it is exactly how an <code>SC2001</code> reached CI from a green local
3238
+ gate, in the very change that fixed layer one.
3239
+
3240
+ <b>CI was not safe, only lucky.</b> Its actionlint step carried the comment "shellcheck is
3241
+ preinstalled on the runner, so run: blocks are checked too" &mdash; true today, and an unpinned,
3242
+ unversioned, silently revocable dependency on somebody else's base image. If GitHub ever drops it
3243
+ from <code>ubuntu-latest</code>, CI degrades to the same hollow check with no signal that anything
3244
+ changed. For a repository that hash-pins its entire lint toolchain precisely so an upstream release
3245
+ cannot move a gate underneath it, an implicit dependency on a runner image is the same bug in a
3246
+ different coat.
3247
+
3248
+ <b>Shipped.</b> <code>shellcheck-py==0.11.0.1</code> is declared in
3249
+ <code>requirements/lint-tools.in</code> and hash-pinned into the generated
3250
+ <code>lint-tools.txt</code> like every other tool, which puts it on both sides: CI installs it from
3251
+ that lock, and <code>make venv</code> puts it in <code>.venv/bin</code>. <code>make lint</code> now
3252
+ prepends <code>.venv/bin</code> to <code>PATH</code> so actionlint can find it, and <b>fails</b> if
3253
+ it is missing rather than running a check it knows is hollow; CI asserts <code>command -v
3254
+ shellcheck</code> before invoking actionlint. Verified in four states against the real recipe: the
3255
+ tool absent (skip message, exit 0), shellcheck missing from the venv (exit 1 with a message naming
3256
+ the fix), both present and workflows clean (exit 0), and both present with an <code>SC2001</code> in
3257
+ a <code>run:</code> block (exit 1 &mdash; the case that used to pass). The old recipe on that same
3258
+ file exits 0.
3259
+
3260
+ <b>What is deliberately still skipped.</b> If <code>actionlint</code> itself is absent,
3261
+ <code>make lint</code> prints a message and continues. Closing that would mean pinning
3262
+ <code>actionlint-py</code>, which is sdist-only and fetches the binary from the network at install
3263
+ time, and which tracks a different actionlint version than the URL-pinned one CI uses. Trading a
3264
+ pinned binary for a build-time download is a worse trade than the skip, so the skip stays and is
3265
+ documented rather than quietly tolerated. The wider gap named by the earlier card is also still
3266
+ open: <code>zizmor</code> and <code>gitleaks</code> run only in CI and have no Makefile equivalent.</p>
3267
+ <div class="meta">
3268
+ <span class="m">Complexity <b>S</b></span>
3269
+ <span class="m">Impact <b>Med</b></span>
3270
+ <span class="m">Wow <b class="wow">★★★★</b></span>
3271
+ <span class="m">fixed — shellcheck is pinned in lint-tools and both gates now assert it is there</span>
3272
+ </div>
3273
+ </article>
3184
3274
  <!-- /ROADMAP:cards -->
3185
3275
 
3186
3276
  </div>
@@ -30,3 +30,13 @@ interrogate==1.7.0
30
30
  # itself, which is why this set is lint-only and never a runtime dependency.
31
31
  # Reuses the mypy pinned above.
32
32
  refurb==2.3.1
33
+ # shellcheck, as a pinned dependency rather than an assumption. actionlint does
34
+ # not lint `run:` blocks itself — it shells out to shellcheck, and when
35
+ # shellcheck is not on PATH it skips that entirely and still exits 0. Same
36
+ # workflow file, same actionlint: without shellcheck, no output and exit 0; with
37
+ # it, `SC2001` and exit 1. CI got away with it because the GitHub runner image
38
+ # happens to preinstall shellcheck, which is an unpinned, unversioned, silently
39
+ # revocable dependency on somebody else's base image — and locally, where it is
40
+ # usually absent, `make lint` was passing a check it never ran. Pinning it here
41
+ # puts it on both sides and makes the version reviewable like every other tool.
42
+ shellcheck-py==0.11.0.1
@@ -564,6 +564,13 @@ ruff==0.16.0 \
564
564
  --hash=sha256:e5115729eb08c585e5121978ba5d5b60caeae394ce21b9fb5e6cd33a1c6c9b1e \
565
565
  --hash=sha256:e95c448fca1fb2a18372a9440926c5a6ee789639bb975c72e7ae6d0b04218ab4
566
566
  # via -r requirements/lint-tools.in
567
+ shellcheck-py==0.11.0.1 \
568
+ --hash=sha256:1b274df81de5b000ff78db433e7328b87e52e3c38481c60f8e488c3095beef05 \
569
+ --hash=sha256:5c620c88901e8f1d3be5934b31ea99e3310065e1245253741eafd0a275c8c9cc \
570
+ --hash=sha256:6b88d0a244c82ed07e06a53e444da841f69330ca59ae15d4a66c391655dae7a0 \
571
+ --hash=sha256:784156289ecb17e91c692cd783ab5152333309588cabb10032a047331c63e759 \
572
+ --hash=sha256:b6a3fee28efda2e16e38d6e6d59faf7224300256456639727370d404730849e8
573
+ # via -r requirements/lint-tools.in
567
574
  six==1.17.0 \
568
575
  --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \
569
576
  --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81