boost-skill-cli 1.0.156__tar.gz → 1.0.158__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 (320) hide show
  1. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/.gitignore +2 -2
  2. boost_skill_cli-1.0.158/.pre-commit-config.yaml +67 -0
  3. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/CONTRIBUTING.md +21 -0
  4. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/Makefile +2 -1
  5. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/PKG-INFO +1 -1
  6. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/_version.py +2 -2
  7. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  8. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_skill_cli.egg-info/SOURCES.txt +1 -0
  9. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/layering-guard-import-linter.md +3 -3
  10. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +3 -3
  11. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap.html +2 -2
  12. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/pyproject.toml +21 -0
  13. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/.gitattributes +0 -0
  14. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/.gitleaks.toml +0 -0
  15. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/CLAUDE.md +0 -0
  16. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/LICENSE +0 -0
  17. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/MANIFEST.in +0 -0
  18. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/README.md +0 -0
  19. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/SECURITY.md +0 -0
  20. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost +0 -0
  21. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/__init__.py +0 -0
  22. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/__main__.py +0 -0
  23. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/cli.py +0 -0
  24. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/cliparse.py +0 -0
  25. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/__init__.py +0 -0
  26. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/bmad.py +0 -0
  27. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/configuration.py +0 -0
  28. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/discovery.py +0 -0
  29. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/hooks.py +0 -0
  30. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/info.py +0 -0
  31. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/intelligence.py +0 -0
  32. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/pkg.py +0 -0
  33. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/quality.py +0 -0
  34. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/taps.py +0 -0
  35. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/commands/team.py +0 -0
  36. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/__init__.py +0 -0
  37. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/adapters.py +0 -0
  38. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/agents.py +0 -0
  39. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/ai.py +0 -0
  40. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/catalog.py +0 -0
  41. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/claude_settings.py +0 -0
  42. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/config.py +0 -0
  43. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/dense.py +0 -0
  44. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/embed.py +0 -0
  45. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/frontmatter.py +0 -0
  46. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/gitutil.py +0 -0
  47. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/imperative.py +0 -0
  48. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/injectscan.py +0 -0
  49. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/journal.py +0 -0
  50. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/lockfile.py +0 -0
  51. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/logs.py +0 -0
  52. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/mcp.py +0 -0
  53. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/nethttp.py +0 -0
  54. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/output.py +0 -0
  55. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/paths.py +0 -0
  56. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/policy.py +0 -0
  57. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/rag.py +0 -0
  58. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/registry.py +0 -0
  59. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/rules.py +0 -0
  60. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/secretscan.py +0 -0
  61. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/serve.py +0 -0
  62. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/stackprobe.py +0 -0
  63. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/staleness.py +0 -0
  64. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/store.py +0 -0
  65. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/typosquat.py +0 -0
  66. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/updatediff.py +0 -0
  67. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/util.py +0 -0
  68. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/core/workflows.py +0 -0
  69. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/data/registries.json +0 -0
  70. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/errors.py +0 -0
  71. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_cli/spin.py +0 -0
  72. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  73. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  74. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_skill_cli.egg-info/requires.txt +0 -0
  75. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/boost_skill_cli.egg-info/top_level.txt +0 -0
  76. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/.claude/settings.local.json +0 -0
  77. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/DEBUGGING.md +0 -0
  78. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/adapters.html +0 -0
  79. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/demo.gif +0 -0
  80. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/demo.tape +0 -0
  81. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/design-roadmap.html +0 -0
  82. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/eval.html +0 -0
  83. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/index.html +0 -0
  84. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/mcp-hub.html +0 -0
  85. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/rag-architecture.md +0 -0
  86. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D01.md +0 -0
  87. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D02.md +0 -0
  88. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D03.md +0 -0
  89. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D04.md +0 -0
  90. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D05.md +0 -0
  91. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D06.md +0 -0
  92. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D07.md +0 -0
  93. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D08.md +0 -0
  94. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D09.md +0 -0
  95. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D10.md +0 -0
  96. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D11.md +0 -0
  97. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D12.md +0 -0
  98. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D13.md +0 -0
  99. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D14.md +0 -0
  100. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D15.md +0 -0
  101. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D16.md +0 -0
  102. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D17.md +0 -0
  103. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D18.md +0 -0
  104. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D19.md +0 -0
  105. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D20.md +0 -0
  106. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D21.md +0 -0
  107. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D22.md +0 -0
  108. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D23.md +0 -0
  109. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D24.md +0 -0
  110. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D25.md +0 -0
  111. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/BOOST-D26.md +0 -0
  112. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  113. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  114. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  115. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  116. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/boost-run-live-agents.md +0 -0
  117. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  118. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  119. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/browse-crashes-selecting-a-rule-or-workflow.md +0 -0
  120. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  121. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  122. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  123. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  124. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  125. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  126. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  127. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  128. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  129. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  130. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  131. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  132. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/doctor-checks-rules-and-workflows.md +0 -0
  133. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  134. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  135. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  136. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  137. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  138. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  139. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/framework-adapter-langgraph.md +0 -0
  140. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/framework-adapter-multi-agent.md +0 -0
  141. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/framework-adapters-boost-adapt.md +0 -0
  142. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  143. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  144. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/golden-set-statistical-power.md +0 -0
  145. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  146. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  147. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/install-scope-user-or-project.md +0 -0
  148. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  149. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  150. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  151. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/list-rules-and-workflows.md +0 -0
  152. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  153. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  154. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/log-timestamps-mislabeled-utc.md +0 -0
  155. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  156. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  157. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  158. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/mcp-hub-diagram-node-text-overflow.md +0 -0
  159. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/mcp-launch-objc-fork-safety.md +0 -0
  160. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/mcp-register-names-server-before-env.md +0 -0
  161. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/mcp-startup-self-harden-fork-safety.md +0 -0
  162. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  163. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  164. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  165. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  166. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  167. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  168. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  169. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  170. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  171. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  172. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  173. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  174. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  175. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  176. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  177. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  178. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +0 -0
  179. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  180. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/ranx-significance-monitor.md +0 -0
  181. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  182. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  183. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/retrieval-quality-eval-harness.md +0 -0
  184. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  185. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  186. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/rule-install-native-materialization.md +0 -0
  187. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  188. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/runtime-explain-faithfulness-guardrail.md +0 -0
  189. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  190. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  191. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/scan-and-sync-rules-and-workflows.md +0 -0
  192. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  193. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  194. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  195. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  196. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  197. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  198. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  199. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  200. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  201. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  202. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/surface-every-docs-page-from-the-guide.md +0 -0
  203. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  204. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  205. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  206. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  207. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  208. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  209. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  210. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/update-refreshes-rules-and-workflows.md +0 -0
  211. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  212. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  213. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  214. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/workflow-install-native-materialization.md +0 -0
  215. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  216. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  217. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/docs/roadmap/items/workspace-scope-install.md +0 -0
  218. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/examples/README.md +0 -0
  219. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/examples/adapt-demo.sh +0 -0
  220. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/examples/boost-run-prototype.sh +0 -0
  221. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/index.html +0 -0
  222. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/scripts/bench_cli.sh +0 -0
  223. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/scripts/build_registries.py +0 -0
  224. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/scripts/build_roadmap.py +0 -0
  225. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/scripts/ensure_eval_corpus.sh +0 -0
  226. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/scripts/eval_explain.py +0 -0
  227. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/scripts/eval_recommend.py +0 -0
  228. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/scripts/eval_retrieval.py +0 -0
  229. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/scripts/import_budget.py +0 -0
  230. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/scripts/mutation_gate.py +0 -0
  231. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/setup.cfg +0 -0
  232. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/style/README.md +0 -0
  233. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/style/boost.css +0 -0
  234. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/style/boost.js +0 -0
  235. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/style/demo.html +0 -0
  236. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/adapt.feature +0 -0
  237. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/browse.feature +0 -0
  238. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/count.feature +0 -0
  239. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/discover.feature +0 -0
  240. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/doctor.feature +0 -0
  241. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/environment.py +0 -0
  242. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/explain.feature +0 -0
  243. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/index.feature +0 -0
  244. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/install.feature +0 -0
  245. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/list.feature +0 -0
  246. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/mcp.feature +0 -0
  247. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/search.feature +0 -0
  248. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/steps/cli_steps.py +0 -0
  249. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/steps/discovery_steps.py +0 -0
  250. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/steps/mcp_steps.py +0 -0
  251. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/bdd/features/steps/quality_steps.py +0 -0
  252. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/conftest.py +0 -0
  253. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/eval/baseline.json +0 -0
  254. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/eval/explain.jsonl +0 -0
  255. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/eval/golden.jsonl +0 -0
  256. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/eval/recommend.jsonl +0 -0
  257. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/eval/taps.txt +0 -0
  258. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_adapt.py +0 -0
  259. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_bmad.py +0 -0
  260. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_configuration.py +0 -0
  261. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_discovery.py +0 -0
  262. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_hooks.py +0 -0
  263. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_info.py +0 -0
  264. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_intelligence.py +0 -0
  265. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_pkg.py +0 -0
  266. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_quality.py +0 -0
  267. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_taps.py +0 -0
  268. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_cli_team.py +0 -0
  269. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_everyday_loop.py +0 -0
  270. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/functional/test_property_parsers.py +0 -0
  271. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/make_fixture.py +0 -0
  272. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/perf/test_benchmarks.py +0 -0
  273. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/smoke.sh +0 -0
  274. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_adapters.py +0 -0
  275. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_agents.py +0 -0
  276. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_ai.py +0 -0
  277. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_catalog.py +0 -0
  278. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_claude_settings.py +0 -0
  279. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_cliparse.py +0 -0
  280. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_config.py +0 -0
  281. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_dense.py +0 -0
  282. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_dense_fallback.py +0 -0
  283. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_docs_pages_linked.py +0 -0
  284. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_embed.py +0 -0
  285. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_errors_and_cli_table.py +0 -0
  286. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_frontmatter.py +0 -0
  287. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_gitleaks_config.py +0 -0
  288. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_gitutil.py +0 -0
  289. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_imperative.py +0 -0
  290. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_import_budget.py +0 -0
  291. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_injectscan.py +0 -0
  292. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_journal.py +0 -0
  293. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_lockfile.py +0 -0
  294. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_logs.py +0 -0
  295. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_mcp.py +0 -0
  296. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_mutation_hardening.py +0 -0
  297. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_nethttp.py +0 -0
  298. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_output.py +0 -0
  299. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_paths.py +0 -0
  300. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_pkg_confusions.py +0 -0
  301. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_pkg_injection.py +0 -0
  302. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_pkg_secrets.py +0 -0
  303. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_policy.py +0 -0
  304. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_rag.py +0 -0
  305. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_registries_fresh.py +0 -0
  306. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_registry.py +0 -0
  307. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_roadmap_fresh.py +0 -0
  308. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_rules.py +0 -0
  309. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_secretscan.py +0 -0
  310. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_serve.py +0 -0
  311. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_spin.py +0 -0
  312. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_stackprobe.py +0 -0
  313. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_staleness.py +0 -0
  314. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_store.py +0 -0
  315. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_token_parity.py +0 -0
  316. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_typosquat.py +0 -0
  317. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_updatediff.py +0 -0
  318. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_util.py +0 -0
  319. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_version.py +0 -0
  320. {boost_skill_cli-1.0.156 → boost_skill_cli-1.0.158}/tests/unit/test_workflows.py +0 -0
