boost-skill-cli 1.0.80__tar.gz → 1.0.82__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 (230) hide show
  1. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/PKG-INFO +1 -1
  2. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/_version.py +2 -2
  3. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/catalog.py +46 -44
  4. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_skill_cli.egg-info/PKG-INFO +1 -1
  5. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/prune-ignored-dirs-during-scan-dir-walk.md +3 -3
  6. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap.html +1 -1
  7. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_catalog.py +21 -0
  8. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/.gitattributes +0 -0
  9. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/.gitignore +0 -0
  10. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/CLAUDE.md +0 -0
  11. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/CONTRIBUTING.md +0 -0
  12. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/LICENSE +0 -0
  13. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/MANIFEST.in +0 -0
  14. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/Makefile +0 -0
  15. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/README.md +0 -0
  16. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/SECURITY.md +0 -0
  17. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost +0 -0
  18. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/__init__.py +0 -0
  19. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/__main__.py +0 -0
  20. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/cli.py +0 -0
  21. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/cliparse.py +0 -0
  22. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/__init__.py +0 -0
  23. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/bmad.py +0 -0
  24. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/configuration.py +0 -0
  25. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/discovery.py +0 -0
  26. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/hooks.py +0 -0
  27. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/info.py +0 -0
  28. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/intelligence.py +0 -0
  29. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/pkg.py +0 -0
  30. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/quality.py +0 -0
  31. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/taps.py +0 -0
  32. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/commands/team.py +0 -0
  33. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/__init__.py +0 -0
  34. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/agents.py +0 -0
  35. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/ai.py +0 -0
  36. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/claude_settings.py +0 -0
  37. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/config.py +0 -0
  38. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/dense.py +0 -0
  39. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/embed.py +0 -0
  40. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/frontmatter.py +0 -0
  41. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/gitutil.py +0 -0
  42. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/journal.py +0 -0
  43. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/lockfile.py +0 -0
  44. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/logs.py +0 -0
  45. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/mcp.py +0 -0
  46. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/output.py +0 -0
  47. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/paths.py +0 -0
  48. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/policy.py +0 -0
  49. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/rag.py +0 -0
  50. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/registry.py +0 -0
  51. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/store.py +0 -0
  52. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/core/util.py +0 -0
  53. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/data/registries.json +0 -0
  54. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/errors.py +0 -0
  55. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_cli/spin.py +0 -0
  56. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_skill_cli.egg-info/SOURCES.txt +0 -0
  57. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_skill_cli.egg-info/dependency_links.txt +0 -0
  58. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_skill_cli.egg-info/entry_points.txt +0 -0
  59. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_skill_cli.egg-info/requires.txt +0 -0
  60. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/boost_skill_cli.egg-info/top_level.txt +0 -0
  61. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/.claude/settings.local.json +0 -0
  62. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/DEBUGGING.md +0 -0
  63. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/demo.gif +0 -0
  64. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/demo.tape +0 -0
  65. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/design-roadmap.html +0 -0
  66. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/index.html +0 -0
  67. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/mcp-hub.html +0 -0
  68. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/rag-architecture.md +0 -0
  69. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D01.md +0 -0
  70. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D02.md +0 -0
  71. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D03.md +0 -0
  72. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D04.md +0 -0
  73. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D05.md +0 -0
  74. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D06.md +0 -0
  75. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D07.md +0 -0
  76. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D08.md +0 -0
  77. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D09.md +0 -0
  78. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D10.md +0 -0
  79. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D11.md +0 -0
  80. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D12.md +0 -0
  81. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D13.md +0 -0
  82. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D14.md +0 -0
  83. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D15.md +0 -0
  84. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D16.md +0 -0
  85. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D17.md +0 -0
  86. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D18.md +0 -0
  87. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D19.md +0 -0
  88. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D20.md +0 -0
  89. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D21.md +0 -0
  90. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D22.md +0 -0
  91. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D23.md +0 -0
  92. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D24.md +0 -0
  93. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D25.md +0 -0
  94. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/BOOST-D26.md +0 -0
  95. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/accessibility-audit-pa11y-ci-axe-core.md +0 -0
  96. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/atomic-corruption-safe-lock-file-writes.md +0 -0
  97. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/atomic-skill-install-temp-dir-swap.md +0 -0
  98. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/autonomous-ship-workflow-and-isolated-worktree.md +0 -0
  99. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/bring-commands-under-mutation-testing.md +0 -0
  100. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/broken-link-and-anchor-checking-lychee.md +0 -0
  101. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/build-provenance-slsa-attestations.md +0 -0
  102. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/cache-the-catalog-entry-set-across-rag-queries.md +0 -0
  103. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/capability-manifest-and-least-privilege-policy.md +0 -0
  104. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/clean-env-install-smoke-pip-and-pipx.md +0 -0
  105. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/command-reference-docs-site.md +0 -0
  106. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/complexity-and-dead-code-radar-xenon-vulture.md +0 -0
  107. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/consolidate-skill-staleness-drift-logic-into-cor.md +0 -0
  108. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/coverage-dashboard-codecov-free-for-oss.md +0 -0
  109. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/coverage-guided-fuzzing-atheris-oss-fuzz.md +0 -0
  110. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/crash-recorder-error-paths-core-logs-py.md +0 -0
  111. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/dependency-cve-gate-pip-audit.md +0 -0
  112. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/docstring-coverage-interrogate.md +0 -0
  113. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/end-of-options-guard-on-git-commands.md +0 -0
  114. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/extension-free-tests-core-dense-py.md +0 -0
  115. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/extract-mcp-http-servers-out-of-configuration-py.md +0 -0
  116. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/finish-mutation-hardening-across-core.md +0 -0
  117. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/fix-self-update-version-detection-dead-branch.md +0 -0
  118. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/fork-safe-network-proxy-handler.md +0 -0
  119. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/frontmatter-scalar-over-coercion.md +0 -0
  120. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/github-pages-deploy-is-broken-every-push.md +0 -0
  121. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/hash-pinned-reproducible-toolchain-uv-lock.md +0 -0
  122. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/html-validation-html-validate.md +0 -0
  123. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/integrity-verification-boost-verify.md +0 -0
  124. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/invocation-pid-logging-for-crash-correlation.md +0 -0
  125. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/layering-guard-import-linter.md +0 -0
  126. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/lighthouse-ci-on-the-pages-site.md +0 -0
  127. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/localize-the-stored-bm25-snippet.md +0 -0
  128. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/lockfile-enforcement-and-commit-pinning.md +0 -0
  129. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/lowest-version-resolution-uv-resolution-lowest-d.md +0 -0
  130. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/make-the-roadmaps-discoverable.md +0 -0
  131. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/markdown-consistency-markdownlint-cli2.md +0 -0
  132. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/memoize-config-load-in-process.md +0 -0
  133. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/modernization-smells-refurb-pyupgrade.md +0 -0
  134. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/mutation-hardening-core-frontmatter-py.md +0 -0
  135. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/mutation-hardening-core-gitutil-py.md +0 -0
  136. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/mutation-hardening-core-store-py.md +0 -0
  137. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/one-command-every-env-nox.md +0 -0
  138. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/one-shared-atomic-write-helper.md +0 -0
  139. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/package-metadata-validation-twine-check-friends.md +0 -0
  140. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/patch-coverage-gate-diff-cover.md +0 -0
  141. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/performance-regression-gate-pytest-benchmark.md +0 -0
  142. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/post-deploy-smoke-headless-load-check.md +0 -0
  143. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/pre-release-python-canary-3-14t-free-threaded.md +0 -0
  144. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/promote-nav-footer-into-the-shared-style-system.md +0 -0
  145. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/prompt-injection-scanning-of-skill-markdown.md +0 -0
  146. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/property-based-tests-hypothesis-on-the-parsers.md +0 -0
  147. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/prose-and-terminology-linting-vale.md +0 -0
  148. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/quality-dashboard-sonarcloud-free-for-oss.md +0 -0
  149. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/reconcile-the-theme-drift.md +0 -0
  150. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/refresh-the-marketing-surface.md +0 -0
  151. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/reuse-helpers-kill-minor-dead-work.md +0 -0
  152. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/robust-tag-argument-parsing.md +0 -0
  153. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/runner-egress-monitoring-stepsecurity-harden-run.md +0 -0
  154. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/sbom-aware-scanning-osv-scanner.md +0 -0
  155. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/sbom-on-every-release-cyclonedx-syft.md +0 -0
  156. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/second-type-checker-pyright.md +0 -0
  157. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/secret-and-pii-scanning-of-installed-skills.md +0 -0
  158. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/secret-scanning-gitleaks-push-protection.md +0 -0
  159. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/security-linting-bandit-via-ruff-s-rules.md +0 -0
  160. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/shift-left-gate-pre-commit-pre-commit-ci.md +0 -0
  161. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/single-imperative-rule-extractor.md +0 -0
  162. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/single-tech-stack-prober.md +0 -0
  163. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/split-oversized-command-modules.md +0 -0
  164. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/startup-and-import-time-budget-x-importtime.md +0 -0
  165. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/stop-re-serializing-entry-meta-on-every-search.md +0 -0
  166. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/supply-chain-posture-openssf-scorecard.md +0 -0
  167. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/tap-signing-and-provenance-sigstore-minisign.md +0 -0
  168. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/theme-asset-linting-stylelint-eslint.md +0 -0
  169. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/typo-detection-codespell.md +0 -0
  170. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/typosquat-and-name-confusion-detection.md +0 -0
  171. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/unify-tilde-two-copies-have-a-boundary-bug.md +0 -0
  172. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/untrack-generated-build-noise.md +0 -0
  173. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/update-diff-before-apply.md +0 -0
  174. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/visual-regression-pass-on-the-guide.md +0 -0
  175. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/widen-the-ruff-rule-surface-b-sim-c4-perf-ruf.md +0 -0
  176. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/windows-in-the-ci-matrix.md +0 -0
  177. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/workflow-linting-actionlint.md +0 -0
  178. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/docs/roadmap/items/workflow-sast-zizmor.md +0 -0
  179. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/index.html +0 -0
  180. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/pyproject.toml +0 -0
  181. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/scripts/build_registries.py +0 -0
  182. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/scripts/build_roadmap.py +0 -0
  183. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/scripts/mutation_gate.py +0 -0
  184. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/setup.cfg +0 -0
  185. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/style/README.md +0 -0
  186. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/style/boost.css +0 -0
  187. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/style/boost.js +0 -0
  188. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/style/demo.html +0 -0
  189. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/conftest.py +0 -0
  190. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_bmad.py +0 -0
  191. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_configuration.py +0 -0
  192. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_discovery.py +0 -0
  193. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_hooks.py +0 -0
  194. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_info.py +0 -0
  195. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_intelligence.py +0 -0
  196. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_pkg.py +0 -0
  197. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_quality.py +0 -0
  198. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_taps.py +0 -0
  199. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_cli_team.py +0 -0
  200. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/functional/test_everyday_loop.py +0 -0
  201. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/make_fixture.py +0 -0
  202. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/smoke.sh +0 -0
  203. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_agents.py +0 -0
  204. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_ai.py +0 -0
  205. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_claude_settings.py +0 -0
  206. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_cliparse.py +0 -0
  207. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_config.py +0 -0
  208. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_dense.py +0 -0
  209. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_dense_fallback.py +0 -0
  210. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_embed.py +0 -0
  211. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_errors_and_cli_table.py +0 -0
  212. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_frontmatter.py +0 -0
  213. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_gitutil.py +0 -0
  214. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_journal.py +0 -0
  215. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_lockfile.py +0 -0
  216. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_logs.py +0 -0
  217. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_mcp.py +0 -0
  218. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_mutation_hardening.py +0 -0
  219. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_output.py +0 -0
  220. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_paths.py +0 -0
  221. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_policy.py +0 -0
  222. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_rag.py +0 -0
  223. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_registries_fresh.py +0 -0
  224. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_registry.py +0 -0
  225. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_roadmap_fresh.py +0 -0
  226. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_spin.py +0 -0
  227. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_store.py +0 -0
  228. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_token_parity.py +0 -0
  229. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_util.py +0 -0
  230. {boost_skill_cli-1.0.80 → boost_skill_cli-1.0.82}/tests/unit/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.80
