boost-skill-cli 1.0.213__tar.gz → 1.0.215__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 (465) hide show
  1. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/CLAUDE.md +80 -2
  2. {boost_skill_cli-1.0.213/boost_skill_cli.egg-info → boost_skill_cli-1.0.215}/PKG-INFO +1 -1
  3. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/_version.py +2 -2
  4. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215/boost_skill_cli.egg-info}/PKG-INFO +1 -1
  5. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/SOURCES.txt +26 -0
  6. boost_skill_cli-1.0.215/docs/roadmap/items/ai-bridge-silent-failure-logging.md +20 -0
  7. boost_skill_cli-1.0.215/docs/roadmap/items/ambiguous-tap-short-name-resolution.md +22 -0
  8. boost_skill_cli-1.0.215/docs/roadmap/items/ci-job-timeout-minutes.md +20 -0
  9. boost_skill_cli-1.0.215/docs/roadmap/items/crash-listing-branch-untested.md +20 -0
  10. boost_skill_cli-1.0.215/docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md +23 -0
  11. boost_skill_cli-1.0.215/docs/roadmap/items/dependabot-missing-pip-ecosystem.md +28 -0
  12. boost_skill_cli-1.0.215/docs/roadmap/items/github-community-health-files.md +21 -0
  13. boost_skill_cli-1.0.215/docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md +23 -0
  14. boost_skill_cli-1.0.215/docs/roadmap/items/journal-rotation-race-and-handle-leak.md +22 -0
  15. boost_skill_cli-1.0.215/docs/roadmap/items/license-compliance-scanning.md +21 -0
  16. boost_skill_cli-1.0.215/docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md +21 -0
  17. boost_skill_cli-1.0.215/docs/roadmap/items/mypy-strict-mode-for-commands.md +23 -0
  18. boost_skill_cli-1.0.215/docs/roadmap/items/negative-limit-inverts-log-pulse-output.md +21 -0
  19. boost_skill_cli-1.0.215/docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md +21 -0
  20. boost_skill_cli-1.0.215/docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md +24 -0
  21. boost_skill_cli-1.0.215/docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md +21 -0
  22. boost_skill_cli-1.0.215/docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md +36 -0
  23. boost_skill_cli-1.0.215/docs/roadmap/items/rel-time-tests-race-the-wall-clock.md +36 -0
  24. boost_skill_cli-1.0.215/docs/roadmap/items/required-checks-config-drift.md +21 -0
  25. boost_skill_cli-1.0.215/docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md +22 -0
  26. boost_skill_cli-1.0.215/docs/roadmap/items/serve-py-traversal-guards-untested.md +21 -0
  27. boost_skill_cli-1.0.215/docs/roadmap/items/structured-json-log-output-mode.md +21 -0
  28. boost_skill_cli-1.0.215/docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md +22 -0
  29. boost_skill_cli-1.0.215/docs/roadmap/items/uninstall-has-no-confirmation-prompt.md +21 -0
  30. boost_skill_cli-1.0.215/docs/roadmap/items/update-reinstall-widens-agent-scope.md +22 -0
  31. boost_skill_cli-1.0.215/docs/roadmap/items/wire-bdd-suite-into-ci.md +21 -0
  32. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap.html +472 -1
  33. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.gitattributes +0 -0
  34. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.gitignore +0 -0
  35. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.gitleaks.toml +0 -0
  36. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.htmlvalidate.json +0 -0
  37. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.lighthouserc.json +0 -0
  38. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.lycheeignore +0 -0
  39. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.markdownlint-cli2.jsonc +0 -0
  40. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.pre-commit-config.yaml +0 -0
  41. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.stylelintrc.json +0 -0
  42. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.vale/styles/boost/Terminology.yml +0 -0
  43. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.vale/styles/config/vocabularies/boost/accept.txt +0 -0
  44. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/.vale.ini +0 -0
  45. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/CONTRIBUTING.md +0 -0
  46. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/LICENSE +0 -0
  47. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/MANIFEST.in +0 -0
  48. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/Makefile +0 -0
  49. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/README.md +0 -0
  50. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/SECURITY.md +0 -0
  51. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost +0 -0
  52. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/__init__.py +0 -0
  53. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/__main__.py +0 -0
  54. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/cli.py +0 -0
  55. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/cliparse.py +0 -0
  56. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/__init__.py +0 -0
  57. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/_common.py +0 -0
  58. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/bmad.py +0 -0
  59. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/configuration.py +0 -0
  60. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/discovery.py +0 -0
  61. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/hooks.py +0 -0
  62. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/info.py +0 -0
  63. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/intelligence.py +0 -0
  64. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/pkg.py +0 -0
  65. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/quality.py +0 -0
  66. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/run.py +0 -0
  67. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/safety.py +0 -0
  68. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/taps.py +0 -0
  69. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/commands/team.py +0 -0
  70. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/__init__.py +0 -0
  71. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/adapters.py +0 -0
  72. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/agents.py +0 -0
  73. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/ai.py +0 -0
  74. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/capabilities.py +0 -0
  75. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/catalog.py +0 -0
  76. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/claude_settings.py +0 -0
  77. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/config.py +0 -0
  78. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/dense.py +0 -0
  79. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/ed25519.py +0 -0
  80. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/embed.py +0 -0
  81. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/faithfulness.py +0 -0
  82. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/frontmatter.py +0 -0
  83. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/gitutil.py +0 -0
  84. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/imperative.py +0 -0
  85. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/injectscan.py +0 -0
  86. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/integrity.py +0 -0
  87. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/journal.py +0 -0
  88. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/lockfile.py +0 -0
  89. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/logs.py +0 -0
  90. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/mcp.py +0 -0
  91. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/mcpdecl.py +0 -0
  92. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/minisign.py +0 -0
  93. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/nethttp.py +0 -0
  94. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/output.py +0 -0
  95. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/paths.py +0 -0
  96. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/policy.py +0 -0
  97. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/projectlock.py +0 -0
  98. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/provenance.py +0 -0
  99. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/rag.py +0 -0
  100. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/registry.py +0 -0
  101. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/resolve.py +0 -0
  102. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/rules.py +0 -0
  103. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/scopes.py +0 -0
  104. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/secretscan.py +0 -0
  105. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/serve.py +0 -0
  106. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/stackprobe.py +0 -0
  107. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/staleness.py +0 -0
  108. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/store.py +0 -0
  109. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/trustaudit.py +0 -0
  110. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/typosquat.py +0 -0
  111. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/updatediff.py +0 -0
  112. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/util.py +0 -0
  113. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/core/workflows.py +0 -0
  114. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/data/registries.json +0 -0
  115. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/errors.py +0 -0
  116. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_cli/spin.py +0 -0
  117. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  118. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  119. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/requires.txt +0 -0
  120. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/boost_skill_cli.egg-info/top_level.txt +0 -0
  121. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/.claude/settings.local.json +0 -0
  122. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/DEBUGGING.md +0 -0
  123. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/adapters.html +0 -0
  124. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/distill.gif +0 -0
  125. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/doctor.gif +0 -0
  126. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/explain.gif +0 -0
  127. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/hooks.gif +0 -0
  128. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/install.gif +0 -0
  129. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/pulse.gif +0 -0
  130. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/search.gif +0 -0
  131. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/gifs/tap.gif +0 -0
  132. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/distill.tape +0 -0
  133. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/doctor.tape +0 -0
  134. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/explain.tape +0 -0
  135. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/hooks.tape +0 -0
  136. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/install.tape +0 -0
  137. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/pulse.tape +0 -0
  138. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/search.tape +0 -0
  139. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel/tapes/tap.tape +0 -0
  140. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/carousel.html +0 -0
  141. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/commands.html +0 -0
  142. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/demo.gif +0 -0
  143. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/demo.tape +0 -0
  144. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/design-roadmap.html +0 -0
  145. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/eval.html +0 -0
  146. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/index.html +0 -0
  147. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/mcp-hub.html +0 -0
  148. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/rag-architecture.md +0 -0
  149. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D01.md +0 -0
  150. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D02.md +0 -0
  151. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D03.md +0 -0
  152. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D04.md +0 -0
  153. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D05.md +0 -0
  154. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D06.md +0 -0
  155. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D07.md +0 -0
  156. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D08.md +0 -0
  157. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D09.md +0 -0
  158. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D10.md +0 -0
  159. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D11.md +0 -0
  160. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D12.md +0 -0
  161. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D13.md +0 -0
  162. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D14.md +0 -0
  163. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D15.md +0 -0
  164. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D16.md +0 -0
  165. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D17.md +0 -0
  166. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D18.md +0 -0
  167. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D19.md +0 -0
  168. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D20.md +0 -0
  169. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D21.md +0 -0
  170. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D22.md +0 -0
  171. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D23.md +0 -0
  172. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D24.md +0 -0
  173. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D25.md +0 -0
  174. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/BOOST-D26.md +0 -0
  175. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  176. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  177. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  178. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  179. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  180. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  181. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  182. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  183. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  184. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  185. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  186. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  187. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/command-carousel-page.md +0 -0
  188. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  189. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  190. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  191. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  192. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  193. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  194. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  195. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/docsite-chrome-and-content-audit.md +0 -0
  196. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  197. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  198. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  199. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  200. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  201. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  202. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  203. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  204. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  205. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  206. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  207. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  208. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  209. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  210. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  211. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  212. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/install-resolves-skill-dependencies.md +0 -0
  213. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  214. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/installed-skill-trust-audit.md +0 -0
  215. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  216. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  217. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  218. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  219. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  220. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  221. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  222. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  223. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  224. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  225. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  226. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-aware-skills.md +0 -0
  227. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  228. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  229. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  230. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-search-before-reinventing.md +0 -0
  231. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  232. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  233. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  234. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  235. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  236. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  237. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  238. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  239. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  240. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  241. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  242. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/pin-the-lint-toolchain.md +0 -0
  243. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  244. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  245. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/project-scope-across-every-command.md +0 -0
  246. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/project-scope-symlink-escape-on-write.md +0 -0
  247. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  248. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  249. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  250. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  251. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  252. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  253. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  254. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  255. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  256. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  257. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  258. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  259. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  260. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  261. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  262. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  263. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  264. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  265. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  266. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  267. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  268. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  269. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  270. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  271. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  272. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  273. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  274. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  275. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  276. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  277. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  278. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  279. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  280. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  281. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  282. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  283. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  284. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  285. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  286. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  287. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  288. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  289. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  290. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  291. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/docs/roadmap/items/workspace-scope-install.md +0 -0
  292. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/eslint.config.mjs +0 -0
  293. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/examples/README.md +0 -0
  294. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/examples/adapt-demo.sh +0 -0
  295. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/examples/boost-run-prototype.sh +0 -0
  296. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/index.html +0 -0
  297. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/noxfile.py +0 -0
  298. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/pyproject.toml +0 -0
  299. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/coverage-tools.in +0 -0
  300. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/coverage-tools.txt +0 -0
  301. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/lint-tools.in +0 -0
  302. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/lint-tools.txt +0 -0
  303. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/mutation-tools.in +0 -0
  304. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/mutation-tools.txt +0 -0
  305. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/release-tools.in +0 -0
  306. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/release-tools.txt +0 -0
  307. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/test-tools.in +0 -0
  308. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/requirements/test-tools.txt +0 -0
  309. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/a11y_check.py +0 -0
  310. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/bench_cli.sh +0 -0
  311. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/build_command_reference.py +0 -0
  312. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/build_registries.py +0 -0
  313. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/build_roadmap.py +0 -0
  314. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/check_anchors.py +0 -0
  315. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/ensure_eval_corpus.sh +0 -0
  316. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/eval_explain.py +0 -0
  317. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/eval_recommend.py +0 -0
  318. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/eval_retrieval.py +0 -0
  319. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/eval_stats_summary.py +0 -0
  320. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/import_budget.py +0 -0
  321. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/lock_toolchain.py +0 -0
  322. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/mutation_gate.py +0 -0
  323. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/scripts/perf_gate.py +0 -0
  324. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/setup.cfg +0 -0
  325. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/style/README.md +0 -0
  326. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/style/boost.css +0 -0
  327. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/style/boost.js +0 -0
  328. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/style/demo.html +0 -0
  329. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/adapt.feature +0 -0
  330. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/browse.feature +0 -0
  331. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/count.feature +0 -0
  332. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/discover.feature +0 -0
  333. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/doctor.feature +0 -0
  334. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/environment.py +0 -0
  335. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/explain.feature +0 -0
  336. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/index.feature +0 -0
  337. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/install.feature +0 -0
  338. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/list.feature +0 -0
  339. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/mcp.feature +0 -0
  340. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/search.feature +0 -0
  341. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/steps/cli_steps.py +0 -0
  342. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/steps/discovery_steps.py +0 -0
  343. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/steps/mcp_steps.py +0 -0
  344. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/bdd/features/steps/quality_steps.py +0 -0
  345. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/conftest.py +0 -0
  346. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/baseline.json +0 -0
  347. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/explain.jsonl +0 -0
  348. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/golden.jsonl +0 -0
  349. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/recommend.jsonl +0 -0
  350. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/eval/taps.txt +0 -0
  351. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_capabilities_policy.py +0 -0
  352. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_adapt.py +0 -0
  353. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_bmad.py +0 -0
  354. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_configuration.py +0 -0
  355. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_discovery.py +0 -0
  356. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_hooks.py +0 -0
  357. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_info.py +0 -0
  358. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_intelligence.py +0 -0
  359. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_pkg.py +0 -0
  360. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_quality.py +0 -0
  361. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_taps.py +0 -0
  362. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_cli_team.py +0 -0
  363. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_everyday_loop.py +0 -0
  364. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_integrity_enforce.py +0 -0
  365. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_property_parsers.py +0 -0
  366. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_run.py +0 -0
  367. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_tap_signing.py +0 -0
  368. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/functional/test_workspace_scope.py +0 -0
  369. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/README.md +0 -0
  370. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/01-typical.md +0 -0
  371. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/02-lossy-version.md +0 -0
  372. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/03-lossy-numbers.md +0 -0
  373. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/04-lists.md +0 -0
  374. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/05-nested.md +0 -0
  375. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/06-empty-block.md +0 -0
  376. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/07-unterminated.md +0 -0
  377. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/08-none.md +0 -0
  378. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/09-unbalanced-quote.md +0 -0
  379. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/10-keywords.md +0 -0
  380. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/11-crlf.md +0 -0
  381. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/frontmatter/12-bom.md +0 -0
  382. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/01-shorthand.txt +0 -0
  383. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/02-https.txt +0 -0
  384. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/03-ssh.txt +0 -0
  385. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/04-traversal.txt +0 -0
  386. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/05-empty.txt +0 -0
  387. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/06-space.txt +0 -0
  388. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/07-slash.txt +0 -0
  389. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/corpus/registry/08-bare-host.txt +0 -0
  390. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/fuzz_frontmatter.py +0 -0
  391. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/fuzz/fuzz_registry.py +0 -0
  392. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/make_fixture.py +0 -0
  393. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/perf/test_benchmarks.py +0 -0
  394. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/smoke.sh +0 -0
  395. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_a11y_check.py +0 -0
  396. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_adapters.py +0 -0
  397. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_adapters_multi.py +0 -0
  398. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_adapters_runner.py +0 -0
  399. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_agents.py +0 -0
  400. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_ai.py +0 -0
  401. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_capabilities.py +0 -0
  402. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_catalog.py +0 -0
  403. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_check_anchors.py +0 -0
  404. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_claude_settings.py +0 -0
  405. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_cliparse.py +0 -0
  406. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_command_reference_fresh.py +0 -0
  407. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_config.py +0 -0
  408. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_dense.py +0 -0
  409. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_dense_fallback.py +0 -0
  410. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_docs_pages_linked.py +0 -0
  411. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_docsite_chrome.py +0 -0
  412. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_ed25519.py +0 -0
  413. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_embed.py +0 -0
  414. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_errors_and_cli_table.py +0 -0
  415. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_eval_stats_summary.py +0 -0
  416. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_faithfulness.py +0 -0
  417. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_frontmatter.py +0 -0
  418. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_fuzz_targets.py +0 -0
  419. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_gitleaks_config.py +0 -0
  420. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_gitutil.py +0 -0
  421. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_imperative.py +0 -0
  422. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_import_budget.py +0 -0
  423. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_injectscan.py +0 -0
  424. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_integrity.py +0 -0
  425. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_journal.py +0 -0
  426. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_lockfile.py +0 -0
  427. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_logs.py +0 -0
  428. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_mcp.py +0 -0
  429. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_mcpdecl.py +0 -0
  430. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_minisign.py +0 -0
  431. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_mutation_hardening.py +0 -0
  432. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_nethttp.py +0 -0
  433. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_output.py +0 -0
  434. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_paths.py +0 -0
  435. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_perf_gate.py +0 -0
  436. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_pkg_confusions.py +0 -0
  437. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_pkg_injection.py +0 -0
  438. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_pkg_secrets.py +0 -0
  439. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_policy.py +0 -0
  440. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_projectlock.py +0 -0
  441. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_provenance.py +0 -0
  442. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_rag.py +0 -0
  443. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_registries_fresh.py +0 -0
  444. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_registry.py +0 -0
  445. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_resolve.py +0 -0
  446. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_roadmap_fresh.py +0 -0
  447. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_rules.py +0 -0
  448. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_scopes.py +0 -0
  449. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_secretscan.py +0 -0
  450. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_serve.py +0 -0
  451. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_spin.py +0 -0
  452. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_stackprobe.py +0 -0
  453. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_staleness.py +0 -0
  454. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_store.py +0 -0
  455. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_token_parity.py +0 -0
  456. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_toolchain_lock.py +0 -0
  457. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_trustaudit.py +0 -0
  458. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_typosquat.py +0 -0
  459. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_updatediff.py +0 -0
  460. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_util.py +0 -0
  461. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_version.py +0 -0
  462. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/unit/test_workflows.py +0 -0
  463. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/visual/a11y_check.mjs +0 -0
  464. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/visual/package.json +0 -0
  465. {boost_skill_cli-1.0.213 → boost_skill_cli-1.0.215}/tests/visual/visual_check.mjs +0 -0