@@ -195,9 +195,9 @@ cython_debug/
195
195
  .abstra/
196
196
 
197
197
  # Visual Studio Code
198
- # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
198
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
199
199
  # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
200
- # and can be added to the global gitignore or merged into this file. However, if you prefer,
200
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
201
201
  # you could uncomment the following to ignore the entire vscode folder
202
202
  # .vscode/
203
203
  # Temporary file for partial code execution
@@ -0,0 +1,67 @@
1
+ # Shift-left the `make lint` gate to *before* the commit, so ruff / mypy /
2
+ # codespell / whitespace fixes land locally instead of failing in CI.
3
+ #
4
+ # pip install pre-commit && pre-commit install # once — hooks then run on `git commit`
5
+ # pre-commit run --all-files # run everything right now
6
+ #
7
+ # pre-commit.ci (free for open source) runs these on every PR and pushes the
8
+ # auto-fixes back onto the branch — see the `ci:` block. Versions below are
9
+ # pinned to match the tools `make lint` runs; bump them together.
10
+ ci:
11
+ autofix_prs: true
12
+ autoupdate_schedule: monthly
13
+ # mypy is a `repo: local` hook that needs the project's venv — pre-commit.ci
14
+ # builds isolated hook envs and can't provide it, so `make lint` / CI own it.
15
+ skip: [mypy]
16
+
17
+ minimum_pre_commit_version: "3.5.0"
18
+
19
+ repos:
20
+ - repo: https://github.com/pre-commit/pre-commit-hooks
21
+ rev: v6.0.0
22
+ hooks:
23
+ # Whitespace fixers skip the generated boards (build_roadmap.py owns their
24
+ # bytes — a drift check would fight this hook), the loop-edited roadmap
25
+ # item data (many parallel branches touch these; a whitespace churn there
26
+ # means needless merge conflicts) and IDE files under .idea/.
27
+ - id: trailing-whitespace
28
+ exclude: &data_and_generated '^(docs/(roadmap|design-roadmap)\.html$|docs/roadmap/items/|\.idea/)'
29
+ - id: end-of-file-fixer
30
+ exclude: *data_and_generated
31
+ - id: mixed-line-ending
32
+ args: [--fix=lf]
33
+ exclude: *data_and_generated
34
+ - id: check-merge-conflict
35
+ - id: check-yaml
36
+ - id: check-toml
37
+ - id: check-added-large-files
38
+
39
+ # Ruff — pinned to the version in `make lint`; reads the same [tool.ruff]
40
+ # config from pyproject.toml and is scoped to the gate's paths.
41
+ - repo: https://github.com/astral-sh/ruff-pre-commit
42
+ rev: v0.15.22
43
+ hooks:
44
+ - id: ruff
45
+ args: [--fix]
46
+ files: ^(boost_cli|tests)/.*\.py$
47
+
48
+ # codespell — same version and [tool.codespell] config (skip / ignore lists)
49
+ # as `make lint`, scoped to the same targets: boost_cli, docs, README.
50
+ - repo: https://github.com/codespell-project/codespell
51
+ rev: v2.4.3
52
+ hooks:
53
+ - id: codespell
54
+ additional_dependencies: [tomli]
55
+ files: ^(boost_cli/|docs/|README\.md)
56
+
57
+ # mypy — run from the project venv so it matches `make lint` exactly
58
+ # (config drives it: files = ["boost_cli"]). Local so stdlib/editable
59
+ # resolution is identical; skipped on pre-commit.ci (see `ci.skip`).
60
+ - repo: local
61
+ hooks:
62
+ - id: mypy
63
+ name: mypy (boost_cli)
64
+ entry: mypy
65
+ language: system
66
+ pass_filenames: false
67
+ types: [python]
@@ -13,6 +13,21 @@ make venv # pytest, coverage, mutmut, ruff, mypy — runtime stays stdl
13
13
  Every test runs against a throwaway `$HOME`, so nothing touches your real