3
+ Version: 1.0.82
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.80'
22
- __version_tuple__ = version_tuple = (1, 0, 80)
21
+ __version__ = version = '1.0.82'
22
+ __version_tuple__ = version_tuple = (1, 0, 82)
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -18,9 +18,10 @@ that ship in the same GitHub registries:
18
18
  from __future__ import annotations
19
19
 
20
20
  import json
21
+ import os
21
22
  import re
22
23
  from pathlib import Path
23
- from typing import List, Optional, Tuple
24
+ from typing import List, Optional, Set, Tuple
24
25
 
25
26
  from ..errors import BoostError
26
27
  from . import frontmatter, gitutil, paths, registry, util
@@ -42,10 +43,6 @@ DOC_STEMS = {"readme", "contributing", "license", "changelog", "security",
42
43
  "code_of_conduct", "index", "_index", "authors", "notice"}
43
44
 
44
45
 
45
- def _ignored(path: Path) -> bool:
46
- return any(part in util.IGNORED for part in path.parts)
47
-
48
-
49
46
  def _read(path: Path) -> Optional[Tuple[dict, str]]:
50
47
  try:
51
48
  return frontmatter.parse(path.read_text(encoding="utf-8", errors="replace"))
@@ -107,46 +104,51 @@ def _classify_workflow(path: Path, meta: dict) -> bool:
107
104
  def scan_dir(root: Path, tap_name: str = "local", curated: bool = False) -> List[dict]:
108
105
  root = Path(root)
109
106
  entries: List[dict] = []
110
- skill_dirs: List[Path] = []
111
- for skill_md in sorted(root.rglob("SKILL.md")):
112
- if _ignored(skill_md):
113
- continue
114
- parsed = _read(skill_md)
115
- if parsed is None:
116
- continue
117
- meta, body = parsed
118
- skill_dir = skill_md.parent
119
- default = skill_dir.name if skill_dir != root else root.name
120
- entries.append(_make_entry(root, skill_md, KIND_SKILL, default,
121
- tap_name, curated, meta, body))
122
- skill_dirs.append(skill_dir)
123
-
124
- for path in sorted(root.rglob("*")):
125
- if not path.is_file() or _ignored(path):
126
- continue
127
- # never re-index a file that belongs to a scanned skill directory
128
- if any(path == d or d in path.parents for d in skill_dirs):
129
- continue
130
- is_rule = _classify_rule(path)
131
- is_md = path.suffix.lower() == ".md" and path.name != "SKILL.md"
132
- if not is_rule and not is_md:
133
- continue
134
- parsed = _read(path)
135
- if parsed is None:
136
- continue
137
- meta, body = parsed
138
- if is_rule:
139
- kind = KIND_RULE
140
- elif _classify_workflow(path, meta):
141
- kind = KIND_WORKFLOW
142
- else:
107
+ skill_dirs: Set[Path] = set()
108
+ # One top-down walk instead of two rglob passes: prune ignored dirs in place
109
+ # so we never descend into .git/__pycache__, and test skill-dir membership
110
+ # against a set via each dir's own ancestor chain rather than O(files × dirs).
111
+ # Top-down order guarantees a file's governing SKILL.md dir is seen first, and
112
+ # the final entries.sort() normalizes output order regardless of walk order.
113
+ for dirpath, dirnames, filenames in os.walk(root):
114
+ dirnames[:] = [d for d in dirnames if d not in util.IGNORED]
115
+ here = Path(dirpath)
116
+ # A directory holding a SKILL.md is a skill: index it and remember the
117
+ # dir so its other files are not re-indexed as loose rules/workflows.
118
+ if "SKILL.md" in filenames:
119
+ parsed = _read(here / "SKILL.md")
120
+ if parsed is not None:
121
+ meta, body = parsed
122
+ default = here.name if here != root else root.name
123
+ entries.append(_make_entry(root, here / "SKILL.md", KIND_SKILL,
124
+ default, tap_name, curated,
125
+ meta, body))
126
+ skill_dirs.add(here)
127
+ # Files inside any skill directory belong to that skill, never re-indexed.
128
+ if here in skill_dirs or any(a in skill_dirs for a in here.parents):
143
129
  continue