@@ -4,6 +4,36 @@ boost is a "Homebrew for AI coding skills": a Python CLI (`boost_cli`) that find
4
4
  installs, and governs the skill/rule/workflow files that AI coding agents run on.
5
5
  Package name on PyPI is `boost-skill-cli`; the command is `boost`.
6
6
 
7
+ ## Common commands
8
+
9
+ ```bash
10
+ make venv # .venv from the hash-pinned requirements/*.txt
11
+ .venv/bin/pytest tests/unit/test_catalog.py -q # one test file
12
+ .venv/bin/pytest tests/unit/test_catalog.py::test_scan_dir -q # one test
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
15
+ make test # unit + functional with 80% coverage gate
16
+ make check # the full required gate — see table below
17
+
18
+ # run boost itself against a disposable HOME (never your real ~/.boost):
19
+ export HOME=/tmp/boost-sandbox && mkdir -p $HOME
20
+ python3 tests/make_fixture.py /tmp/fixture-tap
21
+ ./boost tap /tmp/fixture-tap
22
+ ./boost install brainstorming
23
+ ./boost doctor
24
+ ```
25
+
26
+ `make venv` installs from `requirements/*.txt`, which are hash-pinned and are the
27
+ same files CI installs (`scripts/lock_toolchain.py --check` gates them against
28
+ drift) — so a dev venv and a runner resolve to identical bytes. Don't `pip
29
+ install` a lint or test tool by hand; add it to the right requirements file and
30
+ regenerate the lock, or `make lint` passes for you and fails in CI.
31
+
32
+ The functional/unit `sandbox` fixture (`tests/conftest.py`) also sets
33
+ `BOOST_NO_AI=1` and `BOOST_ASSUME_YES=1` so tests are deterministic and never
34
+ block on a confirm prompt or a real AI call — override explicitly in a test
35
+ that means to exercise the AI or confirmation path.
36
+
7
37
  ## The one gate that matters
8
38
 
9
39
  Before calling any change done, run the full gate:
@@ -124,9 +154,57 @@ Both boards are data-driven: `docs/roadmap.html` from `board: code` items and
124
154
  into the per-track sections; the filter JS and counters are computed). Same rule
125
155
  for both — edit items, run `build_roadmap.py`, never touch the HTML by hand.
126
156
 
157
+ ## Architecture
158
+
159
+ **CLI dispatch.** `boost_cli/cli.py` holds `COMMANDS`, the single
160
+ source-of-truth list of `(name, group, module, summary)` for all 78 commands.
161
+ Each command is implemented as `def cmd_<name_with_underscores>(argv) -> int`
162
+ inside `boost_cli/commands/<module>.py`, and `_dispatch` imports that module
163
+ lazily on invocation — so `boost --help` stays instant and command modules are
164
+ decoupled from each other. To add a command: add a row to `COMMANDS`, add the
165
+ `cmd_*` function to the named module, and it's live. `docs/commands.html` is
166
+ **generated** from `COMMANDS` by `scripts/build_command_reference.py`, so a new
167
+ row means regenerating it (`make generate`) or the `--check` gate fails.
168
+
169
+ **commands/ vs core/.** `boost_cli/commands/` is thin CLI glue — argument
170
+ parsing, output formatting, calling into `core/`. `boost_cli/core/` is the
171
+ actual engine (catalog scanning, install/link logic, the lock file, registries,
172
+ search) and is what the mutation gate targets — put behavior there, not in
173
+ the command layer, so it's covered by both the unit suite and mutation
174
+ testing.
175
+
176
+ **Storage layout**, all resolved at call time from `$HOME` (or `$BOOST_HOME`)
177
+ in `boost_cli/core/paths.py`, which is what makes `HOME=<tempdir>` sandboxing
178
+ work in tests and the dev loop:
179
+
180
+ ```text
181
+ ~/.boost/repos/ shallow git clones of tapped registries
182
+ ~/.boost/cache/ JSON catalogs built from SKILL.md/rule/workflow frontmatter
183
+ ~/.boost/logs/ rotating diagnostic log + crash reports
184
+ ~/.boost/state/ pins, tags, policy, profiles, pulse feed, snapshots
185
+ ~/.boost/config.json
186
+ ~/.agents/skills/ canonical store — single source of truth for installed skills
187
+ ~/.agents/skills/.skill-lock.json v3 lock file
188
+ ~/.claude/skills/ ~/.windsurf/skills/ ~/.cursor/skills/ symlinked out from the canonical store
189
+ ```
190
+
191
+ `core/catalog.scan_dir` walks a tap's clone and classifies each file into one
192
+ of the three item kinds (see Non-obvious rules above); `core/store.py` owns
193
+ install, uninstall and sync — copying into the canonical store, symlinking into
194
+ each agent's skills dir, and updating the lock file.
195
+
196
+ **Search has two engines**, both in `core/`: `rag.py` is the always-on,
197
+ zero-dependency BM25 engine (full-content index, auto-builds on first
198
+ search — this is what the required `eval` gate floors at recall@k ≥ 0.85).
199
+ `dense.py` is optional dense/vector retrieval behind the `[rag]` extra plus
200
+ an embeddings key (`VOYAGE_API_KEY`/`OPENAI_API_KEY`); it's used when both
201
+ are present and falls back to BM25 otherwise. `core/ai.py` wraps the
202
+ opt-in LLM-assisted paths (`search --smart`, `explain`, `distill`, `infer`,
203
+ `absorb`, `evolve`, `simulate`, …), shelling out to the `claude` CLI or
204
+ `ANTHROPIC_API_KEY` when available and degrading to heuristics when not.
205
+
127
206
  ## Layout
128
207
 
129
- - `boost_cli/commands/` — CLI command groups · `boost_cli/core/` — engine (the mutation-gated code)
130
208
  - `boost_cli/data/` — shipped catalog data (generated) · `scripts/` — build/gate tooling
131
209
  - `tests/unit`, `tests/functional`, `tests/smoke.sh` — the three test tiers
132
- - `docs/` — `overview.html` (visual guide), `DEBUGGING.md`; `roadmap.html` is generated from `docs/roadmap/items/*.md` (see above)
210
+ - `docs/` — `index.html` (visual guide), `commands.html` (every flag, generated), `DEBUGGING.md`; `roadmap.html` is generated from `docs/roadmap/items/*.md` (see above)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.213
3
+ Version: 1.0.215
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.213'
22
- __version_tuple__ = version_tuple = (1, 0, 213)
21
+ __version__ = version = '1.0.215'
22
+ __version_tuple__ = version_tuple = (1, 0, 215)
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.213
3
+ Version: 1.0.215
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -151,6 +151,8 @@ docs/roadmap/items/BOOST-D24.md
151
151
  docs/roadmap/items/BOOST-D25.md
152
152
  docs/roadmap/items/BOOST-D26.md
153
153
  docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md
154
+ docs/roadmap/items/ai-bridge-silent-failure-logging.md
155
+ docs/roadmap/items/ambiguous-tap-short-name-resolution.md
154
156
  docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md
155
157
  docs/roadmap/items/atomic-skill-install-temp-dir-swap.md
156
158
  docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md
@@ -161,6 +163,7 @@ docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md
161
163
  docs/roadmap/items/build-provenance-slsa-attestations.md
162
164
  docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md
163
165
  docs/roadmap/items/capability-manifest-and-least-privilege-policy.md
166
+ docs/roadmap/items/ci-job-timeout-minutes.md
164
167
  docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md
165
168
  docs/roadmap/items/command-carousel-page.md
166
169
  docs/roadmap/items/command-reference-docs-site.md
@@ -168,7 +171,10 @@ docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md
168
171
  docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md
169
172
  docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md
170
173
  docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md
174
+ docs/roadmap/items/crash-listing-branch-untested.md
171
175
  docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md
176
+ docs/roadmap/items/dense-search-fallback-and-stale-tap-pruning.md
177
+ docs/roadmap/items/dependabot-missing-pip-ecosystem.md
172
178
  docs/roadmap/items/dependency-cve-gate-pip-audit.md
173
179
  docs/roadmap/items/docsite-chrome-and-content-audit.md
174
180
  docs/roadmap/items/docstring-coverage-interrogate.md
@@ -183,17 +189,22 @@ docs/roadmap/items/framework-adapter-langgraph.md
183
189
  docs/roadmap/items/framework-adapter-multi-agent.md
184
190
  docs/roadmap/items/framework-adapters-boost-adapt.md
185
191
  docs/roadmap/items/frontmatter-scalar-over-coercion.md
192
+ docs/roadmap/items/github-community-health-files.md
186
193
  docs/roadmap/items/github-pages-deploy-is-broken-every-push.md
187
194
  docs/roadmap/items/golden-set-statistical-power.md
188
195
  docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md
189
196
  docs/roadmap/items/html-validation-html-validate.md
197
+ docs/roadmap/items/install-from-path-bypasses-policy-and-pin-checks.md
190
198
  docs/roadmap/items/install-resolves-skill-dependencies.md
191
199
  docs/roadmap/items/install-scope-user-or-project.md
192
200
  docs/roadmap/items/installed-skill-trust-audit.md
193
201
  docs/roadmap/items/integrity-verification-boost-verify.md
194
202
  docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md
203
+ docs/roadmap/items/journal-rotation-race-and-handle-leak.md
195
204
  docs/roadmap/items/layering-guard-import-linter.md
205
+ docs/roadmap/items/license-compliance-scanning.md
196
206
  docs/roadmap/items/lighthouse-ci-on-the-pages-site.md
207
+ docs/roadmap/items/lint-tap-misscopes-rule-workflow-entries.md
197
208
  docs/roadmap/items/list-rules-and-workflows.md
198
209
  docs/roadmap/items/localize-the-stored-bm25-snippet.md
199
210
  docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md
@@ -212,10 +223,14 @@ docs/roadmap/items/modernization-smells-refurb-pyupgrade.md
212
223
  docs/roadmap/items/mutation-hardening-core-frontmatter-py.md
213
224
  docs/roadmap/items/mutation-hardening-core-gitutil-py.md
214
225
  docs/roadmap/items/mutation-hardening-core-store-py.md
226
+ docs/roadmap/items/mypy-strict-mode-for-commands.md
227
+ docs/roadmap/items/negative-limit-inverts-log-pulse-output.md
228
+ docs/roadmap/items/onboard-overwrites-generated-files-without-confirm.md
215
229
  docs/roadmap/items/one-command-every-env-nox.md
216
230
  docs/roadmap/items/one-shared-atomic-write-helper.md
217
231
  docs/roadmap/items/package-metadata-validation-twine-check-friends.md
218
232
  docs/roadmap/items/patch-coverage-gate-diff-cover.md
233
+ docs/roadmap/items/path-traversal-unsanitized-rule-workflow-name.md
219
234
  docs/roadmap/items/performance-regression-gate-pytest-benchmark.md
220
235
  docs/roadmap/items/pin-the-lint-toolchain.md
221
236
  docs/roadmap/items/post-deploy-smoke-headless-load-check.md
@@ -227,10 +242,14 @@ docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md
227
242
  docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md
228
243
  docs/roadmap/items/prose-and-terminology-linting-vale.md
229
244
  docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md
245
+ docs/roadmap/items/publish-gate-ignores-pip-audit-and-metadata.md
246
+ docs/roadmap/items/pytest-tmpdir-cve-blocked-by-py39-floor.md
230
247
  docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md
231
248
  docs/roadmap/items/ranx-significance-monitor.md
232
249
  docs/roadmap/items/reconcile-the-theme-drift.md
233
250
  docs/roadmap/items/refresh-the-marketing-surface.md
251
+ docs/roadmap/items/rel-time-tests-race-the-wall-clock.md
252
+ docs/roadmap/items/required-checks-config-drift.md
234
253
  docs/roadmap/items/retrieval-quality-eval-harness.md
235
254
  docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md
236
255
  docs/roadmap/items/robust-tag-argument-parsing.md
@@ -244,25 +263,32 @@ docs/roadmap/items/second-type-checker-pyright.md
244
263
  docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md
245
264
  docs/roadmap/items/secret-scanning-gitleaks-push-protection.md
246
265
  docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md
266
+ docs/roadmap/items/self-update-broken-for-pip-pipx-installs.md
267
+ docs/roadmap/items/serve-py-traversal-guards-untested.md
247
268
  docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md
248
269
  docs/roadmap/items/single-imperative-rule-extractor.md
249
270
  docs/roadmap/items/single-tech-stack-prober.md
250
271
  docs/roadmap/items/split-oversized-command-modules.md
251
272
  docs/roadmap/items/startup-and-import-time-budget-x-importtime.md
252
273
  docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md
274
+ docs/roadmap/items/structured-json-log-output-mode.md
253
275
  docs/roadmap/items/supply-chain-posture-openssf-scorecard.md
254
276
  docs/roadmap/items/surface-every-docs-page-from-the-guide.md
277
+ docs/roadmap/items/sync-deletes-unowned-broken-symlinks.md
255
278
  docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md
256
279
  docs/roadmap/items/theme-asset-linting-stylelint-eslint.md
257
280
  docs/roadmap/items/typo-detection-codespell.md
258
281
  docs/roadmap/items/typosquat-and-name-confusion-detection.md
259
282
  docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md
283
+ docs/roadmap/items/uninstall-has-no-confirmation-prompt.md
260
284
  docs/roadmap/items/untrack-generated-build-noise.md
261
285
  docs/roadmap/items/update-diff-before-apply.md
262
286
  docs/roadmap/items/update-refreshes-rules-and-workflows.md
287
+ docs/roadmap/items/update-reinstall-widens-agent-scope.md
263
288
  docs/roadmap/items/visual-regression-pass-on-the-guide.md
264
289
  docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md
265
290
  docs/roadmap/items/windows-in-the-ci-matrix.md
291
+ docs/roadmap/items/wire-bdd-suite-into-ci.md
266
292
  docs/roadmap/items/workflow-install-native-materialization.md
267
293
  docs/roadmap/items/workflow-linting-actionlint.md
268
294
  docs/roadmap/items/workflow-sast-zizmor.md
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: ai-bridge-silent-failure-logging
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: Observability
7
+ complexity: S
8
+ impact: Med
9
+ wow: 2
10
+ note:
11
+ order: 40
12
+ owner:
13
+ pr:
14
+ title: AI bridge swallows failures with zero diagnostic trail
15
+ ---
16
+ <code>core/ai.py</code>'s CLI and API call paths both catch their failure modes (timeout, OS error,
17
+ URL error, bad JSON) and return <code>None</code> — but neither ever calls into the logger, unlike
18
+ the rest of boost. A user whose expired key or flaky network silently degrades every AI-assisted
19
+ command to its heuristic fallback has no trail to diagnose why, even with <code>--debug</code>. Add
20
+ a one-line <code>logger.debug(...)</code> in each except branch.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: ambiguous-tap-short-name-resolution
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: Bug
7
+ complexity: S
8
+ impact: High
9
+ wow: 3
10
+ note:
11
+ order: 28
12
+ owner:
13
+ pr:
14
+ title: Ambiguous tap short-name resolution silently picks the wrong tap
15
+ ---
16
+ <code>registry.get(name)</code> matches on full name, safe-name, or trailing path segment and returns
17
+ the <em>first</em> hit with no ambiguity check — unlike <code>catalog.resolve_one</code>, which
18
+ explicitly errors on a multi-tap ambiguous match. Three of the five default taps end in
19
+ <code>/skills</code>, so after <code>boost tap --defaults</code>, <code>boost untap skills</code> or
20
+ <code>boost update skills</code> silently resolves to whichever tap sorts first and the others
21
+ become unreachable by short name. Raise on an ambiguous short-name match, mirroring
22
+ <code>resolve_one</code>.
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: ci-job-timeout-minutes
3
+ board: code
4
+ section: pipeline
5
+ status: planned
6
+ category: CI/CD
7
+ complexity: S
8
+ impact: Low
9
+ wow: 1
10
+ note:
11
+ order: 10
12
+ owner:
13
+ pr:
14
+ title: No <code>timeout-minutes</code> on any CI job
15
+ ---
16
+ None of the 8 workflow files set <code>timeout-minutes</code>, so a hung step — a stalled tap
17
+ clone, a wedged smoke-test subprocess — runs until GitHub's default job timeout instead of failing
18
+ fast, costliest across the 2 OS &#215; 3 Python <code>tests</code> matrix. Add explicit per-job
19
+ timeouts: short for <code>lint</code>/<code>pip-audit</code>, longer for
20
+ <code>tests</code>/<code>mutation</code>.
@@ -0,0 +1,20 @@
1
+ ---
2
+ id: crash-listing-branch-untested
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: Testing · Bug
7
+ complexity: S
8
+ impact: Low
9
+ wow: 1
10
+ note:
11
+ order: 37
12
+ owner:
13
+ pr:
14
+ title: <code>boost log --crashes</code> listing branch has no non-empty test
15
+ ---
16
+ <code>_show_crashes</code> has an empty-state branch and a listing branch that reads each
17
+ <code>crash-*.log</code>, extracts its summary line, and swallows <code>OSError</code> on an
18
+ unreadable report — only the empty-state message is exercised by any test. A regression in the glob
19
+ sort, the summary-extraction regex, or the <code>OSError</code> fallback would ship undetected. Add
20
+ a test that seeds one or more crash logs and asserts on the rendered listing.
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: dense-search-fallback-and-stale-tap-pruning
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: Bug
7
+ complexity: M
8
+ impact: Med
9
+ wow: 2
10
+ note:
11
+ order: 30
12
+ owner:
13
+ pr:
14
+ title: Dense search's empty result skips the BM25 fallback
15
+ ---
16
+ <code>_retrieve_any</code> treats any non-<code>None</code> dense result as final, but
17
+ <code>dense.retrieve()</code> returns <code>[]</code> (not <code>None</code>) whenever every KNN
18
+ neighbor gets filtered by kind mismatch or staleness — silently short-circuiting the documented
19
+ "everything degrades to BM25" contract. Compounding it, <code>dense.build()</code>'s incremental
20
+ path only prunes chunks for taps still present in the current entry set, so a tap removed via
21
+ <code>boost tap remove</code> leaves ghost vectors in <code>rag_vectors.sqlite</code> forever,
22
+ crowding the KNN pool on every future query. Distinguish "dense unavailable" from "dense had zero
23
+ live hits," and prune removed taps on every build, not just changed ones.
@@ -0,0 +1,28 @@
1
+ ---
2
+ id: dependabot-missing-pip-ecosystem
3
+ board: code
4
+ section: pipeline
5
+ status: planned
6
+ category: Supply chain
7
+ complexity: S
8
+ impact: Low
9
+ wow: 1
10
+ note: extras only — <code>/requirements</code> is covered
11
+ order: 11
12
+ owner:
13
+ pr:
14
+ title: Dependabot's <code>pip</code> entry misses <code>pyproject.toml</code>'s extras
15
+ ---
16
+ <code>.github/dependabot.yml</code> declares <code>pip</code> for
17
+ <code>directory: /requirements</code>, so the hash-pinned dev/CI toolchain does get weekly
18
+ bump PRs. What it does <b>not</b> cover is <code>pyproject.toml</code> at the repo root:
19
+ Dependabot only scans manifests under the declared <code>directory</code>, so the optional
20
+ extras — <code>[rag]</code> (sqlite-vec), <code>[eval]</code> (ranx, ragas and the pinned
21
+ langchain 0.3 stack), <code>[bdd]</code> (behave), <code>[perf]</code> (pytest-benchmark) —
22
+ never get proactive version-bump PRs, only reactive <code>pip-audit</code> CVE flags.
23
+ Low impact by design: <code>[project].dependencies</code> is empty, so none of this reaches
24
+ anyone who installs <code>boost-skill-cli</code> — it is contributor-facing only. The fix is
25
+ a second <code>pip</code> entry with <code>directory: /</code>. Weigh it against the noise:
26
+ the <code>[eval]</code> stack is <b>deliberately</b> held at langchain 0.3 because ragas
27
+ 0.2.x breaks against langchain &ge;1.0, so that one will raise PRs that must be closed
28
+ unmerged until ragas catches up.
@@ -0,0 +1,21 @@
1
+ ---
2
+ id: github-community-health-files
3
+ board: code
4
+ section: dx
5
+ status: planned
6
+ category: Developer Experience
7
+ complexity: S
8
+ impact: Med
9
+ wow: 2
10
+ note:
11
+ order: 11
12
+ owner:
13
+ pr:
14
+ title: No issue/PR templates or a code of conduct
15
+ ---
16
+ The repo has <code>SECURITY.md</code>, <code>CONTRIBUTING.md</code>, and
17
+ <code>dependabot.yml</code>, but no <code>.github/ISSUE_TEMPLATE/</code>, no
18
+ <code>.github/PULL_REQUEST_TEMPLATE.md</code>, and no <code>CODE_OF_CONDUCT.md</code>. For a project
19
+ that explicitly expects parallel external contributors (per the worktree-coordination rules in
20
+ <code>CONTRIBUTING.md</code>), a bug-report template built around <code>boost doctor</code>/crash-log
21
+ output and a PR checklist would cut triage friction more cheaply than most engine work.
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: install-from-path-bypasses-policy-and-pin-checks
3
+ board: code
4
+ section: trust
5
+ status: planned
6
+ category: Security · Bug
7
+ complexity: S
8
+ impact: High
9
+ wow: 3
10
+ note: code-scan finding
11
+ order: 9
12
+ owner:
13
+ pr:
14
+ title: <code>install_from_path</code> bypasses pin &amp; policy checks
15
+ ---
16
+ <code>boost import</code>, <code>boost migrate --from-skills-cli</code>, <code>boost rename</code>,
17
+ and the local-install paths behind the AI <code>distill</code>/<code>evolve</code> commands all
18
+ route through <code>store.install_from_path()</code>, which never calls
19
+ <code>policy.check_install()</code> and never checks <code>existing.get("pinned")</code> the way
20
+ <code>store.install()</code> does. Any of those commands can silently overwrite a pinned skill, or
21
+ one that <code>blocked_skills</code>/<code>allowed_taps</code>/<code>max_skills</code>/<code>pin_only</code>
22
+ policy would otherwise refuse. Route <code>install_from_path</code> through the same
23
+ pinned/existing/policy gates as <code>install()</code>.
@@ -0,0 +1,22 @@
1
+ ---
2
+ id: journal-rotation-race-and-handle-leak
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: Concurrency · Bug
7
+ complexity: M
8
+ impact: Med
9
+ wow: 2
10
+ note:
11
+ order: 31
12
+ owner:
13
+ pr:
14
+ title: Journal rotation has a lost-update race between concurrent processes
15
+ ---
16
+ <code>_maybe_rotate</code> reads the whole pulse file and atomically replaces it with a truncated
17
+ snapshot — but two concurrent boost processes (explicitly expected per this repo's parallel-loop
18
+ model) can both read, then both write their own snapshot, and whichever writes last silently
19
+ discards any event the other appended in between. <code>rotation_healthy()</code> also opens the
20
+ file with a bare <code>p.open()</code> and never closes it, relying on GC instead of a
21
+ <code>with</code> block like every other open in the module. Rotate under a lock (or an
22
+ append-only rename scheme), and close the handle explicitly.
@@ -0,0 +1,21 @@
1
+ ---
2
+ id: license-compliance-scanning
3
+ board: code
4
+ section: pipeline
5
+ status: planned
6
+ category: Supply chain
7
+ complexity: S
8
+ impact: Med
9
+ wow: 2
10
+ note:
11
+ order: 12
12
+ owner:
13
+ pr:
14
+ title: License-compliance scanning of the dependency closure
15
+ ---
16
+ Nothing in CI checks SPDX license compatibility of resolved dependencies — <code>pip-audit</code>
17
+ gates known CVEs, not license terms, and the <code>[eval]</code>/<code>[rag]</code> extras pull in a
18
+ nontrivial transitive closure (the langchain stack, ragas, sqlite-vec) whose licenses are never
19
+ verified against boost's own. Add a <code>pip-licenses --fail-on</code> (or <code>reuse lint</code>)
20
+ step to <code>package-metadata.yml</code> to catch an incompatible transitive dependency before an
21
+ extra ships it.
@@ -0,0 +1,21 @@
1
+ ---
2
+ id: lint-tap-misscopes-rule-workflow-entries
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: Bug
7
+ complexity: S
8
+ impact: Med
9
+ wow: 2
10
+ note:
11
+ order: 34
12
+ owner:
13
+ pr:
14
+ title: <code>lint --tap</code> mis-scores rule/workflow entries as broken
15
+ ---
16
+ <code>boost lint --tap</code> builds its target list without filtering by kind, so rule/workflow
17
+ catalog entries (which have no <code>SKILL.md</code>) always report "missing SKILL.md," and
18
+ repo-root items get scored against the entire tap directory instead of their actual file. Running
19
+ it against any tap that mixes rules/workflows with skills makes every rule/workflow entry show a
20
+ bogus error and a garbage score. Skip or special-case non-skill kinds, mirroring the kind-branching
21
+ already used elsewhere in <code>pkg.py</code>.
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: mypy-strict-mode-for-commands
3
+ board: code
4
+ section: health
5
+ status: planned
6
+ category: Testing · Type
7
+ complexity: M
8
+ impact: High
9
+ wow: 3
10
+ note:
11
+ order: 11
12
+ owner:
13
+ pr:
14
+ title: mypy's default mode skips untyped command bodies
15
+ ---
16
+ <code>[tool.mypy]</code> in <code>pyproject.toml</code> sets only <code>python_version</code>/
17
+ <code>files</code>, leaving mypy in its default permissive mode — a function with any untyped
18
+ parameter has its <em>body</em> skipped entirely. All 76 <code>cmd_*</code> functions across
19
+ <code>boost_cli/commands/*.py</code> take a bare <code>argv</code>, and a third have no return-type
20
+ annotation, so the required "zero mypy errors" lint gate isn't actually checking most of the CLI's
21
+ dispatch logic. Scoping <code>disallow_untyped_defs</code> (or at least
22
+ <code>check_untyped_defs</code>) to <code>boost_cli.commands</code> will surface a real backlog —
23
+ exactly what the gate is supposed to catch.
@@ -0,0 +1,21 @@
1
+ ---
2
+ id: negative-limit-inverts-log-pulse-output
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: CLI ergonomics
7
+ complexity: S
8
+ impact: Low
9
+ wow: 1
10
+ note:
11
+ order: 36
12
+ owner:
13
+ pr:
14
+ title: Negative <code>-n</code> silently inverts <code>log</code>/<code>pulse</code> output
15
+ ---
16
+ <code>boost log</code>/<code>boost pulse</code> accept <code>-n</code>/<code>--limit</code> as a bare
17
+ <code>type=int</code> with no positivity check, and the slicing does
18
+ <code>out[:n] if n else out</code> — a negative <code>n</code> becomes a Python negative slice, so
19
+ <code>-n -1</code> silently returns everything except the most recent event instead of erroring.
20
+ <code>discovery.py</code>'s <code>--limit</code> flags already share a <code>_positive_int</code>
21
+ validator that rejects values below 1; reuse it here.
@@ -0,0 +1,21 @@
1
+ ---
2
+ id: onboard-overwrites-generated-files-without-confirm
3
+ board: code
4
+ section: internals
5
+ status: planned
6
+ category: UX · Bug
7
+ complexity: S
8
+ impact: Med
9
+ wow: 2
10
+ note:
11
+ order: 35
12
+ owner:
13
+ pr:
14
+ title: <code>boost onboard</code> silently overwrites existing generated files
15
+ ---
16
+ <code>boost onboard</code> writes <code>.boost/telemetry.json</code>, a GitHub Actions workflow, and
17
+ <code>.skill-lock.json</code> via a bare <code>write_text()</code> with no existence check,
18
+ confirmation, or diff — unlike the sibling "write a generated file" helper elsewhere in the
19
+ codebase, which always confirms before overwriting. Re-running it on a repo with its own tracked
20
+ lock file silently clobbers it and still reports "created," even though it overwrote. Check
21
+ <code>dest.exists()</code> and route through <code>out.confirm()</code> first.
@@ -0,0 +1,24 @@
1
+ ---
2
+ id: path-traversal-unsanitized-rule-workflow-name
3
+ board: code
4
+ section: trust
5
+ status: planned
6
+ category: Security · Bug
7
+ complexity: M
8
+ impact: High
9
+ wow: 3
10
+ note: live-reproduced
11
+ order: 10
12
+ owner:
13
+ pr:
14
+ title: Path traversal via unsanitized rule/workflow name
15
+ ---
16
+ <code>catalog._make_entry</code> only slugifies a catalog name when it contains a space, so a tap's
17
+ rule/workflow frontmatter carrying <code>name: ../../../../.ssh/authorized_keys</code> sails straight
18
+ through into <code>rule_target</code>/<code>workflow_target</code>, which build the destination as
19
+ <code>root / "rules" / (name + ext)</code> with zero traversal guard — unlike
20
+ <code>skill_store_dir()</code>'s <code>[A-Za-z0-9._-]+</code> regex. A malicious tap can write an
21
+ arbitrary file outside <code>.cursor/rules/</code> or <code>.claude/</code>, and it is worse under
22
+ <code>--scope project</code> since <code>base</code> is the victim's own repo. Apply the same
23
+ name-validation regex used by <code>skill_store_dir()</code> before any rule/workflow install path
24
+ is built.
@@ -0,0 +1,21 @@
1
+ ---
2
+ id: publish-gate-ignores-pip-audit-and-metadata
3
+ board: code
4
+ section: pipeline
5
+ status: planned
6
+ category: CI/CD
7
+ complexity: S
8
+ impact: High
9
+ wow: 3
10
+ note: gates PyPI
11
+ order: 9
12
+ owner:
13
+ pr:
14
+ title: <code>publish.yml</code> ignores the <code>pip-audit</code> / metadata gates
15
+ ---
16
+ <code>publish.yml</code> triggers on <code>workflow_run: [ci]</code> and gates only on
17
+ <code>github.event.workflow_run.conclusion == 'success'</code> — it never checks the
18
+ independently-triggered <code>pip-audit.yml</code> or <code>package-metadata.yml</code> workflows
19
+ that run on the same push. A merge that fails the live-CVE gate or the twine/metadata check still
20
+ auto-publishes to PyPI as long as <code>ci</code> itself is green. Fold both as jobs inside
21
+ <code>ci.yml</code>, or have the release job poll their run status via the API before publishing.