14
14
  agent configs.
15
15
 
16
+ ### Pre-commit hooks (recommended)
17
+
18
+ Catch the `make lint` findings *before* they reach CI:
19
+
20
+ ```bash
21
+ pip install pre-commit && pre-commit install # once
22
+ pre-commit run --all-files # or run everything now
23
+ ```
24
+
25
+ `git commit` then runs ruff, mypy, codespell and the whitespace fixers on your
26
+ staged files. The hooks in [`.pre-commit-config.yaml`](.pre-commit-config.yaml)
27
+ are pinned to the same tool versions the lint gate uses, and
28
+ [pre-commit.ci](https://pre-commit.ci) runs them on every PR and pushes any
29
+ auto-fixes straight back onto the branch.
30
+
16
31
  ## The gates (CI runs all of these)
17
32
 
18
33
  | Command | Gate |
@@ -22,12 +37,18 @@ agent configs.
22
37
  | `make mutation` | mutmut over `boost_cli/core`, **≥80% mutants killed** |
23
38
  | `ruff check boost_cli tests` | lint, zero findings |
24
39
  | `mypy` | type check, zero errors |
40
+ | `lint-imports` | layering: `core/` imports no `commands/`/`cli`; CLI depends inward |
25
41
 
26
42
  ## Ground rules
27
43
 
28
44
  - **Stdlib only** at runtime. No third-party imports in `boost_cli/`.
29
45
  - New commands live in `boost_cli/commands/<group>.py` as
30
46
  `def cmd_<name>(argv) -> int` and are dispatched lazily from `cli.py`.
47
+ - **Respect the layers** (`cli → commands → core`): `core/` is the engine and
48
+ must import neither `commands/` nor `cli`; `commands/` must not reach up into
49
+ `cli`. `import-linter` enforces this — see `[tool.importlinter]` in
50
+ `pyproject.toml` (the one allowlisted edge is `completions` reading the
51
+ `COMMANDS` registry).
31
52
  - Behavior changes need tests — functional tests drive the CLI in-process via
32
53
  `boost_cli.cli.main` (see `tests/conftest.py` for the fixtures).
33
54
  - Anything under `boost_cli/core/` is mutation-tested; expect to add unit
@@ -14,7 +14,7 @@ EVAL_HOME := $(CURDIR)/.eval-home
14
14
 
15
15
  venv:
16
16
  python3 -m venv $(VENV)
17
- $(VENV)/bin/pip -q install pytest pytest-cov coverage mutmut ruff mypy codespell hypothesis
17
+ $(VENV)/bin/pip -q install pytest pytest-cov coverage mutmut ruff mypy codespell hypothesis import-linter
18
18
 
19
19
  unit:
20
20
  $(PYTEST) tests/unit -q
@@ -39,6 +39,7 @@ mutation:
39
39
  lint:
40
40
  $(VENV)/bin/ruff check boost_cli tests
41
41
  $(VENV)/bin/mypy
42
+ $(VENV)/bin/lint-imports
42
43
  $(VENV)/bin/codespell boost_cli docs README.md
43
44
  @command -v actionlint >/dev/null 2>&1 && actionlint || echo "actionlint not on PATH — skipping (CI enforces it)"
44
45
  $(PY) scripts/build_registries.py --check
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.156
3
+ Version: 1.0.158
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.156'
22
- __version_tuple__ = version_tuple = (1, 0, 156)
21
+ __version__ = version = '1.0.158'
22
+ __version_tuple__ = version_tuple = (1, 0, 158)
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.156
3
+ Version: 1.0.158
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -1,6 +1,7 @@
1
1
  .gitattributes
2
2
  .gitignore
3
3
  .gitleaks.toml
4
+ .pre-commit-config.yaml
4
5
  CLAUDE.md
5
6
  CONTRIBUTING.md
6
7
  LICENSE
@@ -2,15 +2,15 @@
2
2
  id: layering-guard-import-linter
3
3
  board: code
4
4
  section: dx
5
- status: planned
5
+ status: shipped
6
6
  category: Quality · Architecture
7
7
  complexity: M
8
8
  impact: Med
9
9
  wow: 4
10
10
  note: core/ ↛ commands/
11
11
  order: 3
12
- owner:
13
- pr:
12
+ owner: loop/layering
13
+ pr: 182
14
14
  title: Layering guard — <code>import-linter</code>
15
15
  ---
16
16
  Enforce the architecture boost already assumes: <code>core/</code> must
@@ -2,15 +2,15 @@
2
2
  id: shift-left-gate-pre-commit-pre-commit-ci
3
3
  board: code
4
4
  section: dx
5
- status: planned
5
+ status: shipped
6
6
  category: DX · Infra
7
7
  complexity: S
8
8
  impact: High
9
9
  wow: 4
10
10
  note: auto-fix PRs
11
11
  order: 2
12
- owner:
13
- pr:
12
+ owner: loop/pre-commit
13
+ pr: 181
14
14
  title: Shift-left gate — <code>pre-commit</code> + pre-commit.ci
15
15
  ---
16
16
  A <code>.pre-commit-config.yaml</code> runs ruff, mypy, codespell and the
@@ -1325,7 +1325,7 @@ improvement is real (or isn't)."</p>
1325
1325
  </article>
1326
1326
 
1327
1327
  <article class="cap rcard">
1328
- <div class="head"><span class="pill planned">Planned</span><span class="cat">DX · Infra</span></div>
1328
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">DX · Infra</span></div>
1329
1329
  <h3>Shift-left gate — <code>pre-commit</code> + pre-commit.ci</h3>
1330
1330
  <p>A <code>.pre-commit-config.yaml</code> runs ruff, mypy, codespell and the
1331
1331
  whitespace fixers <em>before</em> code ever reaches CI, and the free-for-OSS
@@ -1341,7 +1341,7 @@ improvement is real (or isn't)."</p>
1341
1341
  </article>
1342
1342
 
1343
1343
  <article class="cap rcard">
1344
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Quality · Architecture</span></div>
1344
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Quality · Architecture</span></div>
1345
1345
  <h3>Layering guard — <code>import-linter</code></h3>
1346
1346
  <p>Enforce the architecture boost already assumes: <code>core/</code> must
1347
1347
  never import <code>commands/</code>, and the CLI depends inward only.
@@ -155,3 +155,24 @@ exclude_lines = [
155
155
  "if TYPE_CHECKING:",
156
156
  "raise NotImplementedError",
157
157
  ]
158
+
159
+ # import-linter: turn boost's assumed layering into an enforced contract, so a
160
+ # cross-layer import can't silently erode the engine. Run by `make lint`
161
+ # (lint-imports) and the CI lint job. Dev/CI-only — never imported at runtime.
162
+ [tool.importlinter]
163
+ root_package = "boost_cli"
164
+
165
+ [[tool.importlinter.contracts]]
166
+ name = "boost_cli is layered: cli -> commands -> core"
167
+ type = "layers"
168
+ # Higher layers may import lower ones, never the reverse: core/ (the engine)
169
+ # must import neither commands/ nor the CLI, and commands/ must not reach up
170
+ # into cli. This is the structural rule CLAUDE.md documents — core is the
171
+ # mutation-tested engine, commands/ is thin glue on top of it.
172
+ layers = ["cli", "commands", "core"]
173
+ containers = ["boost_cli"]
174
+ # The one intentional upward edge: `boost completions` reads COMMANDS — the
175
+ # command registry, which lives in cli.py by design (see CLAUDE.md) — to list
176
+ # every command. That single metadata lookup is allowlisted; any other
177
+ # commands -> cli import is still a violation.
178
+ ignore_imports = ["boost_cli.commands.configuration -> boost_cli.cli"]