144
- if path.name in RULE_FILENAMES:
145
- default = path.parent.name if path.parent != root else root.name
146
- else:
147
- default = path.stem
148
- entries.append(_make_entry(root, path, kind, default,
149
- tap_name, curated, meta, body))
130
+ for name in filenames:
131
+ path = here / name
132
+ is_rule = _classify_rule(path)
133
+ is_md = path.suffix.lower() == ".md" and path.name != "SKILL.md"
134
+ if not is_rule and not is_md:
135
+ continue
136
+ parsed = _read(path)
137
+ if parsed is None:
138
+ continue
139
+ meta, body = parsed
140
+ if is_rule:
141
+ kind = KIND_RULE
142
+ elif _classify_workflow(path, meta):
143
+ kind = KIND_WORKFLOW
144
+ else:
145
+ continue
146
+ if path.name in RULE_FILENAMES:
147
+ default = path.parent.name if path.parent != root else root.name
148
+ else:
149
+ default = path.stem
150
+ entries.append(_make_entry(root, path, kind, default,
151
+ tap_name, curated, meta, body))
150
152
 
151
153
  entries.sort(key=lambda e: (e["skill_md"], e["name"]))
152
154
  return entries
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boost-skill-cli
3
- Version: 1.0.80
3
+ Version: 1.0.82
4
4
  Summary: boost — Homebrew for AI coding skills
5
5
  Author: Jonathan Reyes
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -2,15 +2,15 @@
2
2
  id: prune-ignored-dirs-during-scan-dir-walk
3
3
  board: code
4
4
  section: internals
5
- status: planned
5
+ status: shipped
6
6
  category: Performance
7
7
  complexity: M
8
8
  impact: Low-Med
9
9
  wow: 2
10
10
  note:
11
11
  order: 12
12
- owner:
13
- pr:
12
+ owner: loop/prune-scan-dir
13
+ pr: 92
14
14
  title: Prune ignored dirs during <code>scan_dir</code> walk
15
15
  ---
16
16
  Two full <code>rglob</code> passes descend <b>into</b> <code>.git</code>/<code>node_modules</code> and only filter afterward, and the skill-dir membership test is O(files × skill_dirs) (<code>catalog.py:106,119–123</code>). Switch to an <code>os.walk</code> that prunes ignored dirs in place; index skill dirs in a set.
@@ -528,7 +528,7 @@
528
528
  </article>
529
529
 
530
530
  <article class="cap rcard">
531
- <div class="head"><span class="pill planned">Planned</span><span class="cat">Performance</span></div>
531
+ <div class="head"><span class="pill shipped">Shipped</span><span class="cat">Performance</span></div>
532
532
  <h3>Prune ignored dirs during <code>scan_dir</code> walk</h3>
533
533
  <p>Two full <code>rglob</code> passes descend <b>into</b> <code>.git</code>/<code>node_modules</code> and only filter afterward, and the skill-dir membership test is O(files × skill_dirs) (<code>catalog.py:106,119–123</code>). Switch to an <code>os.walk</code> that prunes ignored dirs in place; index skill dirs in a set.</p>
534
534
  <div class="meta">
@@ -239,6 +239,27 @@ class TestScanRulesAndWorkflows:
239
239
  assert [e["name"] for e in entries] == ["s"]
240
240
  assert entries[0]["kind"] == "skill"
241
241
 
242
+ def test_rule_entry_carries_tap_and_curated(self, tmp_path):
243
+ root = tmp_path / "tap"
244
+ (root / "nextjs").mkdir(parents=True)
245
+ (root / "nextjs" / ".cursorrules").write_text("Next.js expert.\n")
246
+ (e,) = catalog.scan_dir(root, "mytap", curated=True)
247
+ assert e["kind"] == "rule"
248
+ assert e["tap"] == "mytap"
249
+ assert e["curated"] is True
250
+
251
+ def test_ignored_dirs_pruned_for_loose_rules_and_workflows(self, tmp_path):
252
+ root = tmp_path / "tap"
253
+ (root / ".git").mkdir(parents=True)
254
+ (root / "sub" / "__pycache__").mkdir(parents=True)
255
+ (root / ".git" / "hook.mdc").write_text("---\ndescription: x\n---\n")
256
+ (root / "sub" / "__pycache__" / "commands").mkdir()
257
+ (root / "sub" / "__pycache__" / "commands" / "c.md").write_text(
258
+ "---\ndescription: y\n---\nx\n")
259
+ (root / "real").mkdir()
260
+ (root / "real" / ".cursorrules").write_text("real rule\n")
261
+ assert [e["name"] for e in catalog.scan_dir(root)] == ["real"]
262
+
242
263
  def test_unreadable_rule_file_skipped(self, tmp_path):
243
264
  root = tmp_path / "tap"
244
265
  (root / "a").mkdir(parents=True)
File without changes